Ubuntu 24.04.2 LTS
基础的Pwn环境 + binwalk + sasquatch + qemu
pwn环境配置推荐YX-hueimie师傅的博客
★pwn 24.04环境搭建保姆级教程★_ubuntu24 pwn-CSDN博客
★pwn 22.04环境搭建保姆级教程★_pwn环境搭建-CSDN博客安装binwalk可以直接使用apt安装,也可以下载binwalk的源码来自己编译sasquatch 是binwalk用于解压非标准SquashFS文件系统的关键依赖(入门不安装这个那么我们之后binwalk分解固件会发现里面 squashfs-root 文件夹是空的)
安装方法如下:如果遇到下面问题,请按照下面文章中的方法解决binwalk缺少sasquatch报错_unsquashfs.c:1835:5: error: this ‘if’ clause does -CSDN博客上面问题解决可能还存在下面问题我们需要修改build.sh文件来防止这个错误安装完成后就可以使用 binwalk -Me <文件地址> 来对文件进行分解了,进入分解后的文件夹可以看到很多 www bin usr 等等文件夹,最重要的是还有一个 squashfs-root文件夹 分解过程中还可能出现软连接有问题,比如我们进入 squashfs-root 文件夹中我们使用 ls -la 指令
这里就发现了一个软连接缺失,指向的是 我们Ubuntu的 /tmp 目录(实际上应该指向路由器的 /tmp 目录,而不是本机的 /tmp 目录),为了安全考虑,binwalk 将这种软链接都置成了 /dev/null这里我们需要恢复成正常的样子,如果放任不管可能导致后续的模拟失败
修改方法为
进入到 /usr/lib/python3/dist-packages/binwalk/modules 目录下(如果是apt下载的话)
修改其中的 extractor.py 文件修改为下图所示,当然先保留原本的文件最好,万一改错了还可以再改回来
具体修改方法参照下面两篇博客
IOT环境搭建与固件分析 | 坠入星野的月
649K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6*7K9h3E0Z5x3U0k6Q4x3X3g2Y4K9i4c8Z5N6h3u0Q4x3X3g2A6L8#2)9J5c8Y4m8G2M7%4c8K6i4K6u0r3k6o6q4X3x3o6R3I4j5e0W2Q4x3X3g2Z5N6r3#2D9i4K6y4r3K9r3W2Y4K9r3I4A6k6$3S2@1i4K6y4p5L8h3W2H3M7H3`.`.修改好后解压就不是 /dev/null 如下图所示
还有一个坑,就是很多时候为了方便我们可能会创建Windows和Ubutnu的共享文件夹,然后将共享文件夹从 /mnt/hgfs/ 目录下使用ln指令链接到Ubuntu桌面或者别的什么地方,这里需要注意,如果这么做了就不要在这个共享文件夹里面使用binwalk,因为这样会导致binwalk无法创建软连接,笔者在这里踩坑花费了很多时间安装qemu虚拟机本次复现的CNVD漏洞报告地址:国家信息安全漏洞共享平台根据官方报告可知DIR-645型号的hedwig.cgi中会存在缓冲区溢出的漏洞
固件包(见附件):DIR815A1_FW103b01.bin将我们的固件包放入到我们配置好环境的Ubuntu虚拟机中
使用指令 binwalk -Me DIR815A1_FW103b01.bin 来分解它
分解之后当前文件夹下面会出现一个 _DIR815A1_FW103b01.bin.extracted 文件,也就是我们分解后的程序,根据官网的报告我们已经知道漏洞点在 hedwig.cgi 中所以我们就需要去找这个文件在哪,我们进入我们分解之后的 _DIR815A1_FW103b01.bin.extracted/squashfs-root 中,然后使用find指令来查找,得知它在 _DIR815A1_FW103b01.bin.extracted/squashfs-root/htdocs/web 目录下
进入该目录后我们发现这个 hedwig.cgi 它其实是一个软连接,我们使用 ls -la 指令来查看就会发现它的本体其实是 /htdocs/cgibin 这个文件
下面我们进入该目录并使用checksec指令来查看该文件的保护机制
需要注意的是它的结构为mips而不是我们打pwn常见的amd所以我们需要给IDA安装对应的插件才能分析
插件以及安装方法可以参考下面文章:ida mips插件安装+攻防世界ereere题解-先知社区
笔者使用的为IDA9.0版本,不需要安装该插件,如果上述插件安装失败的话建议安装IDA9.0版本进入 main函数 中找到 hedwig.cgi
进入hedwigcgi_main函数中,发现其中规定了post请求方式
然后我们继续进入到 cgibin_parse_request函数 中
发现里面利用 getenv函数 获取了了三个环境变量, 但是和我们的漏洞没啥关系,只不过利用漏洞的时候这里需要随便输入一些东西作为它们的参数
这个函数结束后我们回到hedwigcgi_main函数
我们发现hedwigcgi_main函数下面会调用 sess_get_uid函数, 我们进入其中查看
进入到其中也是可以直接看到它获取了我们的环境变量 COOKIE
这里获取到了COOKIE之后赋值给了v3,在后续v3又赋值给了v5,再通过指针的形式传递给v7,在通过对特定符号(比如 = ; 等符号)的判断对 COOKIE 进行分离
再继续往下看 sobj_add_char函数 的功能就和它的函数名字一样,用于添加字符
而下面这一段程序的作用就是将 = 前面的内容给 v2 将 = 后面的内容给 v5
再往下看,这里判断 v2 的内容是不是 uid 判断之后将 v4 的内容放入 string 中,然后再拼接到 a1 里面
所以我们可以得到的结论就是 sess_get_uid函数 的作用就是将 COOKIE 中 uid= 后面的内容提取出来再次回到我们的 hedwigcgi_main函数 我们可以看到下面的 sprintf函数,这个 sprintf函数 就是我们的一个漏洞点
通过阅读代码逻辑 sprintf函数 的第四个参数 string 其实就是 v4 ,而这里的 v4 我们通过上面分析可以得知 v4 其实就是传入的 cookie 中的 uid= 后面的内容,这个部分的内容以及长度其实我们是可以控制的, 而我们的 v27 数组的大小为 1024 所以这里可能存在栈溢出
而继续往下阅读代码,在 hedwigcgi_main函数 的 133行同样还有一个 sprintf函数, 同样也是往 v27 这个数组中输入
输入的内容 v20 的内容也是 v4,而 v4 从第一个 sprintf函数 到这第二个 sprintf函数 没有发生改变,所以同样 v4 也是 cookie 中的 uid= 后面的内容,所以利用漏洞的时候
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289036.htm
[原创]DIR-815 栈溢出漏洞(CNVD-2013-11625)复现
279 浏览
2 回复
写的很好,另外,为啥极客写的精华帖子,标题右下角没有带钻石的精?
qiluword
写的很好,另外,为啥极客写的精华帖子,标题右下角没有带钻石的精?
答复一下。
精华是都带有钻石的,但这篇是关注,不是精华。
这篇文字质量和内容上是可以的,但是关于这个设备以及这个漏洞有太多类似的分析和复现文章了,没办法不停的给精华,所以就给了关注。
写的很好,另外,为啥极客写的精华帖子,标题右下角没有带钻石的精?
答复一下。
精华是都带有钻石的,但这篇是关注,不是精华。
这篇文字质量和内容上是可以的,但是关于这个设备以及这个漏洞有太多类似的分析和复现文章了,没办法不停的给精华,所以就给了关注。