Revers3r( 임재혁 )
Contents 1. About me 2. Pwntools 에 대해 … 3. Pwntools 설치 4. Pwntools 의 다양한 기능들 5. Pwntools 를 이용한 익스플로잇 몇 가지
About me - 취미로 컴퓨터를 하는 사람이다. … 장난이고 버그헌팅 공부하는 사람입니다. 이름 : revers3r( 임재혁 ) 직업 : 백수 나이 : 올해 20 세
Pwntools ? 익스플로잇의 편의성을 위해서 만들어진 툴 Gallopsled 팀에서 개발
Pwntools? Why? Plt, got.. Find.. Find.. Find….
Pwntools - Install 자세한 내용은 pwntools 의 documentation 페이지에 나와있다. 1. apt-get install python2.7 python2.7-dev python-pip 2. pip install pwntools 여기서, 이것만 설치할 경우에 ROP 클래스를 호출할 때 disasm 에러 발생 !! 3. apt-get install libcapstone-dev
Pwntools - Connection 기본적인 리모트 연결 기능 nc, ssh.. -> remote(), ssh() 리모트 호스트 연결의 편의성을 위해.. 매우 짧게 줄이는 것이 가능..
How to use ssh()? ssh() : pwntools 에서 제공해주는 ssh 연결 함수 ssh(user, host, port, password) 식으로 구성.. run() 함수 사용으로 바이너리 실행 가능..
How to use remote()? remote() : 서비스 등.. Nc 로 접근해야하는 경우. recvuntil() 같은 함수들도 전부 제공해주는편.
ELF() ELF() : pwntools 에서 바이너리를 인식시켜 바이너리 의 정보 등을 가져오기 위한 기능 ELF 에 바이너리를 인식시킴으로 plt, got 같은 elf 정보 등을 획득할 수 있다.
plt,got 뿐만 아니라. 다양한 바이너리의 정보를 구할 수 있다 !
ROP() - 1 ROP (Return Oriented Programming) = 메모리 미티게이션을 우회하는 기술 - 이를 수행하기 위해서 필요한 요소 = Gadget, plt, got …
ROP() - 2 Pwntools 의 가장 메인 기능 중 하나인 ROP 기능. rop.read(0, data, 4) : 이런 형태로 사용 가능 ( 편리 ) ROP 페이로드를 작성할 때의 시간을 최대한 줄일 수 있음. PLT 주소들을 직접 구할 필요가 없음.
ROP() - 3 지금까지는.. plt.. got.. bss.. Gadget…
asm() pwntools 의 대표적인 어셈블, 디스어셈블 기능. asm(), disasm() 이 두가지로 이루어져 있음. capstone 과 비슷한 역할..
asm() 활용 ShellCode 를 작성할 때 유용하다. ※ ShellCode : 쉘을 획득하기 위한 어셈블리 코드
shellcraft ROP 클래스와 함께 pwntools 의 중요한 기능 중 하나 다양한 쉘코드를 지원함. (i386, amd64, arm …)
shellcraft example
Shellcode test 테스트로 i386.linux.sh() 를 호출해보았다.
Example ) 예제 1 : ropasaurusrex (Plaid CTF 2013) 예제 2 : echo1 ( pwnable.kr ) – 제외 예제 3 : nuclear (CodeGate 2014 Junior)
Example : ropasaurusrex 취약점 : 간단한 Overflow 하지만 Gadget 을 일일히 찾기는 귀찮은 부분..
Exploit : ropasaurusrex
Demo : ropasaurusrex
Example : nuclear CodeGate 에서 출제된 ROP 문제. 취약점 – 심플한 Overflow
Exploit : nuclear 구해야하는 요소 : plt, got 등..
Exploit : nuclear 페이로드를 저렇게 구성도 가능하지만.. 이렇게 ROP 클래스를 사용해서도 페이로드조각을 구 성 가능함.
들어주셔서 감사합니다.