코드가 되게 깁니다. 하지만 어떻게 보면 되게 간단합니다. 힌트에 함수를 연속 호출하라고 합니다. RTL을 할 때 system + dummy[4] + 인자 1,2,3 … 이런식으로 하죠? 여기서 dummy 가 바로 system 함수의 return address 입니다. 즉, 이 주소를 계속 다음 함수의 주소로 바꾸어 주면 MO함수 까지 도달 할 수 있을 것 같습니다. 필요한 함수들의 주소를 찾습니다. 함수들의 return address를 계속 다음 함수의 주소로 바꾸어주고 마지막 MO함수에서는 *cmd 라는 인자값을 통해서 system 함수를 실행시키기 때문에 인자를 넣어주어야 해서 /bin/sh 의 주소를 찾아야합니다. /bin/sh 의 주소는 0xbffffaac 가 되겠네요! BBBB 즉, 62626..
이제는 ret sled 까지 사용을 못하게 되었네요. 이럴땐 FakeEBP라는 기법을 사용할 수 있습니다. FakeEBP 기법의 원리를 설명해드리자면 FPO와 같이 함수 에필로그의 원리를 이용하는 것입니다. SFP를 buf-4 주소로 바꾸어주고 RET은 leave-ret Gadgetd 을 사용하는 겁니다. 한마디로 말하자면 함수 에필로그를 두번하는 것이라고 볼 수도 있겠습니다. 먼저 버퍼의 구조는 이렇게 구성될 것입니다. 함수 에필로그에서 mov esp, ebp를 하게되면 esp가 ebp쪽으로 쭉 당겨져 옵니다. 그리고 sfp 를 buf-4 주소로 바꾸어주고 pop ebp를 하게되면 ebp는 buf-4주소로 갈것이고, esp는 esp+4 부분을 가리키게 될 것입니다. 그리고 ret을 할 때 retrun ..
- Total
- Today
- Yesterday
- OllyDbg
- C언어
- orge
- Codegate
- 리버싱
- protostar
- TAMUCTF
- bugbear
- BaskinRobins31
- 올리디버거
- Pwnable.kr
- 비교 연산자
- angry_doraemon
- lob
- babypwn
- 파이썬
- picoctf
- 0ctf
- Golem
- 포너블
- Python
- zombie_assassin
- luckyzzang
- Nightmare
- HarekazeCTF
- 클래스
- ftz
- darkknight
- succubus
- babyheap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |