PWN学习的一些技巧和知识点

1.计算缓冲区的偏移量

我之前一直都是手工计算缓冲区的大小,但是有时候就是会出错我也找不到原因

选择找到了一个很好用的方法利用gdb的cyclic(但是只能用于计算缓冲区不能是精细地址)

原理:填入一段很长的字符串让程序报错,找到报错的地址,这个地址就是整个缓冲区的大小也包括了ebp/rbp那个位置的大小

cyclic 150

#生成150个随机的字符串

cyclic -l 0x地址

#找到这个地址对应的偏移量

但是写到后面会发现有时候没有报错地址:

这是因为64位的结构的内存地址不能大于0x00007FFFFFFFFFFF/6个字节的长度 否则会报错

这个时候可以用 x/x $rsp 来查看报错的地址,注意了如果报错了字节很长,根据小端序只能取后面的8个字符

也可以使用 x/wx rsp地址

 

2.pwntool.elf模块的使用 

ELF模块的使用可以便捷找到got和plt的地址计算偏移量

from pwn import *

e=ELF('./text')
#只要将文件路径给ELF(path)就可以分析ELF

e.symbols['system']
#找到这个函数的地址,在这里就是找到system函数的地址
e.got['system']
#找到这个函数的got
e.plt['system']
#找到这个函数的plt

offset=e.symbols['system']-e.symbols['printf']
#计算偏移量,这里是计算system函数和printf函数之间的偏移量
binshaddr=next(e.search('/bin/sh\x00'))
#找到包含这个字符串的地址 这里是找到/bin/sh\x00这个字符串的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值