코드를 살펴보면 main은 마지막에 problem_child 함수를 부르고 끝내는 것을 알 수 있다. 그리고 problem_child 함수는 버퍼는 40만큼 생성하는데 strncpy로 41byte 만큼 버퍼에 복사시키는 것으로 보아 여기서 1byte Overflow가 발생한다는 것을 알 수 있다. 하지만 그렇게 되면 우리는 RET의 주소를 변경시키지 못하게 되는데, 이때 사용할 수 있는 기법이 FPO 이다. 함수가 시작할 땐 함수 프롤로그, 종료될 땐 함수 에필로그가 된다. 함수 에필로그의 구성은 leave와 ret으로 구성되어 있다. leave 는 mov esp ebp, pop ebp 를 수행한다. 즉, esb를 ebp 로 쭉 잡아 땡기고 ebp를 pop 시킨다. ebp가 pop이 되면 esp는 +4의..
코드를 보니 스택 영역을 다 초기화 시킵니다.. 그렇다는 말은 buffer, argv, env 같은 스택 영역에서는 공격을 할 수 없다는 말이됩니다. 단도 직입적으로 말하면 이 문제는 공유라이브러리 영역을 사용하여 문제를 풉니다. 공유 라이브러리 영역이란 프로그램이 시작되기 전 심볼들을 로드하여 필요할 때마다 사용하는 동적 라이브러리 입니다. 임의의 실행파일을 공유 라이브러리를 사용하여 컴파일 하면, 링커가 실행파일에 ‘이 파일이 실행될 때 이 라이브러리를 로딩한다.’ 라는 표시를 해둡니다. 파일이 실행되어 공유 라이브러리를 사용하면, 그 후 공유 라이브러리를 사용하는 모든 프로그램은 만들어진 라이브러리를 사용하게 됩니다. LD_PRELOAD 라는 환경변수를 통하여 라이브러리를 공유 라이브러리 영역에 올..
- Total
- Today
- Yesterday
- picoctf
- luckyzzang
- C언어
- lob
- Pwnable.kr
- 0ctf
- TAMUCTF
- zombie_assassin
- darkknight
- OllyDbg
- babypwn
- babyheap
- 리버싱
- succubus
- orge
- ftz
- Nightmare
- HarekazeCTF
- 클래스
- 포너블
- 올리디버거
- 비교 연산자
- angry_doraemon
- BaskinRobins31
- 파이썬
- Golem
- Codegate
- protostar
- Python
- 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 |