protobuf
工具安装
python环境搭建:
本人使用的是python3
和pip3
:pip3 install protobuf pyqt5 pyqtwebengine requests websocket-client
pbtk安装
git clone https://github.com/marin-m/pbtk
进入这个文件夹就可以使用工具了。
- 工具使用
如果我们是从题目给的二进制文件提取结构体:
./pbtk/extractors/from_binary.py ./pwn |
会在当前文件夹下生成一个message.proto
文件。
- 使用工具将
message.proto
编译为python文件,这样就能在我们的exp中导入这个python,然后就能使用message.proto
中的结构体了。
在message.proto
文件路径下使用(注意工具路径换为自己的)
/home/tools/pbtk/utils/external/protoc/protoc --python_out=./ ./message.proto |
执行完后会生成如下python文件:
最后就是在exp中导入这个py文件就行了。
例子
2024ciscn华中 protoverflow
逆向分析
发现程序运行时会打印puts函数地址,泄露libc。然后解析Protobuf结构体并调用真正的主函数。
按照上面的方法结构替换原后,在message.proto
文件中看到:
syntax = "proto2"; |
这里需要注意的是,经过编译后的Protobuf会在头部增加一个Message结构体,下标3开始才是我们的字段
利用思路
name和phoneNumber可选,没什么用。
buffer为字符串,size可自定义,调用memcpy时会存在栈溢出漏洞。
已知libc,可以考虑直接ret2libc。
(而if里判断了下标为2的参数,这里猜测是判断结构体中name和phoneNumber字段是否为空)
exp
这里使用Real返璞归真的脚本。
from pwn import * |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ya0rk の Blog!