| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 3x17记录 -> 正文阅读 |
|
[C++知识库]3x17记录 |
老套路 开启了栈不可执行,所以无法传入shellcode考虑rop。 ?并且它还是静态链接。 ?静态链接:静态链接需要在编译链接的时候将需要执行的代码直接拷贝到调用处,这样可以做到程序发布的时候不需要依赖库,相反的程序占用的内存可能相对较大 ?动态链接:动态链接则是当需要调用时,再将库中的代码加载到程序中去,在编译的时候只需要用符号和参数去代替这些代码。这样程序编译出来的内存较小,但是需要将库一起发布出去,缺少库则可能运行不了。 我们运行一下发现是addr: 我们shift F12 查找一下? 可以看到关键字符是存储在buf里面的我们对他进行交叉引用? 输入地址,可以写入18个字节,即任意地址写的漏洞,但是程序去除了符号表,因此像got表之类的地址我们找不到,因此这里引出start函数 start函数 其实main函数(主函数)即不是函数的入口点,也不是函数的起始点 这里借用一张图,可以看到 start - > __libc_start_main -> main start函数调用了__libc_start_main函数,__libc_start_main函数调用了main函数 入口点地址就是start函数的地址?,在64位程序下,前六个参数是通过寄存器传参的,而rdi寄存器中保存的是main函数的地址,r8寄存器中保存的是__libc_csu_fini的地址,rcx寄存器中保存的是__libc_csu_init的地址,接着调用__libc_start_main函数 ? ?_libc_csu_fini中讲两个数据 array[1] 和array[2]分别存入rax和rbp。 ?将地址存入rbp中 分析了__libc_csu_fini函数的执行流程,简单来说就是执行fini_array数组的内容,先执行fini_array[1]接着执行fini_array[0],由于程序存在任意地址写的漏洞,那么就可以修改fini_array数组的内容,让程序执行我们想执行的内容。 思路 ?利用任意地址写的漏洞修改fini_array数组的内容 ?将fini_array[1]的内容修改为main函数的地址,将fini_array[0]的内容修改为__libc_csu_fini的地址,这样可以达到无限制的任意地址写 main ?利用无限制的任意地址写在fini_array+0x10构造ROP链 ?利用栈转移,将栈转移到fini_array+0x10从而触发ROP链 脚本分析 将array_fini[0]修改为__libc_csu_fini的地址 将array_fini[1]修改为main函数的地址 ropchain(fini_array,p64(fini)+p64(main)) 因为程序中没有/bin/sh\x00,因此挑一段可写段写入/bin/sh\x00,这里我采用的是bss段 ropchain(0x4b92e0,'/bin/sh\x00') #0x4b92e0是bss段的地址 这里我选择利用调用59号中断取获得shell,64位程序采用寄存器传参,因此我们需要找到相应寄存器的地址构造ROP链,rax寄存器需要传入调用号,rdi则需要传入/bin/sh\x00的地址,其余参数为0 from pwn import * rop_syscall = 0x471db5 fini_array = 0x4B40F0 esp = 0x4B4100 def write(addr,data): write(fini_array,p64(libc_csu_fini)+p64(main_addr)) write(bin_sh_addr,"/bin/sh\x00") io.interactive() |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:26:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |