#About


[그림 1] - Death_knight.c 소스 코드 확인




#Solution


[ + ] 소스 코드 해석


buffer에 40바이트 할당 및 소켓 통신에 필요한 변수들을 선언하고 포트번호 6666번으로 접속을 기다린다


19, 56번 줄을 확인하면 buffer에 40바이트를 할당한 것에 비해 256바이트를 받으므로 오버플로우가 일어나며 


다른 문제와 달리 오버플로우 방지 및 문자 필터링 코드가 없으므로 손 쉽게 셸 획득이 가능하다




셸 획득에 필요한 코드는 리버스 셸코드로, 서버에서 클라이언트 측으로 접속하는 코드를 말한다


리버스 셸 코드는 아래의 링크에서 확인할 수 있으며 IPADDR과 PORT 부분에 값을 입력해주면 된다


https://www.exploit-db.com/exploits/25497/


IPADDR과 PORT부분의 값을 메타스플로잇을 이용하여 얻을 수 있지만 굳이 메타스플로잇을 이용하지 않더라도 


IP 주소 체계가 256진수로 이루어 졌음을 알고 있다면 직접 계산도 가능하다 


해당 문제를 해결함에 있어 사용할 클라이언트 IP 주소는 192.168.232.136이며 PORT는 12345이다


[그림 2] - 클라이언트 IP 확인 및 nc를 통한 12345 포트 오픈


256진수로 이루어진 192.168.232.136을 10진수로 변환하는 과정은 아래와 같고 10진수 값으로 3232295048이 된다


192 * 256^3 = 3221225472

168 * 256^2 = 11010048

232 * 256^1 = 59392

136 * 256^0 = 136


위 10진수 값을 16진수로 변환하면 0xC0A8E888이되며 또한 PORT 번호 12345는 16진수로 변환 시 0x3039가된다


[그림 3] - 익스플로잇 코드


구해준 IP & PORT의 16진수 값을 위와 같이 입력해준 뒤 코드를 실행하면 아래와 같이 실행되며


[그림 4 ] - 코드 동작


조금 기다리게 되면 다른 아래와 같이 포트를 열어주었던 터미널에서  Connection 되었음을 확인할 수 있고 셸을 획득할 수 있었다


[그림 5] - 셸 획득



[그림 6] - Lord of Buffer Overflow 클리어

+ Recent posts