pwntools用法

pwntools 是一个Python库, 用于编写二进制漏洞利用(exploitation)脚本

功能:

  • 远程连接和本地连接: 支持通过TCP/UDP连接远程服务或与本地进程进行交互。
  • Shellcode和ROP链构造: 提供了便捷的工具来生成和利用shellcode(比如execve的shellcode)以及构造ROP(Return-Oriented Programming)链。
  • 调试支持: 可以与调试器(如gdb)配合使用,进行调试、自动化调试等。
  • 自动化交互: 支持自动化与程序交互,模拟用户输入,处理输入输出流。
  • 格式化输出: 提供了丰富的格式化工具,帮助你以不同的方式展示数据。

语法:

1. 基础连接和交互
连接

from pwn import * #导入pwntools库

p = remote('example.com', 12345) #连接远程服务

p = process('./vulnerable_program') #连接本地程序

发送数据

p.sendline('Hello') #发送一行数据

p.send('Hello') #发送没有换行符的数据

p.send(b'Hello') #发送多个数据

接收数据

data = p.recvline() #接收一行数据

data = p.recv() #接收任意数据

data = p.recv(1024) #接收特定大小的数据

2. 调试
使用GDB调试

p = process('./vulnerable_program')

gdb.attach(p) #启动进程,并自动附加到gdb进行调试

p.interactive() #调试时,继续执行直到退出

p = process('./vulnerable_program')

gdb.attach(p, '''

break main

continue ''') #启动调试进程并设置断点 设置gdb断点并启动

3. 利用ROP链
创建ROP链

elf = ELF('./vulnerable_program') #加载二进制文件

system = elf.symbols['system'] #获取函数地址(比如system函数)

libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') system = libc.symbols['system']

system = libc.symbols['system'] #获取libc基地址

rop = ROP(elf)

rop.call(system, [next(elf.search(b'/bin/sh'))]) # 构造ROP链

print(rop.dump()) # 打印ROP链

4. 格式化输出
格式化为16进制

data = b'Hello'

print(hex(data)) # 打印数据的16进制

构造填充数据(Padding)

padding = b'A' * 64 # 构造填充数据

print(padding) # 格式化成16进制

5. Shellcode与生成
使用asm来生成Shellcode

shellcode = asm(shellcraft.sh())

print(shellcode) #使用asm生成shellcode

执行Shellcode

p = process('./vulnerable_program') #创建一个进程并注入shellcode

p.send(shellcode) #注入shellcode

6. 脚本化交互

pwntools 提供了一个名为 interactive 的方法来帮助你与程序进行交互。

p.sendline('Hello') # 发送数据并启动交互模式

p.interactive() # 启动交互模式,进入交互式命令行

7. 利用context进行设置

context 是用来设置当前进程/连接的环境的。可以设置架构、字节序等。

设置架构和字节序

context.arch = 'amd64'

context.os = 'linux'

context.endian = 'little' # 设置架构和字节序(x86_64,little-endian)

设置输入/输出编码

context.term = 'xterm-256color' # 设置输入输出编码为utf-8

8. 其它常见工具
ELF

ELF 类提供了对二进制文件的操作接口,能够帮助你提取符号、段、重定位等信息。

elf = ELF('./vulnerable_program') # 加载一个ELF文件

print(hex(elf.entry)) # 查看程序的入口地址

func_address = elf.symbols['main']

print(hex(func_address)) #获取函数地址

libc

libc 类帮助你进行 libc 漏洞利用时的操作,包括获取函数地址、计算基址等。

libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') # 加载libc文件

system = libc.symbols['system']

print(hex(system)) # 获取libc中的system函数地址

9. pwn 命令行工具

除了作为一个Python库,pwntools 还提供了一些命令行工具,如 pwn cyclicpwn checksec 等,来帮助你分析二进制文件和漏洞。

$ pwn cyclic 100 # 生成一个包含100个字符的循环序列

$ pwn checksec --fortify-file=./vulnerable_program # 检查程序的安全设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽

1、popup组件placement设置top没有生效? 可以用offset属性将popup往下边偏移一下 来规避 2、组件携带自定义参数的接口是哪个? 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-…

PyTorch快速入门教程【小土堆】之优化器

视频地址优化器(一)_哔哩哔哩_bilibili import torch import torchvision from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR1…

数据库篇:mysql内置函数

前言 sql 是程序开发员绕不开的一项技能,而mysql是当前最流行的数据库,熟知其内置的一些函数,可以使我们平时的开发工作更加顺畅和方便 时间日期函数 字符串函数 数学计算相关函数 条件判断函数 加密和压缩函数 聚合函数 格式或类型转…

C# 中 Webclient和Httpclient

在C#中,WebClient和HttpClient,这两个类都是用于发起HTTP请求的客户端,它们在使用API上传文件或数据时有不同的优缺点和应用场景。在C#中WebClient是一种较早的网络客户端,而HttpClient是后期提供的更现代的、功能更强大的HTTP客户…

权限获得第一步

权限获得第一步 下载打开附件 给了一串加密的密文 一般都是用MD5加密,每一段分别解码一下 第一段不行,试一下第二段 这里发现第二段可以解码出来,这应该就是密码了 flag{3617656}

HTML 轮播图(Carousel)详细讲解

HTML 轮播图(Carousel)详细讲解 轮播图(Carousel)是一种常见的用户界面组件,用于在同一位置展示多个图像或内容,允许用户通过滑动或自动播放的方式查看不同的内容。它通常用于展示产品、图片、广告等。 1…

25秋招面试总结

秋招从八月底开始,陆陆续续面试了不少,现在也是已经尘埃落定,在这里做一些总结一些我个人的面试经历 腾讯 腾讯是我最早面试的一家,一开始捞我面试的是数字人民币,安全方向的岗位,属于腾讯金融科技这块。…

一份关于 Ubuntu 系统下代理配置的故障排查笔记

Ubuntu 网络代理配置与故障排查指南 在使用 Ubuntu 系统时,配置网络代理可以帮助提升网络访问速度或突破网络限制。然而,代理配置过程中可能会遇到各种问题。本文将详细介绍如何在 Ubuntu 下配置网络代理,并提供故障排查的步骤和解决方案。 …

001__VMware软件和ubuntu系统安装(镜像)

[ 基本难度系数 ]:★☆☆☆☆ 一、Vmware软件和Ubuntu系统说明: a、Vmware软件的说明: 官网: 历史版本: 如何下载? b、Ubuntu系统的说明: 4、linux系统的其他版本:红旗(redhat)、dibian、cent…

fiscoBcos中webase平台导出java项目

导出合约为java项目并调用 1. 在webase管理平台上面进行项目的导出 2.将下载好的项目解压并用idea打开,目录结构如下 在resources目录下的abi放的是编译过后的合约方法,bin.ecc放的是以编译过后的智能合约,conf文件夹下面放的是链…

【嵌入式C语言】指针数组结构体

指针与数组 指针与数组指针数组数组指针 多维数组数组名的保存 结构体定义结构体定义结构体变量使用typedef简化结构体声明访问结构体成员结构体内存分配字节对齐位域定义位域位域的限制示例 指针与数组 指针数组和数组指针是两个不同的概念,它们涉及到指针和数组的…

Junit4单元测试快速上手

文章目录 POM依赖引入业务层测试代码Web层测试代码生成测试类文件 在工作中我用的最多的单元测试框架是Junit4。通常在写DAO、Service、Web层代码的时候都会进行单元测试&#xff0c;方便后续编码&#xff0c;前端甩锅。 POM依赖引入 <dependency><groupId>org.spr…

ubuntu 20.04 国内源安装docker

先更新软件包&#xff0c;安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…

【优选算法】查找总价格为目标值的两个商品(双指针)

算法_云边有个稻草人的博客-CSDN博客 目录 解法一&#xff1a;暴力算法 解法二&#xff1a;双指针(时间复杂度为O&#xff08;N&#xff09;) 【代码编写】 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;暴力算法 用…

时空信息平台-API安全措施-下篇:登录鉴权【访问受限】您的请求已被该站点的安全策略拦截。

文章目录 引言I 登录鉴权处理逻辑校验顺序用户状态校验密码校验Token鉴权短信验证码/图形验证码登录设备限制II 服务端发生错误的处理业务返回码处理前端处理业务返回码nginx处理http状态码引言 时空信息平台-API安全措施:上篇(通讯协议的安全措施) https://blog.csdn.net/z…

UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL

上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块&#xff0c;这个程序是基于KCP网络了&#xff0c;其中调用了Cmake 编译的一个C的DLL&#xff0c;在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。 但是Binaries…

编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法

在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法&#xff1a; yum install perl-Test-Simple

IO多路复用(select/epoll)

目录 一、概念 二、语法 1.select 1.1 select函数的语法 1.2 文件描述符集合操作 1.3 select函数的优缺点 2.epoll 2.1 epoll语法 2.2 epoll的工作模式 2.3 epoll的优缺点 三、select服务端代码 四、epoll服务端代码 五、客户端代码 一、概念 IO多路复用是一种同…

android stdudio环境: gradle一直安装失败

一、一直显示如下错误 The specified Gradle distribution file:/home/wangqingyuan/.gradle/wrapper/dists/gradle-8.6-bin/gradle-8.6-bin.zip does not exist. 经分析&#xff0c;是因为应用本身设置了gradle版本的地址为本地&#xff1a; 应用目录&#xff1a;gradle/gra…

解决PS 撤销卡顿

1. 关闭Windows Ink - 打开触控笔设置 - 禁用Windows Ink功能 2. 创建 PSUserConfig.txt&#xff08;注意Win10/11 可能隐藏文件扩展名&#xff09; - 位置&#xff1a;C:\Users\[用户名]\AppData\Roaming\Adobe\Adobe Photoshop CC 2019\Adobe Photoshop CC 2019 Se…