소프트웨어 시스템에서 취약점을 찾는 것은 공격 코드를 만드는 것이 중요하다.
immunity디버거는 공격 코드 만드는 것을 쉽게 해준다.
공격 코드에서 사용할 명령 찾기
EIP 제어권을 획득한 이후에는 셸 코드가 실행되게 만들어야 한다.
일반적으로 레지스터나 레지스터 값의 상대적인 오프셋이 셸 코드의 주소를 가리킨다.
셸 코드 주소로 실행 제어권을 전달하려면 그것을 수행하는 명령을 실행 바이너리나 실행 바이너리에 로드된 모듈 중 하나에서 찾아내야 한다. immunity 디버거 파이썬 라이브러리를 이용하면 로드된 바이너리에서 원하는 명령을 쉽게 찾을 수 있다.
findinstruction.py 를 작성하자.
-----------------------------------------------------------------------------
#findinstruction.py
from immlib import *
def main(args):
imm = Debugger()
search_code = " ".join(args)
search_bytes = imm.Assemble(search_code)
serach_results = imm.Search(search_bytes)
for hit in serach_results:
#메모리 페이지를 구하고
#실행 가능한 것인지 확인한다.
code_page = imm.getMemoryPagebyAddress(hit)
access = code_page.getAccess(human = True)
if "execute" in access.lower():
imm.log("[*] Found : %s(0x%08x)"%(search_code,hit),address = hit)
return "[*] Finished searching for instructions, checkthe Log window"
-----------------------------------------------------------------------------
우선 찾을 명령을 어셈블함
search() 함수를 사용해 로드된 바이너리의 모든 메모리 영역에서 해당 명령을 찾음
메모리에서 원하는 명령을 찾았다면 그 명령이 위치하는 메모리 페이지를 구함
그것이 실행가능한 메모리 페이지 인지 확인함
실행 가능한 메모리 페이지에서 찾은 명령의 주소는 Log 창에 출력됨
위 스크립트를 사용하려면 찾고자 하는 명령을 실행 파라미터로 전달하면 된다
-----------------------------------------------------------------------------
!findinstruction<찾고자 하는 명령>
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
!findinstruction jmp esp
-----------------------------------------------------------------------------
라고 실행하면
..??
저건 소스의 오류로 밝혀졌다.
이 책은 믿을게 못된다. 책믿지 마세요.
정말 나이스하다.
'파이썬 스터디 과제 > 파이썬 해킹 프로그래밍' 카테고리의 다른 글
5장-3 공격코드개발-3 윈도우의 DEP우회 (0) | 2015.01.26 |
---|---|
5장-3 공격코드개발-2 문자필터링 (0) | 2015.01.26 |
5장-2 Immunity 디버거 101 (0) | 2015.01.25 |
5장-1 Immunity 디버거 (0) | 2015.01.25 |
4장-4 종합 (0) | 2015.01.25 |
댓글