목록Linux/Reversing (6)
둘둘리둘둘리둘둘리둘둘리둘둘리둘
@ PEDA(Python Exploit Development Assistance for GDB) - 리눅스 플렛폼에서의 Exploit을 돕기위한 도구이지만 Exploit에 기초가되는 분석에도 상당히 유용한 Python script @ PEDA 설치 버전 확인[root@localhost home]# gdb -q(gdb) python print sys.version2.6.6 (r266:84292, Nov 22 2013, 12:11:10)[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] 파이썬이 2.x대 버전이면 그냥 설치가능한데 최신 리눅스에 gdb는 3.x대로 컴파일돼서 gdb 지우고 다시 2.x대로 컴파일해야한다고함 peda 설치[root@localhost work]# wget htt..
@IDA를 이용한 리눅스 원격 디버깅 IDA는 호스트 PC에서 구동되고 Debuggee는 리눅스 머신에서 작동하게 됩니다.리눅스 뿐만 아니라 여러 OS에서도 가능한것 같지만 리눅스에서밖에 안써봐서 리눅스 기준으로 설명하겠습니다. IDA 6.5기준이지만 버전별로 큰 차이는 없는것 같습니다. 1. 리눅스 머신에 서버 elf파일 구동 IDA설치폴더->dbgsrv 폴더에 OS별로 서버 파일이 있습니다. Debuggee가 구동될 시스템으로 알맞은 서버파일을 옮기고, 테스트용 간단한 elf파일을 생성한 후 서버파일을 실행합니다. 2. Debuggee 파일을 IDA가 구동되는 시스템으로 이동시킨후 IDA 실행 테스트용으로 생성한 a.out 파일을 IDA가 설치돼있는 시스템(필자기준 윈도우)으로 옮긴후 IDA를 이용하..
ROPeMe (ROP Exploit Made Easy) ropshell.py를 이용하여 ROP 구성시 필요한 가젯을 쉽게 찾을수있도록 해줌exploit생성시 유용한 모듈들도 있는것같음 설치 1. 아래 파일 다운로드 후 압축해제(tar -xvf) 2. ropeme-bhus10 디렉토리 내부 distorm-1.7.30.tar.gz 압축해제(tar -xvf) 3. distorm-1.7.30의 setup.py #./setup.py build#./setup.py install 이후 /ropeme-bhus10/ropeme/ropshell.py 사용하면됨 공식 다운로드 링크http://ropshell.com/ropeme/ 사용법 링크http://ropshell.com/howto
#include int func(int a, int b, int c, int d, int e, int f){ return 1;} int main(){ int a=1; int b=2; int c=3,d=4,e=5,f=6,g; func(a,b,c,d,e,f); return 0;} 위 소스 디스어셈블링 결과 ..(gdb) disassemble mainDump of assembler code for function main: 0x00000000004004cb :push rbp 0x00000000004004cc :mov rbp,rsp 0x00000000004004cf :sub rsp,0x20 0x00000000004004d3 :mov DWORD PTR [rbp-0x4],0x1 0x00000000004004da :..
Guest Additions module이 Kali의 커널버전을 지원하지 않기 때문이라 함. virtualbox-guest-x11을 이용해 가상화를 지원하는 형태로 변경 후 설치해야한다고.. root@kali:/media/cdrom# apt-get install virtualbox-guest-x11 설치 후 cdrom에서 VBoxLinuxAdditions.run을 복사해 가져와서 실행하거나 "sh VBoxLinuxAdditions.run" 명령어로 실행하면 됨 그래도 안되면 아래 명령어 후 VBoxLinuxAdditions.run 실행"apt-get update && apt-get install -y linux-headers-$(uname -r)"
#include int main(){ printf("hello\n"); printf("rekcah\n"); return 0;} 위의 소스를 예로 들어 설명함. 먼저 간략하게 설명하자면 main에서 printf 호출시 printf@plt를 호출하고 plt가 got에서 함수의 주소를 찾고 그 함수가 없으면 _dl_runtime_resolve를 통해서 함수를 찾는다.(_dl_runtime_resolve에서 got에 함수 주소를 입력해 이후로는 함수를 쉽게 찾을 수 있도록 한다) 소스 코드를 보면 과 에서 호출하는 0x080482b0 이 printf임을 짐작할 수 있다. main+36부터 따라가 보자. _init을 disassamble하고 에서 호출한 부터 보면 ds:0x08049590으로 jump한다 그럼 d..