728x90
반응형
코드
코드의 동작을 살펴보면 gets를 통해 buffer에 값을 입력받는다. gets 함수는 입력 받는 사이즈의 제한이 없다. 따라서 gets에 buffer보다 큰 사이즈를 입력하여 buffer over flow를 발생시킨다.
공격
취약한점을 찾고 buffer over flow임을 알았으니 공격을 시작한다.
이전 두 문제와는 달리 값을 인자로 받지 않고, 프로그램 실행 도중 입력받기 때문에, 파이프를 이용하여 공격 코드를 작성한다. ([payload] | ./goblin)
1. 떨어져 있는 거리 구하기
RET, EBP 까지 쓰레기 값으로 채우기 위해 떨어져있는 거리를 구하도록 한다.
buffer의 크기가 16이고, 어셈 코드를 통해 확인해도 16이다. 이후 거리 계산은 SFP 인 4를 더해야 한다.
2. system 주소 구하기
(이전 문제와 동일) gdb를 활용하여 system 함수의 주소를 구한다.
3. /bin/sh 주소 구하기
(이전 문제와 동일) 미리 작성해 둔 sh 프로그램을 이용하여 /bin/sh의 주소를 구한다.
4. Payload 작성
[16Byte Dummy] + [4Byte SFP] + [System] + [4Byte Dummy] + [/bin/sh] 와 같이 작성 하면 된다.
결과
쉘 획득
728x90
반응형
'system' 카테고리의 다른 글
[LOB] darkelf (0) | 2016.09.27 |
---|---|
[LOB] wolfman (0) | 2016.09.27 |
[LOB] orc (0) | 2016.09.27 |
[LOB] cobolt (0) | 2016.09.27 |
[LOB] gremlin (0) | 2016.09.27 |
댓글