基本使用
首先需要 from pwn import *
把 pwntools 导入进来,它同时会把一些系统库给导入进来
本地打的话 p=process('./filename')
,远程的话 p=remote('192.168.1.103',10001)
p.close() 关闭
发送 payload
p.send(payload)
发送 payload
p.sendline(payload)
发送 payload,并进行换行(末尾\n)
p.sendafter(some_string, payload)
接收到 some_string 后, 发送你的 payload
p.sendlineafter(some_string, payload)
接收到 some_string 后, 发送你的 payload,加个换行
接收返回内容
p.recvn(N)
接受 N(数字) 字符
p.recvline()
接收一行输出
p.recvlines(N)
接收 N(数字) 行输出
p.recvuntil(some_string)
接收到 some_string 为止
p.interactive()
直接进行交互,相当于回到shell的模式,一般在取得shell之后使用
io.recvuntil("\n", drop = True)``io.recvuntil("\n", drop = True)
会接收数据直到遇到换行符,并返回换行符之前的所有字符。
生成 shellcode
asm(shellcraft.sh())
elf.sym['main']
elf.sym['main']
用于获取ELF文件中名为main
的符号的地址。sym
属性提供了访问ELF文件中符号表的功能。通过elf.sym['main']
,可以获取到main
函数在内存中的地址。
当开启了PIE(Position Independent Executable)和ASLR(Address Space Layout Randomization)之后,ELF文件在内存中的加载地址将不再是固定的。
在这种情况下,elf.sym['main']
返回的地址将不再是程序运行时的实际内存地址。相反,它返回的是一个相对地址,通常是基于ELF文件的基地址(base address)的偏移量。
ELF
首先需要 elf=ELF('./filename')
来产生一个对象
elf.symbols['a_function']
找到 a_function 的地址
elf.got['a_function']
找到 a_function的 got
elf.plt['a_function']
找到 a_function 的 plt
elf.next(e.search("some_characters"))
找到包含 some_characters 可以是字符串,汇编代码或者某个数值的地址
debug信息
context(log_level='debug',arch='arm64',os='linux')
gdb调试
def dbg(io)
gdb.attach(io)
pause()
checksec
PWN-最新checksec的安装和使用_pwn checksec-CSDN博客
标签:function,pwntool,ELF,elf,some,main,payload From: https://www.cnblogs.com/r0xy/p/18498534