pwnable 시스템해킹에 주로 사용
python 2.7에서만 사용 가능 python3에서도 사용 가능하다.
'pip list'로 설치 툴 확인 가능
pip list에서 pwntools 확인
3. 3. 사용법
vi 편집기 이용해서 만들때 vi 파일명.py
상단에 from pwn import*
실행 시 python3 파일명.py (현재 설치된 파이썬은 3버전이므로)
ex) p = remote("localhost", 1234)
ex) p = process("./test")
사용자이름, 주소, 비밀번호는 string
포트번호는 int
pwnable.kr에서 많이 사용
run 함수를 이용하여 쉘을 띄어줌
ex) p = ssh("test", "localhost", port = 1234, password="test")
ex) p2 = p.run("/bin/sh")
5.1.2. 2) 데이터 받기
문자열 형태로 받아온다.
ex)p = remote("localhost", 1234)
p.recv()
int(p.recv(10),16) -> 10바이트를 16진수로 읽어온다.
ex)p = remote("localhost", 1234)
tmp = p.recvline()
ex) p = remote("localhost", 1234)
p.recvuntil('Passcode : ')
passcode = p.recv(2048)
한 쌍으로 많이 쓰인다.
ex) p.recvuntil('+')[:-1] +문자 앞까지 받아온다.
5.1.3.
5.1.4. 3) 데이터 전송
ex) p = remote("localhost", 1234)
p.send(value)
ex) p.sendline(value)
sendafter('hello', value): 'hello' 출력시 value를 보낸다.
sendlineafter('hello', value): 'hello'출력시 value와 \n을 보낸다.
5.1.5. 4) packing 함수
ex) p32(0x12345678) -> \x78\x56\x34\x12
ex) p64(0x12345678) -> \x00\x00\x00\x00\x78\x56\x34\x12
ex) b = 0x701060 라고 변수 지정하고 payload를 짤 때
pay = ... ~
pay +=p64(b)
이렇게 사용 가능하다. p64(b+8) 이렇게 주소를 더해서 사용할 수도 있다.
5.1.6. 5) unpacking 함수
패킹된 string을 인자로 넣는다.
32bit는 4byte사용 -> 4byte 패킹된 string을 넣어야 한다.
u32("\x78\x56\x34\x12", endian = 'big') 가능
반환값은 int
주소를 leak 하여 패킹된 주소를 받아오는 데 사용된다.
leak=p.recv(4)
leack_got = u32(leak)
5.1.7. 6) interactive함수
ex) p.interactive()
코드 맨 마지막에 사용
쉘을 딴 후 그 쉘과 쉽게 상호작용하는 데 사용
과제2는... 좀 더 고민해봐야 할 듯🙊