티스토리 뷰

이번 문제는 힌트가 없습니다. 한 번 보시죠.

너무 소스코드가 길어서 없어도 되는 부분은 없앴습니다.

중요한 부분은 Null Canary 를 넣어주기 때문에 인자를 길게 구성할 수 없다는 것입니다.

그래도 문제가 풀 수 있도록 구성해야 하니 fgets 함수를 제공해주네요. 어떻게 풀어야 할까요 ?

ebp 값을 저장해놓고 복구하는 과정이 없고, buffer 의 값을 0으로 모두 초기화시키니...

stdin 임시 버퍼를 사용하면 될 것 같습니다. 하지만 문제가 있습니다.

(gdb) x/4xw 0x008cb740

0x8cb740 <_IO_2_1_stdin_>: 0xfbad2288 0xb7fa9005 0xb7fa9005 0xb7fa9000

(gdb) x/4xw 0x008cb740

0x8cb740 <_IO_2_1_stdin_>: 0xfbad2288 0xb7fb5005 0xb7fb5005 0xb7fb5000

위의 결과는 stdin 임시 버퍼의 주소를 본 결과 입니다.

ASLR 이 걸려있어서 값이 고정되지 않는다는 것을 볼 수 있습니다.

그렇기때문에 하나의 주소를 정해서 공격 코드를 구성하고 브루트포스 공격을 해야합니다.

다양한 문제 풀이가 있을 수 있겠지만, 전 mprotect 를 이용하겠습니다.(처음 풀 때는 exec* 계열을 사용했습니다.)

| buf(260) | 0xb7fxx10c | leave | 0x31337 | +

| mprotect | 0xb7fxx130 | 0xb7fxx000 | 0x800 | 0x7 | +

| 0x90(256) | ShellCode(25) |

위와 같이 구성한 후에 브루트포스를 통해서 문제를 해결했습니다.

구성 자체는 간단하니 설명은 생략하겠습니다.

let me ride !

P.S. 오늘의 교훈: 귀찮을 때는 mprotect

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함