본문 바로가기
system

[LOB] goblin

by MOVE🔥 2016. 9. 27.
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

댓글