CTF:pwntools库的使用,以实现与服务器的交互

Pwntools

Pwntools是一个用于漏洞利用和二进制分析的 Python 库,广泛应用于安全研究、渗透测试和竞争性编程(如 CTF,Capture The Flag)中。它为用户提供了一套强大的工具和功能,以简化与二进制文件的交互网络通信以及各种常见任务的执行

我们启动靶机后会得到一个靶机地址,把靶机地址的前缀和端口分别输入在remote里面,ip''包裹起来用逗号隔开端口,这样就实现了远程连接。

# 用于连接远程服务器,并把连接到的进程命名为p,后续的函数都围绕这个p进程展开
p = remote("ip",port) 
#比如:p = remote("node5.buuoj.cn",5555)

当然偶尔也有题目需要用ssh来连接靶机的:

# 通过使用ssh来连接靶机
p = ssh(host='192.168.xx.xxx', user='xidp', port=6666, password='88888888')

发送消息

**************************************************
p.send(payload) # 直接发送payload
**************************************************
p.sendline(payload) # 发送payload,但是结尾会有一个\n
**************************************************
p.sendafter("string", payload) # 接收到 string (这里说的string可以替换成任何信息) 之后会发送payload,但是如果没有接收到string,那么就会导致脚本一直卡在这里不动
**************************************************
p.sendlineafer("string", payload) # 接收到 string 之后会发送payload 并且在payload最后添加\n

一般常用的发送就这几种,此时可能会有一个疑问,p.sendp.sendline 就差一个\n有什么区别?

有区别,比如gets()scanf()这类函数它们会以\n作为结束符号,如果我们没有发送\n,它们就会一直卡着等待输入,所以遇到这类输入函数就必须要用p.sendline来添加\n(当然如果我们手动在payload里面添加\n也OK)。遇到read()这类函数则使用p.sendlinep.send都可以.

那如果我们都使用p.sendline不就好了吗?

NO,这并不好,比如我们遇到read()并且希望发送一些字符串比如"flag",如果你用p.send("flag")那么没错你发送的是flag,计算机解析后是\x67\x61\x6C\x66,而如果你用的是p.sendline("flag"),则你发送的是flag\n,计算机解析后是\x0a\x67\x61\x6C\x66,这一点细节上的差距就可能导致我们的脚本无法打通,所以我们需要面对合适的函数使用合适的方法,后续我们将会继续讨论read()、scanf()、fgets()和gets()这类函数在输入的时候具体有什么区别。

接收消息

**************************************************
p.recv(int) 利用recv来接收返回的数据,并且可以控制接受到的字节数
比如:p.recv(7) => 系统输出'hello world' => 我们会接受到'hello w' 
**************************************************
p.recvline('string') 设置一个标识符,接收标识符所在的那一行
比如:p.recvline('O.o')
#系统输出:
Hello World 
This is a test. 
O.o This is the target line. 
Goodbye.
#我们接收:
O.o This is the target line. 
**************************************************
p.recvlines(N) 接收 N 行输出
**************************************************
p.recvuntil('string') 可以指定接收到某一字符串的时候停止 ,还有第二个参数 drop,drop=True(默认为false) 表示丢弃设定的停止符号
比如:p.recvuntil('or') 
#系统输出:
hello world 
#我们接收:
hello wor  
比如:a = io.recvuntil(']', drop=True)
就是一直获取到`]`符号出现就停止,并且不接收`]`符号
**************************************************

传递到终端

# 接受信息并且在终端操作,程序拿到shell,然后就可以转接到linux终端上,让pwn手享受拿flag的乐趣
p.interactive()

构造发送地址类型

**************************************************
p64(int) 
p64(0xfaceb00c) => '\x0c\xb0\xce\xfa\x00\x00\x00\x00\x00'
**************************************************
u64(str) 
u64('\x0c\xb0\xce\xfa\x00\x00\x00\x00') =>0xfaceb00c
**************************************************
p32(int)  
p32(0xfaceb00c) => '\x0c\xb0\xce\xfa'
**************************************************
u32(str) 
u32('\x0c\xb0\xce\xfa') => 0xfaceb00c
**************************************************

p64()这种类型用于将消息变成对应的进制流(因为原本程序里面的数据都是已经编译过的,所以打入的数据也需要是编译过的,所以需要使用p64()这类工具)

u64()这种类型用于泄露地址的时候将泄露的进制流变成对应的原本的样子,方便来辨认查找glibc版本

因为一般计算机都是小端程序,所以这两个函数都自带有将数据变成小端需要的样子,如果遇到大端程序可能需要额外注意

除了p32()这种转化方式还有,flat(),它可以将多个数据结构(如字符串、整数等)连接在一起,并将它们转换为二进制数据。通常用于构建复杂的ROP链的shellcode。flat 函数会将数据扁平化,将它们按照顺序连接在一起,不做任何其他处理。在提供的代码中,flat 被用于构建一个包含多个元素的列表,然后将它们连接起来形成一个二进制数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 compare-form.vue 中添加 compareDate 隐藏字段,并在提交时自动填入当前时间

在 compare-form.vue 中添加 compareDate 隐藏字段,并在提交时自动填入当前时间。 提交表单时存入的对象是FakeRegistration,这个对象里面有compareDate字段,刚好表格查询的对象也是FakeRegistration,所以表格展示的时间就是刚才…

ARM Cortex-M处理器中的MSP和PSP

在ARM Cortex-M系列处理器中,MSP(主堆栈指针)和PSP(进程堆栈指针)是两种不同的堆栈指针,主要用于实现堆栈隔离和提升系统可靠性。以下是它们的核心区别和应用场景: 1. 基本定义 MSP(…

STM32——HAL库开发笔记24(定时器5—超声波测距)(参考来源:b站铁头山羊)

一、原理 本次实验采用HC-SR04超声波传感器,结构及功能如下图 超声波传感器可以用来测距。距离 声速(340m/s) *传播时间 / 2。 这个传感器有四个引脚,其中VCC接电源正极,GND接电源负极 , Trig : 用来启动测量 &…

LCC并行光模块、PLCC并行光模块和POB并行光模块的区别

一、封装结构与材料差异 PLCC(Plastic Leaded Chip Carrier) 封装材料:采用塑料材质,引脚数量较多(20-84个),引脚分布在四周12散热设计:通常通过PCB基板嵌装铜散热片提升散热性能8…

WIFI的SSID超长,隐藏,重复 (2.4G和5G差异)

目录 1、2.4G和5G的频率范围‌ 2、2.4G和5G的差异‌: 3、隐藏ssid显示为\x00 4、 重复的ssid名称 扩展 前言 最近处理wifi设备时发现,小小一个ssid就有超多的问题。 不是中文转义就是超长,现在还发现空字符的,原来时对方路由隐藏了…

FS800DTU联动OneNET平台数据可视化View

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 注册OneNET云平台并建立物模型 3.1 参数获取 3.2 连接OneNET 3.3上报数据 4 数据可视化View 4.1 用户信息获取 4.2 启用数据可视化View 4.3 创建项目 4.4 编辑项目 4.5 新增数据源 4.6 数据过滤器配置 4.6 项…

Linux时间日期类指令

1、data指令 基本语法: date : 显示当前时间date %Y : 显示当前年份date %m : 显示当前月份date %d : 显示当前哪一天date “%Y-%m-%d %H:%M:%S" : 显示年月日时分秒date -s 字符串时间 : 设置系统时…

Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入

作者:来自 Elastic Dai Sugimori 了解稀疏向量嵌入,理解它们的作用/含义,以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能,允许用户使用自然语言进行查询并检索相关信息。为此,目标文档和查询必须首先…

MagicArticulate: 超48K海量数据革新3D动画,自回归Transformer驱动关节智能生成!

论文链接:https://arxiv.org/pdf/2502.12135 Git链接:https://chaoyuesong.github.io/MagicArticulate/ 亮点直击 首个大规模关节化基准数据集,包含超过33,000个具有高质量关节标注的模型; 一种新颖的两阶段框架,有效…

【洛谷入门赛】B4019 皆与生物有缘

题意 两个老师会对你进行打分,我们要做的是把两个老师每题给的分全加起来,然后 2 \div 2 2 再向上取整,输出这个值即可。 思路 首先,我们要输入。 根据我们总结的题意,我们还需要把所有分数加起来。 因为我们尽…

如何选择更安全的无人自助管理私人影院物联网框架?

对于无人自助管理的私人电影院来说,安全是至关重要的,在物联网层面上,更要确保其相关安全措施,才能更好地安全运转。选择更安全的无人自助管理私人影院物联网框架时,可以从以下几个关键方面进行评估: 1. 安…

基本网络安全的实现

基本网络安全的实现 一 :AAA AAA 是Authentication,Authorization and Accounting(认证、授权和计费)的简 称,它提供了一个用来对认证、授权和计费这三种安全功能进行配置的一致性框架, 它是对网络安全…

【大模型】Ubuntu下 fastgpt 的部署和使用

前言 本次安装的版本为 fastgpt:v4.8.8-fix2。 最新版本fastgpt:v4.8.20-fix2 问答时报错,本着跑通先使用起来,就没有死磕下去,后面bug解了再进行记录。   github连接:https://github.com/labring/FastGPT fastgpt 安装说明&…

python--泰坦尼克号人员存活模型训练+预测

1.先到Kaggle平台下载关于泰坦尼克号的数据。 泰坦尼克号数据集:这是Kaggle上的经典数据集,用于预测乘客是否幸存。 地址:Titanic - Machine Learning from Disaster | Kaggle 包含以下文件: train.csv:训练集&#…

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖,基本上绕不开一个架构“Medallion”, 它使得数据管理更为简单有效。ADB 通过…

spring中的注解介绍

本篇文章专门用来介绍spring中的各种注解。 1、RestController 1、含义 2、举例 3、使用场景 RestController 通常用于开发 RESTful API,适合返回 JSON 或 XML 数据的场景 4、总结 RestController 是 Spring 中用于简化 RESTful Web 服务开发的注解,它结…

嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT

目录 1. MATLAB获取 STM32 的原始数据 2. 将数据上传到电脑 3. MATLAB 接收数据并验证 STM32进行傅里叶代码 结果分析 STM32 和 MATLAB 联调是嵌入式开发中常见的工作流程,通常目的是将 STM32 采集的数据或控制信号传输到 MATLAB 中进行实时处理、分析和可视化…

Linux设备驱动开发-SPI驱动开发详解(包含设备树处理详细过程)

基础知识及 SPI 相关结构体介绍 引脚:MISO(master 输入,slave 输出),MOSI(master 输出,slave 输入),片选引脚,SCK(时钟) 控制寄存器&…

嵌入式八股文(五)硬件电路篇

一、名词概念 1. 整流和逆变 (1)整流:整流是将交流电(AC)转变为直流电(DC)。常见的整流电路包括单向整流(二极管)、桥式整流等。 半波整流:只使用交流电的正…

C++初阶——简单实现stack和queue

目录 1、Deque(了解) 1.1 起源 1.2 结构 1.3 优缺点 1.4 应用 2、Stack 3、Queue 4、Priority_Queue 注意:stack,queue,priority_queue是容器适配器(container adaptor) ,封装一个容器,按照某种规则使用&#…