먼저, 파일이 pcap 파일이라는것 정도는 간단히 알수 있으므로, 와이어샤크로 열어보았습니다.
그리고 쭉 내려보면 telnet이 많이 보이고,
오른쪽 클릭해서 'follow tcp stream'을 통해서 보면, 텔넷으로 원격접속을 한것을 알수있습니다.
그러면 우선 텔넷 패킷들만 필터링하기 위해서 filter에 "tcp.port == 23" 으로 패킷 필터링을 합니다.
그러면 대충 나오는 아이피가
10.10.60.173
10.10.60.102
10.10.60.64
10.10.60.90
정도가 나오고, 10.10.60.102가 서버 아이피라는것은 간단히 알수있습니다.
그중 10.10.60.64의 tcp stream을 살펴보면
.ackcat","\x40\x8a\xff\xbf\n"x.[C
llss
ccdd ....
ccdd ....
ccdd.^H.^Hcc.^H.. .. ... ... .. ... .. ... ... ..ccaatt kkee.....yy..ttxxtt
|
뒷부분에 이와 같이 나옵니다.
id 명령어를 치니, id가 0으로 나오므로, 루트권한을 획득한것을 알수있고.
cat key.txt를 쳤더니 W4rning_TongSo0!! 가 나왔죠.
그러므로 key값은 W4rning_TongSo0!! 입니다.
또 버퍼오버플로우를 시도한쪽을 살펴보면, "\x00"x36,,"\x40\x8a\xff\xbf\n "
가 나오죠.
BOF를 어느정도 공부한사람이라면 \x40\x8a\xff\xbf 가 리턴 어드레드라는것을 쉽게 알수있습니다.
이걸 정답에 쓰기위해 변환하면 0xbfff8a40 이 되겠죠.
또 마지막으로, sfp - buf의 어드레스값을 구하기 위해선, 텔넷 패킷 중간중간에 나오는 gdb 명령어의 결과를 살펴봐야합니다.
gdb의 disas main의 결과값을 보시면
그중에
0x08048400 <main+24>:.lea 0xffffffb8(%ebp),%eax |
라는 결과가 strcpy에 앞서 있습니다.
AT&T 어셈블리에서는 ??(%ebp) 라고 되어있으면 ebp+??의 위치에 있다는뜻인데,
여기서는 마이너스이기때문에 0xffffffb8이 나왔습니다. 이걸 마이너스의 형태로 바꾸면, -0x48 (0x100000000 - 0xffffffb8)입니다.
즉, buf = ebp - 0x48 이라는것이죠.
문제에선 ebp - buf(sfp) 이므로, 정답은 0x48이 됩니다.
그러므로 정답은 10.10.60.64_0x48_W4rning_TongSo0!!_0xbfff8a40 입니다.
'Computer Security > CTF' 카테고리의 다른 글
[Codegate 2013] Web 100 simple write up (1) | 2013.03.03 |
---|---|
[PHDays 2012] Binary 100 Write up (0) | 2012.12.21 |
[PHDays 2012] Misc 200 Write-up (0) | 2012.12.21 |
[Ahnlab wave 2012] network 난이도 low 문제풀이 (0) | 2012.09.11 |
[Ahnlab wave 2012] network 난이도 middle 풀이 (0) | 2012.09.09 |