코드가 상당히 긴데, 우리가 집중적으로 봐야할 것은 execve 함수를 무조건 사용해야만 한다는 점이다. execve 함수를 사용하기 위해 gdb로 execve 함수의 주소값을 찾았다. 그리고 execve 함수의 사용법을 알아야하는데, execve 함수에는 인자가 3개가 들어간다. 파일이름 , argv * [] , 환경변수 이렇게 인자 3개가 들어간다. 그래서 파일이름은 “/bin/sh” 로 바꾸어주고 argv * [] 는 포인터 배열이여서 끝에 \x00 즉 NULL이 들어가야한다. 그리고 환경변수는 사용을 하지 않을 것이기 때문에 NULL로 채워 준다. 무엇을 구해야하는지 알았으니, 구해보도록 하자. “/bin/sh” 주소를 구하는 코드이다. “/bin/sh” 주소 -> 0x400fbff9 파일을 복사..
코드를 보면 이제 스택영역을 사용할 수 없게 되었습니다. RTL이라는 기법을 사용합니다. RTL 을 사용하기 위해 system 함수의 주소를 알아냅니다. 그리고 system 함수의 인자로 “/bin/sh” 를 사용할 것이기 때문에 “/bin/sh”의 주소를 찾아주는 코드를 작성합니다. “/bin/sh” 의 주소를 알아냈습니다. 0x400fbff9 payload 구성은 | buffer [40] | SFP [4] | RET(system 함수주소)[4] | Dummy [4] | 인자(“/bin/sh”)[4]| 로 구성됩니다. system 함수 주소와 “/bin/sh” 사이에 왜 더미가 생기는지 궁금하시면FTZ Level11 (RTL) 편을 보시면 됩니다. 쉘이 따인것을 확인 할 수 있습니다.
- Total
- Today
- Yesterday
- orge
- Nightmare
- 리버싱
- succubus
- protostar
- luckyzzang
- Codegate
- 클래스
- 포너블
- HarekazeCTF
- lob
- babyheap
- TAMUCTF
- Golem
- Python
- 올리디버거
- 파이썬
- C언어
- zombie_assassin
- Pwnable.kr
- babypwn
- bugbear
- picoctf
- OllyDbg
- ftz
- darkknight
- 0ctf
- angry_doraemon
- 비교 연산자
- BaskinRobins31
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |