前言
本文由 本人 首发于 先知安全技术社区: 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 ...
随机推荐
-
sql中批量删除带有外键的所有表
1首先删除所有的外检约束 --删除所有外键约束 DECLARE c1 cursor forselect 'alter table ['+ object_name(parent_obj) + '] dr ...
-
PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)
Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...
-
Hibernate中的一级缓存、二级缓存和懒加载(转)
1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...
-
(实用篇)php精确的统计在线人数的方法
这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...
-
实用工具推荐(Live Writer)(2015年05月26日)
1.写博客的实用工具 推荐软件:Live Writer 使用步骤: 1.安装 Live Essential 2011,下载地址:http://explore.live.com/windows-live ...
-
事件分发&;响应链
iOS的三种事件:触摸事件/运动事件/远程控制事件 typedef enum { UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteCon ...
-
rman全库恢复到不同主机,不同实例名,不同目录下
一.配置目标主机的ip.hostname及与源端主机的连通性 1.配置目标主机IP 使用图形界面配置IP: administration----network---修改IP(指定静态IP) deact ...
-
Eureka服务注册中心
Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...
-
ios 输入框问题
去除ios输入框阴影 input,textarea{-webkit-appearance:none; outline: none; } ios有边框时设置boder-radius:0: 去除默认圆角问 ...
-
GitHub--创建新的分支(转)
如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...