19번째 푼 문제이다!
오늘은 BOF원정대의 고블린을 처치해보자!
고블린이 보인다.
(고블린)
먼저 C코드를 확인해보자.
(고블린 C코드)
C코드를 보니 코볼트 녀석과 동일하다. 다만 입력에 있어서 차이가 있다.
입력을 표준입력으로 넣어주기만 하면 동일하게 처치할 수 있다.
먼저 메모리 주소를 확인하기 위하여 gdb로 분석해보자.
입력을 표준입력으로 넣어주기만 하면 동일하게 처치할 수 있다.
먼저 메모리 주소를 확인하기 위하여 gdb로 분석해보자.
(표준입력 메모리 위치)
표준입력이 어디에 올라가는지 확인해보자.
여기서 버퍼를 배열을 사용한다. 배열은 힙 자료구조와 같이 높은주소로 자라기 때문에 배열로 된 버퍼가 주어지면 RET 주소를 쉽게 덮어 쓸 수 있다.
먼저 주어진 배열 버퍼를 꽉채워보자. A 16개를 입력한다.
여기서 버퍼를 배열을 사용한다. 배열은 힙 자료구조와 같이 높은주소로 자라기 때문에 배열로 된 버퍼가 주어지면 RET 주소를 쉽게 덮어 쓸 수 있다.
먼저 주어진 배열 버퍼를 꽉채워보자. A 16개를 입력한다.
(메모리 상태)
16바이트가 A로 가득 찬 모습을 볼 수 있다. 마지막 00 널문자가 다음 메모리 영역으로 초과된 것을 볼 수 있다. 이제 우리는 여기서 +4바이트(Saved EBP자리) 를 A로 더 채워준 후 RET주소를 EBP+8의 주소로 덮어 쓸 것이다. EBP+8에 우리의 쉘코드를 올릴 것이기 때문이다. :)
그렇다면 우리가 쉘코드를 올릴 EBP+8의 위치를 먼저 살펴보자.
그렇다면 우리가 쉘코드를 올릴 EBP+8의 위치를 먼저 살펴보자.
(쉘코드가 올라갈 위치)
쉘코드가 올라갈 위치까지 확인했다면 끝이다.
정리를 하면
A 20개를 입력한 후 그 뒤에 RET주소에 쉘코드가 올라갈 위치로 덮어쓴다. 그리고 그 뒤에 이어서 쉘코드를 올려서 입력할 것이다.
고!
정리를 하면
A 20개를 입력한 후 그 뒤에 RET주소에 쉘코드가 올라갈 위치로 덮어쓴다. 그리고 그 뒤에 이어서 쉘코드를 올려서 입력할 것이다.
고!
(공격 성공)
바로 쉘이 떨어지는 것을 확인 할 수 있다.
whoami로 확인 후 my-pass를 확인해보면 고블린 문제도 해결할 수 있다.
whoami로 확인 후 my-pass를 확인해보면 고블린 문제도 해결할 수 있다.
(고블린 처치)
'WarGame > 500 Project' 카테고리의 다른 글
(21/500) Lord of the BOF - wolfman (0) | 2017.06.20 |
---|---|
(20/500) Lord of the BOF - orc (0) | 2017.06.20 |
(18/500) Lord of the BOF - cobolt (0) | 2017.05.05 |
(17/500) Lord of the BOF - gremlin (0) | 2017.05.05 |
(16/500) Wargame.kr - ip log table (0) | 2017.04.20 |