코드를 보니 스택 영역을 다 초기화 시킵니다.. 그렇다는 말은 buffer, argv, env 같은 스택 영역에서는 공격을 할 수 없다는 말이됩니다. 단도 직입적으로 말하면 이 문제는 공유라이브러리 영역을 사용하여 문제를 풉니다. 공유 라이브러리 영역이란 프로그램이 시작되기 전 심볼들을 로드하여 필요할 때마다 사용하는 동적 라이브러리 입니다. 임의의 실행파일을 공유 라이브러리를 사용하여 컴파일 하면, 링커가 실행파일에 ‘이 파일이 실행될 때 이 라이브러리를 로딩한다.’ 라는 표시를 해둡니다. 파일이 실행되어 공유 라이브러리를 사용하면, 그 후 공유 라이브러리를 사용하는 모든 프로그램은 만들어진 라이브러리를 사용하게 됩니다. LD_PRELOAD 라는 환경변수를 통하여 라이브러리를 공유 라이브러리 영역에 올..
전 코드의 77자는 사라지고 argc 가 2개인지 검사하네요. 이제 argv[2] 를 이용한 공략은 불가합니다. 그리고 argv[1] 은 0으로 초기화 되네요. 그렇다면 argv[0] 을 사용하라는 의미가 됩니다. 파일을 복사해주고 gdb로 argv[0] 을 포함하게 실행시킵니다. 0xbffffc92 에 argv[0] 의 값이 들어가 있는 것을 볼 수 있습니다. 이 주소를 토대로 페이로드를 구성하면 되겠습니다. 실행파일의 이름을 NOP과 쉘코드를 포함하게 바꾸어 줍니다. 이때 이름이 바뀌지 않는 부분이 있는데 바로 ‘/’ 가 포함 되어 있는 쉘코드를 사용해서 그렇습니다. 폴더이름에는 ‘/’ 가 들어갈 수 없습니다. 따라서 ‘/’ 2f 가 포함되지 않은 쉘코드를 사용하여 이름을 바꿔줍시다. 2f 가 포함되..
전 코드와 비교해서 바뀐점은 argv[1] 의 길이를 체크하는 것 뿐이다. 복사해주고 argv[2] 의 주소를 찾기위해 gdb로 디버깅 합니다. 0xbffffc4c 에서 61616161이 반복되는 것을 알 수 있습니다. 바로 페이로드를 구성해서 공격을 해보았는데 core dumped 가 떴습니다.core 파일 까보러 갑시다. 역시나 우리가 입력한 주소와 다른 주소가 argv[2] 의 주소로 되어있었습니다. \x90 중 아무주소나 RET에 넣어주면 될 것 같습니다.
- Total
- Today
- Yesterday
- 0ctf
- zombie_assassin
- 리버싱
- 파이썬
- 포너블
- ftz
- Pwnable.kr
- 클래스
- C언어
- lob
- luckyzzang
- Nightmare
- angry_doraemon
- Golem
- TAMUCTF
- succubus
- 비교 연산자
- 올리디버거
- darkknight
- Python
- Codegate
- picoctf
- babypwn
- protostar
- orge
- babyheap
- HarekazeCTF
- OllyDbg
- bugbear
- 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 |