코드를 보면, return address 는 strcpy의 주소여야 하고, strcpy의 ret 부분은 사용하지 못하게 해 놓았군요,, 그래서 strcpy 함수 자체의 역할을 이용하여 쉘을 따 보겠습니다. 풀이 방법buffer에 system 함수의 주소 + 더미 + “/bin/sh”를 저장해 둡니다. strcpy 함수의 인자에, ret + 4 과 buffer 의 주소를 넣어 줍니다. 그렇게 하면 ret+4 부분에 buffer 값이 들어가지겠죠? 여기서 중요한 점은 ret+4 부분이 뭐느냐..! 바로 strcpy의 ret 즉, strcpy 함수가 종료되면 돌아갈 주소랍니다! 그렇다면 ret+4 주소에는 buffer 값이 들어있으니 쉘이 따지겠네요! 필요한 것들을 바로 찾으러 갑시다. gdb로 strcpy의..
코드가 되게 깁니다. 하지만 어떻게 보면 되게 간단합니다. 힌트에 함수를 연속 호출하라고 합니다. RTL을 할 때 system + dummy[4] + 인자 1,2,3 … 이런식으로 하죠? 여기서 dummy 가 바로 system 함수의 return address 입니다. 즉, 이 주소를 계속 다음 함수의 주소로 바꾸어 주면 MO함수 까지 도달 할 수 있을 것 같습니다. 필요한 함수들의 주소를 찾습니다. 함수들의 return address를 계속 다음 함수의 주소로 바꾸어주고 마지막 MO함수에서는 *cmd 라는 인자값을 통해서 system 함수를 실행시키기 때문에 인자를 넣어주어야 해서 /bin/sh 의 주소를 찾아야합니다. /bin/sh 의 주소는 0xbffffaac 가 되겠네요! BBBB 즉, 62626..
- Total
- Today
- Yesterday
- C언어
- bugbear
- 비교 연산자
- orge
- 클래스
- 파이썬
- babyheap
- ftz
- 올리디버거
- OllyDbg
- Golem
- 포너블
- protostar
- Python
- angry_doraemon
- luckyzzang
- 리버싱
- picoctf
- HarekazeCTF
- 0ctf
- lob
- Codegate
- BaskinRobins31
- Pwnable.kr
- succubus
- zombie_assassin
- TAMUCTF
- Nightmare
- babypwn
- darkknight
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |