Pwntools操作基本指令

Pwntools操作基本指令

from pwn import *

'''连接远程题目'''
r = remote('0.0.0.0',809) #usage:remote('host',port)
#exp code
r.interactive() #取得shell后可将commant传到terminal上


'''连接本地程序'''
p = process('./demo') #usage:process('binary',env)
context.terminal = ['tmux','splitw','-h'] #在tmux下可以切出视窗跑gdb
gdb.attach(p) #attach到gdb
#exp code
p.interactive()


'''recv'''
r.recv() #接收一个字节
r.recvline() #接受一行
r.recvlines(num) #接收(num)行
r.recvuntil(str) #一直接收直到碰到(str)


'''send'''
r.sned(payload) #发送payload
r.sendline(payload) #再最后面加上空字符


'''pack&unpack'''
p32(0xdeadbeef) #b'\xef\xbe\xad\xde'
p64(0xdeadbeef) #b'\xef\xbe\xad\xde\x00\x00\x00\x00'

hex(u32('\xef\xbe\xad\xde')) #'0xdeadbeef'
hex(u64('\xef\xbe\xad\xde\x00\x00\x00\x00')) #'0xdeadbeef'


'''payload用flat()连接'''
flat(['A'* 5,0xdeadbeef]) #b'AAAAA\xef\xbe\xad\xde'
#在flat()函数中,不用使用b'A'的形式


'''context(架构)'''
context.arch = 'amd64'
context.os = 'Linux'
context.endian = 'little' #小端序
context.log_level = 'debug'


'''shellcode & asm'''
asm(shellcraft.sh())
shellcraft.i386.mov('eax',0x20)
pwnlib.shellcraft.i386.linux.cat("flag", fd=1) #读取flag并输出,可以使用asm()包裹


'''ELF'''
e = ELF('elf_file') #寻找elf文件中的function
e.got['puts'] #puts在got表的地址
e.plt['puts'] #puts在plt表中的地址


'''libc'''
lib  = ELF('libc.so.6') #寻找libc中的function
lib.symbols['system'] #寻找system的offset
lib.search('/bin/sh') #找/bin/sh的offset


'''ROP'''
rop = ROP('elf_file') #会产生一个空的rop链
rop.chain() #打印出当前的chain
rop.dump() #dump出chain在stack的样子
rop.raad(0,elf.bss(0x80)) #如果存在可以组成read(0,.bss+0x80)的gadgets,就加入rop chain
rop.raw('/bin/sh') #将/bin/sh字符串直接加入rop chain
posted @ 2022-01-20 18:13  MuRKuo  阅读(510)  评论(0编辑  收藏  举报