목록HackCTF/Pwnable (11)
Bace
문제는 다음과 같다. 바이너리는 32비트이다. IDA로 보면 vuln, flag, main 함수가 있다. main을 보면 vuln으로 간다. vuln은 다음과 같다. flag는 다음과 같다. gdb로 봐봤다. main에서 vuln을 call하는데 vuln의 주소는 0x804854b 이다. vuln의 ret을 flag의 주소로 바꾸면 될 것 같다. flag의 주소는 0x080485b4이다. IDA로 print_got의 주소를 찾고, flag를 찾은 후 Ex 코드를 작성했다. exploit code 에서는 flag에서 주소 크기인 4만큼을 빼고 한다. flag가 떴다. HackCTF{여보게_오늘_반찬은_포맷스트링이_어떠한가?}
32비트 프로그램이다. IDA로 main을 보면 아래와 같이 있다. sup shell sup이 puts로 받은 s를 return 시켜주는거니까 sup에다가 shell의 주소를 넣어주면 된다. s가 ebp-8Ch이고, v5가 ebp-Ch 이므로 sup인 v5를 bof 해서 shell을 실행시키려면 8C-C인 0x80 뒤에 shell 주소를 보내주면 된다. 0x80을 10진수로 바꿔서 128로 보내주었다. # Exploit flag가 떴다. HackCTF{h3y_dud3_600d_f0r_y0u}
문제를 들어가서 파일을 다운로드 받는다. 파일 형식을 보면 32비트이다. IDA로 파일을 연다. main을 보면 s의 사이즈가 0x34 (10진수로 52) 인데 fget로는 45를 받는다. 만약 v5 가 -559038737 이면 /bin/dash를 준단다. gdb로 main문을 확인해보았다. deadbeef이면 shell을 주는거 같다. s가 ebp-34h 이고 v5가 ebp-Ch 이므로 v5를 덮기 위해서는 34-C인 0x28 뒤에 붙여서 주면 된다. 0x28을 10진수로 바꿔서 40 뒤에 deadbeef를 줬더니 이겼다고 뜬다. 이때 deadbeef 는 리틀 엔디안으로 써야한다. -> payload에 p32(0xdeadbeef) 라고 써서 넘겨줘도 된다. # Exploit flag가 떴다. HackC..