BOF 원정대의 마지막 몬스터 death_knight를 잡아보자.!

* death_knight 소스


(death_knight.c)


소스코드를 보니 마지막 문제는 Remote BOF 문제였다.
원격에서 공격하는 방법인데
방법은 크게 두가지가 있다. 바인드쉘을 이용하거나, 리버스쉘을 이용하거나.

나의 계획은 바인드쉘을 이용할 것이었다.
일단 netstat 명령어로 소스코드대로 6666 포트가 열려있는지 확인해본다.


(열린 포트 확인)


파일 권한을 확인해보니 역시 setuid가 설정되어있고 eath_knight가 주인이다.



(setuid)



바인드 쉘을 구해서 테스트해보았다.
1337 포트를 오픈하는 코드이다.



(바인드쉘 테스트)



실행!


(1337 오픈!)



하지만 이 방법에 문제가 있었다.
(아직 이 문제에 대한 의문은 해결되지 않았다...)
(바로 bof 공격 코드까지 파이썬으로 만든후 공격을 성공시켜서 1337 포트가 열리는 것까지 확인했다.



(포트 오픈)



그런데 이상한점이 있었다.
여기서 '아! 이제 열렸으니 접속을 해볼까?' 하고 접속을 시도하면 짤린다...

와이어샤크로 분석해보니 ack 요청을 보내자마자 서버에서 fin 을 날려 종료시킨다...
이유는 모르겠다. 방화벽때문인가??...
계속 이것저것 시도했지만 여전히 접속이 안되었다...

그리하여 방법을 바꾸어 리버스 쉘을 이용하기로 했다.
내가 포트를 오픈하고 서버에서 나에게 접속을 시도하게 하는 것이다.
만약 이때 짤리면 내 방화벽을 내리면 되기때문에 이 방법으로 전환했다.

shell 코드는 인터넷에서 구했다. 내 호스트 IP 주소와 5555 포트번호로 접속을 시도하는 리버스 쉘코드이다.
이 코드를 이용하여 익스플로잇을 만든 후 실행했다.



(exploit 코드)




(공격 모습)



이 때 나는 nc를 이용하여 5555 포트를 열고 기다리고 있었는데 연결이 성립되면서 쉘을 획득 할 수 있었다.



(공격 성공)



쉘 획득!

이로서.....!

BOF 원정대의 모든 문제를 클리어할 수 있었다.



(all clear!)


'WarGame > 500 Project' 카테고리의 다른 글

(38/500) Suninatas - Binary(10)  (0) 2017.06.27
(37/500) Suninatas - Binary(9)  (0) 2017.06.27
(35/500) Lord of the BOF - xavius  (0) 2017.06.25
(34/500) Lord of the BOF - nightmare  (0) 2017.06.23
(33/500) Lord of the BOF - succubus  (0) 2017.06.23

+ Recent posts