๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”’์ •๋ณด๋ณด์•ˆ/์‹œ์Šคํ…œ ๋ณด์•ˆ

์‹œ์Šคํ…œ ๋ณด์•ˆ - pwntools

by Janger 2023. 3. 25.
728x90
๋ฐ˜์‘ํ˜•

 

pwntools๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์˜ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ž‘์„ฑํ•˜๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. CTF์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

 

pip ์„ค์น˜ ๋ช…๋ น์–ด

 

python3 -m pip install --upgrade pwntools

 

 

์‚ฌ์šฉ ์˜ˆ์ œ

 

>>> conn = remote('ftp.ubuntu.com',21)
>>> conn.recvline() # doctest: +ELLIPSIS
b'220 ...'
>>> conn.send(b'USER anonymous\r\n')
>>> conn.recvuntil(b' ', drop=True)
b'331'
>>> conn.recvline()
b'Please specify the password.\r\n'
>>> conn.close()

nc(NetCat), FTP ๊ฐ™์€ ๋ฆฌ๋ชจํŠธ ์—ฐ๊ฒฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

>>> from pwn import *
>>> sh = process('/bin/sh')
>>> sh.sendline(b'sleep 3; echo hello world;')
>>> sh.recvline(timeout=1)
b''
>>> sh.recvline(timeout=5)
b'hello world\n'
>>> sh.close()

 

 

์ฃผ์š” ๊ธฐ๋Šฅ๋“ค

 

proc = process('/bin/sh') # ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ํ›„ ์ƒํ˜ธ์ž‘์šฉ(์ž…์ถœ๋ ฅ) ๊ฐ€๋Šฅ

proc.send("echo hello world!;") # ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ "echo hello world!;" ์ „๋‹ฌ
proc.sendline("echo hello world!") # ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ "echo hello world!\n" ์ „๋‹ฌ

proc.recv(4) # ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ 4๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด ๊ฐ€์ ธ์˜ค๊ธฐ
proc.recvline(timeout=1) # ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ํ•œ ๋ผ์ธ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค. (ํƒ€์ž„์•„์›ƒ ์ง€์ • ๊ฐ€๋Šฅ)

proc.recvuntil('abcd') # ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ "abcd" ๋ฌธ์ž์—ด๊นŒ์ง€ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค. 

proc.interactive() # ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํ”„๋กœ์„ธ์Šค ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
proc.close() # ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

 

ํŒจํ‚น(Packing)

 

p32: 32bit Little endian Packing

 

ex) p32(0x12345678) => \x78\x56\x34\x12

๋น…์—”๋””์•ˆ ๋ฐฉ์‹: p32(0x12345678, endian='big')

 

 

p64: 64bit Little endian Packing

 

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

๋น…์—”๋””์•ˆ ๋ฐฉ์‹: p64(0x12345678, endian='big')

 

 

 

 

์œˆ๋„์šฐ ์ „์šฉ pwntools(winpwn)

 

pwntools๋Š” ํ™˜๊ฒฝ ๋ฌธ์ œ๋กœ ์œˆ๋„์šฐ์—์„œ๋Š” ์‚ฌ์šฉ์ด ์•ˆ๋˜๋Š”๋ฐ ์œˆ๋„์šฐ ์ „์šฉ pwntools(winpwn)๋„ ์žˆ๋‹ค. 

 

https://github.com/Byzero512/winpwn

 

GitHub - Byzero512/winpwn: CTF windows pwntools

CTF windows pwntools. Contribute to Byzero512/winpwn development by creating an account on GitHub.

github.com

 

 

 

pip ์„ค์น˜ ๋ช…๋ น์–ด

 

pip install winpwn

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊นƒํ—ˆ๋ธŒ์—์„œ ์ง์ ‘ ์ฐธ์กฐ

 

 

 

 

์ฐธ๊ณ : 

https://docs.pwntools.com/en/stable/intro.html#tutorials

 

Getting Started — pwntools 4.8.0 documentation

To get your feet wet with pwntools, let’s first go through a few examples. When writing exploits, pwntools generally follows the “kitchen sink” approach. This imports a lot of functionality into the global namespace. You can now assemble, disassemble

docs.pwntools.com

 

 

https://tekiter.tistory.com/4

 

Pwntools ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

Pwntools ์†Œ๊ฐœ Pwntools ๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์งœ๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๊ณต์‹ Github ์ฃผ์†Œ : https://github.com/Gallopsled/pwntools ๊ณต์‹ ๋ฌธ์„œ ์ฃผ์†Œ : http://docs.pwntools.com

tekiter.tistory.com

 

 

https://lclang.tistory.com/90

 

Pwntools ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ• - 2

์ด๋ฒˆ์—๋Š” ์ต์Šคํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ์จ๋ณผ๊ฒ๋‹ˆ๋‹ค ๋จผ์ € ํŒจํ‚น ๊ด€๋ จ ํ•จ์ˆ˜๋“ค ์ž…๋‹ˆ๋‹ค. 1. packing 1-1. p32 32bit little endian ์œผ๋กœ packing ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. p32(int) / return str ex ) p32(0x12345678) => \x78\x56\x34\x12

lclang.tistory.com

 

728x90
๋ฐ˜์‘ํ˜•