用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
安全
›
网络安全
›
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0] ...
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
张裕
论坛元老
|
2024-11-8 02:21:58
|
显示全部楼层
|
阅读模式
楼主
主题
1487
|
帖子
1487
|
积分
4461
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
题目来源:Jarvis OJ
https://www.jarvisoj.com/challenges
题目名称:Level0
题目介绍:
属于栈溢出中的ret2text 意思是Return to text 当步伐中有可利用的危险函数 控制步伐的返回地址到原本的函数 实现溢出利用
基础过程(看个人习惯):
运行步伐 查看步伐流程
file 查看文件内存类型
checksec 查看文件保护机制
ida 反编译步伐
分析可疑漏洞点 确定攻击思路 编写poc
查看步伐运行流程
编辑
file 查看文件内存类型
不同的系统,内存的构造不同,堆栈相干的寄存器操作主要是EBP和ESP寄存器,比作指针来说,ESP寄存器总是指向堆栈的栈顶,当执行PUSH命令向堆栈压入数据的时间,ESP减4,然后把数据拷贝到ESP指向的位置,执行POP命令的时间,首先把ESP指向的数据拷贝到内存/寄存器中,然后ESP+4,而堆栈在内存中的地址从高向低扩展,因此参数或者局部的变量总是通过EBP加减一定的偏移地址来访问的。
32位 4偏移量
64位 8偏移量
栈溢出漏洞,通常必要确定添补长度,计算要操作的地址和覆盖地址的距离,栈基和栈顶的位置,通过上述的偏移量计算获得,根据现实环境去覆盖特定的变量或者地址内容。
得知是64位文件
查看文件保护机制
NX堆栈禁止执行
PIE位置无关可执行文件
Canary堆栈溢出哨兵
Symbol符号
RELRO(got写保护)全局偏移表动态解析函数 地址随机化
只开启了一个NX,没有开启Stack Canary,这个功能在函数执行前先在函数调用位置插入cookie标记,当函数返回调用的时间验证cookie信息是否合法,不合法就停止步伐运行,但是假如溢出中,也覆盖了cookie,就会绕过。PIE意为地址无关的可执行文件,每次加载步伐的时间都变换text、 data、bss 等段的加载基地址,使得攻击者难以定位相应的基地址执行溢出。
扔到ida看一下 直接进入min函数反汇编 发现会打印helloword后返回了一个函数
编辑
查看这个函数 rbp-80h //该字符串距离ebp的长度为 0x80h
ebp
基址指针寄存器 指向系统栈最上面一个栈帧的底部(堆栈寻址)
主要作用是生存恢复堆栈 以便于传递参数给函数
read函数没有做过滤,会读取此中的内容直到回车。
该文件是64位的 距离ebp的长度为0x80 距离esp那就有0x8b
64位的环境下为8byte
pop ebp;出栈 栈扩大4byte
push ebp;出栈,栈减少4byte
那么相应的栈结构为(图是网上偷的)
发现这里有一个callsystem 内置系统函数system('/bin/sh')执行系统命令
地址0x400684 加上这个地址覆盖为我们想要返回读取的地址
payload = 'a'*0x80 + 'b'*8 + p64(0x400596)
此时的栈结构是
在把这一串字符串发送到步伐内 计算机的内存中每个值都是按照字节存储的 一样平常环境下都是小端存储
什么是小端存储:
在小端存储模式下 数据的最低有用字节会被存储在数据的最低地址处,最高有用字节反之。
既0x0804843B 在内存中的形式是 \x3b\x84\x04\x08
利用pwntools把字节作为字符传递进去,也就是把字符串转换为二进制。
from pwn import *
import pwn
r = pwn.remote('pwn2.jarvisoj.com', 9881)
# buf rbp callsystem
payload = 'a'*0x80 + 'b'*8 + p64(0x400596)
r.sendline(payload)
r.interactive()
复制代码
以上内容纯小白学习过程 如有错误请不吝赐教
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张裕
论坛元老
这个人很懒什么都没写!
楼主热帖
AI绘画Stable Diffusion Lora模子的利 ...
什么时候用C而不消C++?
049-WEB攻防-文件上传&存储安全&OSS对 ...
Linux安装最新版Docker完整教程(建议 ...
这所985超燃,中科院院士10天发四篇Nat ...
Docker 容器 mysql 配置主从
在 Kubernetes 中部署 Alertmanager ...
京准电钟:GPS北斗卫星时钟同步系统行 ...
免费分享:城市修建轮廓矢量数据(附下 ...
前端 | 燃尽图绘制
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表