전 코드의 77자는 사라지고 argc 가 2개인지 검사하네요. 이제 argv[2] 를 이용한 공략은 불가합니다. 그리고 argv[1] 은 0으로 초기화 되네요. 그렇다면 argv[0] 을 사용하라는 의미가 됩니다. 파일을 복사해주고 gdb로 argv[0] 을 포함하게 실행시킵니다. 0xbffffc92 에 argv[0] 의 값이 들어가 있는 것을 볼 수 있습니다. 이 주소를 토대로 페이로드를 구성하면 되겠습니다. 실행파일의 이름을 NOP과 쉘코드를 포함하게 바꾸어 줍니다. 이때 이름이 바뀌지 않는 부분이 있는데 바로 ‘/’ 가 포함 되어 있는 쉘코드를 사용해서 그렇습니다. 폴더이름에는 ‘/’ 가 들어갈 수 없습니다. 따라서 ‘/’ 2f 가 포함되지 않은 쉘코드를 사용하여 이름을 바꿔줍시다. 2f 가 포함되..
바뀐 점은 argv[0] 의 길이를 77로 맞춰야 한다는 점입니다. 여기서 argv[0] 은 프로그램을 실행시킬 때 ./orge aaaa bbb 에서 ./orge 를 의미합니다. 따라서 ./orge 가 77자가 되면 되겠네요. 파일을 복사해주고 복사한 파일을 gdb로 까주고 실행시킵니다. 616161이 0xbffffc50 부터 시작되는 것으로 보아 argv[2]의 시작 주소를 알 수 있습니다. core 파일을 확인해야 할 수도 있으니 미리 두 파일의 심볼릭링크 이름을 75자로 맞춰줍니다.75자로 맞춰주는 이유는 실행시킬때 ‘./’ 도 글자수에 포함되기 때문입니다. 바로 복사한 파일을 아까 구한 argv[2]의 주소로 페이로드를 구성해 공격했더니 core dumped 가 뜹니다. 역시나 구한 주소와 다른 ..
- Total
- Today
- Yesterday
- luckyzzang
- picoctf
- ftz
- 비교 연산자
- 파이썬
- darkknight
- zombie_assassin
- Pwnable.kr
- C언어
- Python
- OllyDbg
- BaskinRobins31
- babypwn
- orge
- babyheap
- 올리디버거
- 리버싱
- angry_doraemon
- HarekazeCTF
- protostar
- TAMUCTF
- lob
- Golem
- succubus
- Codegate
- 0ctf
- Nightmare
- bugbear
- 클래스
- 포너블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |