출처

http://blog.jump2root.com/95




윈도우에서 ELF 바이너리를 실행할 수 없어 동적인 분석은 할 수 없고 리눅스에서는 GDB를 이용해도 되지만 cui에서는 다양한 정보를 보기 어렵고 또한 복잡하다. 하지만 IDA에서는 라이브 원격을 통해 이 문제를 어느정도 해결할 수 있다.


<그림1 원격 디버깅을 위한 서버 파일>


먼저 IDA가 설치된 폴더에가면 'dbgsrv' 폴더가 있다. 이곳에는 원격 디버깅을 위한 서버 파일이 제공되는데 파일이름을 보면 알다시피 여러 환경에 사용할 수 있도록 제공된다.



<그림2 원격 서버 파일 실행>


서버는 x64 우분투를 사용며 64bit ELF파일을 디버깅하기 위해 linux_serverx64 파일를 사용하겠다. 이 파일을 서버에 움긴 뒤 실행하면 위와 같은 화면을 볼 수 있다. 기본 포트는 23946이며 포트 설정을 하고 싶다면 -p 옵션을 이용하면 된다. (단, 붙혀서 작성(ex: -p5555))


<그림3 IDA 내 리눅스 원격 디버깅>


이렇게 서버에서 사용할 준비가 되었다면 IDA를 실행한 뒤 Debugger - Run - Remote Linux debugger 를 선택하고 설정창이 뜨면 다음과 같이 입력하면 된다.


<그림4 원격 디버깅 정보>


여기서 주의할 점은 linux_serverx64 를 실행한 디렉토리를 기준으로 해야한다는것이다. 위에서 보이듯(그림2 참고) 작성자는 imgomi 디렉토리 내에서 linux_serverx64를 실행 하였기 때문에 Application과 Directory를 작성할 때 imgomi 디렉토리를 기준으로 작성하여야 한다.

'System Hacking > 정리' 카테고리의 다른 글

리눅스 보호 기법 확인  (0) 2015.11.25
소멸자(.dtors) +4 하는 이유  (0) 2015.11.10
FSB 소멸자 주소가 아닌 ret주소를 이용한 공격  (0) 2015.11.10
/proc/pid/maps  (0) 2015.11.09
; cat 을 쓰는 이유  (0) 2015.11.03

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_level&page=1&sn1=on&divpage=1&sn=on&ss=off&sc=off&keyword=randomkid&select_arrange=headnum&desc=asc&no=2575



질문1. 모든 실행 프로그램안에는 __do_global_dtors()라는 함수가 있습니다.

이 함수는 소멸자로서 dtors섹션+4 번째 있는 메모리주소에 0이 아닌값이 있을 경우 함수로 실행을 시킵니다. 

프로그램 자체에서 소멸자함수를 호출하지 않을 경우 dtros + 4번째 메모리값은 0이 기본으로 되어있습니다.

FSB로 dtors+4번째 있는 값을 쉘코드 주소로 바꿀경우 실행이 되는 이유가 이것때문입니다.


직접 눈으로 보고 싶으실 경우 

아무 실행 파일이나 gdb로 실행한 후

disas __do_global_dtors 라고 쳐보시면 아실겁니다. ^^



'System Hacking > 정리' 카테고리의 다른 글

리눅스 보호 기법 확인  (0) 2015.11.25
IDA 리모트 디버깅 설정  (0) 2015.11.11
FSB 소멸자 주소가 아닌 ret주소를 이용한 공격  (0) 2015.11.10
/proc/pid/maps  (0) 2015.11.09
; cat 을 쓰는 이유  (0) 2015.11.03

+ Recent posts