코드를 보면 다음과 같이 이전단계에서 argv[2]를 사용할 수 없고 argv[1] 또한 메모리 초기화로 인해 이용할 수 없는 상황이었다.



그렇다면 사용할 수 있는 부분은 argv[0] 값인 실행파일명이었다.


실제로 해당 부분을 사용할 수 있는지 확인해보기 위해 gdb로 main의 leave 지점에 브포건 후 esp 영역부터 쭉 확인해보면 다음과 같이 실제 실행파일명이 스택내에 존재하고 있는 것을 알 수 있었다.



그렇다면 실행파일명에 쉘코드를 박아 실행시키면 스택내에 위와같이 쉘코드가 올라갈 것이고 RET를 해당주소로 덮으면 익스가 가능할 거라고 생각했고 파일명에 NOP와 쉘코드를 박아서 만들었더니 에러가 떴다. 쉘코드에 0x2f가 포함되면서 해당 값이 디렉터리 구분자로 인식되면서 에러가 났던거였다. 0x2f가 포함안된 쉘코드로 다시 실행파일을 만들었다.



이제 해당 실행파일명이 저장되는 메모리 주소를 구해야되는데 기존의 구한 파일명과 길이가 달라 메모리값 차이가 존재해 코어파일을 통해 주소를 구했다.




이제 필요한건 다 구했으니 그대로 익스해주면 된다.



쉘까지 뜨는건 확인했으니 이제 쉘코드로된 실행파일이 실행될 때 실제 setuid가 걸린 troll 바이너리가 실행되도록 심볼릭 링크 걸어주고 다시 익스하면 된다.










'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB vampire -> skeleton  (0) 2018.01.09
LOB troll -> vampire  (0) 2018.01.09
LOB darkelf -> orge  (0) 2018.01.08
LOB wolfman -> darkelf  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,