본문 바로가기
system

[LOB] orc

by MOVE🔥 2016. 9. 27.
728x90
반응형

코드


코드의 동작을 살펴보면 인자로 받은 값을 strcpy를 이용하여 buffer에 값을 할당한다. 그렇기 때문에 strcpy에서 buffer over flow 가 발생하여 이를 공격하는 문제임은 확실한데, 그 전에 검사하는 것이 많다. 


1. 인자 검사 : 인자가 제대로 들어왔는 지를 확인

2. egghunter를 방지하기 위한 : eggshell이나 환경변수를 이용한 공격을 방지하기 위해, 환경변수의 값을 NULL로 초기화한다.

3. 인자의 값 검사 : 인자가 bf로 시작해야 한다.


이들을 모두 만족하게 우회하여 buffer over flow 를 발생시켜, 쉘을 획득하는 문제이다.


공격

취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다.

우회해야 하는 조건들을 통틀어 보았을 때, RTL 이나 Eggshell 같은 방식의 공격은 불가능하다. 따라서 정상적으로 스택 영역인 buffer 어딘가에 shellcode를 삽입해야 한다.


1. 떨어져 있는 거리 구하기

RET, EBP 까지 쓰레기 값으로 채우기 위해 떨어져있는 거리를 구하도록 한다.

buffer의 크기가 40이고, 어셈 코드를 통해 확인해도 40이다. 이후 거리 계산은  SFP 인 4를 더해야 한다.



2. buffer 영역 확인하기.

shellcode 가 적재되는 공간의 주소는 bf로 시작해야 하며, 이곳을 RET가 가르키게 해야 한다. 40크기 이하의 shellcode가 필요하며, 다음과 같은 영역에 적재하면 된다.



3. Payload 작성

[40Byte Buffer] + [4Byte SFP] + [RET] 이기 때문에

[19Byte NOP] + [25byte Shellcode] + [RET(0xbf....)] 와 같이 작성 하면 된다.


결과

쉘 획득









728x90
반응형

'system' 카테고리의 다른 글

[LOB] darkelf  (0) 2016.09.27
[LOB] wolfman  (0) 2016.09.27
[LOB] goblin  (1) 2016.09.27
[LOB] cobolt  (0) 2016.09.27
[LOB] gremlin  (0) 2016.09.27

댓글