기본개념

[pwntools] Cheatsheet

우와해커 2020. 1. 26. 15:11

pwntools 사용 방법

- 맨 윗부분에 from pwn import * 를 입력해줘야한다.

from pwn import *

 

pwntools 연결하기

- nc : remote(ip, port)형식으로 사용 (ip는 string이고 port는 int형이다)

p = remote("localhost", 8888)

 

- local : process(path)형식으로 사용 (path는 string이다)

p = process("./example")

 

- ssh : ssh(username, ip, port, password)형식으로 사용 (username, ip, password는 string 이고 port는 int형이다 또한 port와 password는 = 를 붙여준다 그리고 port와 password는 기본값으로 22와 guest로 설정된다)

p = ssh("username", "localhost", port=8888, password="example")

 

pwntools 데이터 받기

- recv() : 데이터를 받는다.

p = remote("localhost", 8888)
tmp = p.recv()

 

- recvline() : 1줄을 받아온다

p = remote("localhost", 8888)
tmp = p.recvline()

 

- recvuntil(value) : 괄호안에 있는 부분까지 데이터를 받는다. (아래처럼 쓰면 개행까지 받으므로 한줄을 받아온다)

p = remote("localhost", 8888)
tmp = p.recvuntil("\n")

 

pwntools 데이터 보내기

- send(value) : 괄호안에 있는 값을 보낸다. _ read()함수에 사용

p = remote("localhost", 8888)
p.send(value)

 

- sendline(value) : 데이터 한줄을 보낸다. _ scanf(), gets(), fgets etc 등에 사용

p = remote("localhost", 8888)
p.sendline(value)

packing관련 함수

- p32(value) : 32비트 리틀 엔디안 방식으로 패킹해주는 함수 (p32(value, endian='big')을 하면 빅 엔디안으로 패킹해준다)

- p32(0x12345678) = \x78\x56\x34\x12

- p32(ABCD) = \x68\x67\x66\x65

tmp = p32(0x12345678) # \x78\x56\x34\x12
tmp = p32(ABCD) # \x68\x67\x66\x65

 

- p64(value) : 64비트 리틀 엔디안 방식으로 패킹해주는 함수 (p64(value, endian='big')을 하면 빅 엔디안으로 패킹해준다)

- p64(0x12345678) = \x00\x00\x00\x00\x78\x56\x34\x12

- p64(ABCD) = \x00\x00\x00\x00\x68\x67\x66\x65

tmp = p64(0x12345678) # \x00\x00\x00\x00\x78\x56\x34\x12
tmp = p64(ABCD) # \x00\x00\x00\x00\x68\x67\x66\x65

 

unpacking관련 함수

- u32(str) : 32비트 리틀 엔티안 방식으로 언패킹해주는 함수 (반환값은 int형이다 그리고 str에는 패킹된 string이 들어가야 한다.)

- u32("\x78\x56\x34\x12") = 305419896(0x12345678)

tmp = u32("\x78\x56\x34\x12") # 305419896(0x12345678)

 

- u64(str) : 64비트 리틀 엔티안 방식으로 언패킹해주는 함수 (반환값은 int형이다 그리고 str에는 패킹된 string이 들어가야 한다.)

- u64("\x00\x00\x00\x00\x78\x56\x34\x12") = 305419896(0x12345678)

tmp = u64("\x00\x00\x00\x00\x78\x56\x34\x12") # 305419896(0x12345678)

 

interactive함수

- interactive() : 쉘과 직접적으로 명령을 전송, 수신할 수 있는 함수

p = remote("localhost", 8888)
# ... code ...
p.interactive()

 

ELF 함수

- ELF에 바이너리를 인식시켜 적용되어 있는 보호기법을 보여주고, plt, got같은 ELF정보등을 가져올수 있는 함수.

elf = ELF("./filename")

 

 

- 또한 plt, got, symbols 정보를 알고싶으면 아래처럼 입력하면 된다.

p = remote("localhost", 8888)
elf = ELF("./filename")
plt = elf.plt
got = elf.got
symbols = elf.symbols

'기본개념' 카테고리의 다른 글

바이너리 분석을 위한 도구들  (0) 2020.02.05
GOT와 PLT  (0) 2020.01.28
vim 컬러변경, 셋팅, 자동완성  (0) 2020.01.26
리눅스 프롬프트 이쁘게 바꾸기  (0) 2020.01.26
[SystemV x86_64] repne scabs, calling convention  (0) 2020.01.21