2013년 12월 16일 월요일

windows xp 에서 MSEC extension 사용하기


즐거운 연말을 보내기 위해 1주일 짜리 '소프트웨어 버그헌팅' 교육을 가게 되었습니다. 오호호~~
워드 프로세서 프로그램의 크래시를 일으키는 실습을 하던중에 예전에 '오 이런것도 있네' 했던 MSEC 확장이 생각났습니다. 

http://msecdbg.codeplex.com/

msec 은 MS 에서 배포하는 고마운 WinDbg 확장모듈로, 자동으로 크래시에 대한 분석을 수행하고, 이 크래시가 exploitable 한지 확인을 해줍니다. 
냉큼 다운로드 받고, WinDbg 로 로딩하려는데 계속 에러가 나는군요.


우선 depends 로 봤더니 msvcr11.dll, msvcp11.dll 이 필요하네요. visual studio 2012 로 빌드를 했나봅니다. visual studio 2012 redistributable package 를 설치해 주면 되겠죠?
(http://www.microsoft.com/en-us/download/details.aspx?id=30679)
재배포 패키지 설치 후 다시 로드를 해봐도 마찬가지로 에러를 내면서 로딩이 안됩니다. Orz



depends 로 다시 확인해 보니, Kenel32.dll 의 GetTickCount64 함수를 import 하고 있는데, msdn 에서 확인해보니 이 함수는 vista 부터 사용가능한 함수입니다. 
제 테스트 환경은 windows xp sp3 라서 dll 로딩이 실패할 수 밖에요.
어떻게 할까 한 10초 고민하다가 그냥 PE 의 import 테이블을 직접 고치는게 제일 편할것 같습니다. GetTickCount() 나 GetTickCount64() 나 뭐 정밀도의 차이가 좀 있을뿐 프로그램 돌아가는데는 별 문제 없으니, GetTickCount() 함수를 import 하도록 실행파일을 변경시켜 버리면 될것 같습니다.


100만년 전에 열심히 사용하던 LordPE 를 검색해서 다운로드 받고 실행합니다. (우와 PE+ 도 지원하고, 정말 오랜만이네요, 반갑다!)



IAT 를 고쳐야 하니까 'Directories' 버튼을 눌러주고요.





GetTickCount64 를 GetTickCount 로 변경해주면 됩니다.

이제 다시 !load winext/msec.dll 명령으로 extension 을 로드하고, !exploitable 명령을 실행해보면... 
오오옷! exploit 가능한 크래시군용~ 



 참 쉽죠? :-) (쉽긴 개뿔...-_-;;)