美文网首页程序员
【网络安全】记一次代码审计

【网络安全】记一次代码审计

作者: 顶峰相见8号 | 来源:发表于2022-12-28 22:52 被阅读0次

    前言

    在挖掘漏洞过程中,可能有很多种方式,比如:纯白盒的代码审计、纯黑盒的渗透测试、对比补丁包寻找漏洞点等方式。这里为大家分享一种思路,灰盒(黑白盒结合)的代码审计。这种方式相较于传统的纯白盒代码审计而言,具有更高的效率。

    通常来讲 source+sink = BUG。我们可以利用黑盒来快速寻找source点(外部传入参数),利用白盒来寻找sink点(风险函数),从而快速定位漏洞点。最近刚好有个以前的挖掘的漏洞被修复了,这里带大家来体验下这种思路的漏洞挖掘。

    黑盒任意文件上传

    首先我们看看该系统后台存在的任意文件上传漏洞,一个比较经典的漏洞

    漏洞位置:系统设置> 系统部署> 资源部署

    功能点截图:

    图片.png

    【一一帮助安全学习,所有资源获取处一一】
    ①网络安全学习路线
    ②20份渗透测试电子书
    ③安全攻防357页笔记
    ④50份安全攻防面试指南
    ⑤安全红队渗透工具包
    ⑥网络安全必备书籍
    ⑦100个漏洞实战案例
    ⑧安全大厂内部视频资源
    ⑨历年CTF夺旗赛题解析

    测试经过:

    点击上传文件,请求数据包如下

    图片.png

    上传后的文件位置在:o2server/servers/webServer/test.bat

    图片.png

    这里的上传点未限制任何后缀,并且上传后的文件也未进行重命名文件名的操作。

    那么我们尝试是否可进行路径遍历,上传该文件到其他目录下

    图片.png

    这里修改数据包入上图所示,进入相应目录下进行查看

    图片.png

    可以看到成功上传。

    这里的路径遍历、未进行文件重命名隐患给了我们很大的操作空间,为后续的RCE提供了基础。

    黑盒-任意文件读取与写入

    任意文件读取

    前言:

    在整个漏洞挖掘过程中,需要注意推断哪些地方可能出现漏洞。就好比我们打游戏时,中单需要推断打野是红开还是蓝开,从而推断打野从上野区来还是下野区来。那么对应到漏洞中就是:与数据库交互的地方可能出现SQL注入、文件操作的地方可能出现任意读取和写入。下面我们来看下这里的任意读取和写入。

    漏洞位置:

    系统设置 > 基础配置 > 平台配置

    功能点截图:

    图片.png

    测试经过:

    看到这个功能点时,我们首先看到它是用来读取、编辑配置文件的。那么我们需要验证下,它是将通过读写数据库还是读写的本地文件。这里有一种方法,可以通过观察数据包进行验证,如果数据包中有文件相关的操作,那么大概率为读写配置文件;如果数据包多为json格式,那么大概率为读写数据库操作。

    我们看下这里的数据包:

    图片.png

    请求包中为fileName字段,那么基本可以确认为读写配置文件操作。

    要达到任意读写,只需要路径遍历即可。构造数据包如下:

    图片.png

    成功读取上级目录下的文件。

    任意文件写入

    漏洞位置:

    系统设置 > 基础配置 > 平台配置

    功能点截图:

    图片.png

    测试经过:

    同样,这里的功能点相应的是保存配置文件,那么通过上面的方法,进行路径遍历,是否可以进行任意文件写入呢?下面我们来看一下。

    点击保存进行抓包,并对文件名称进行更改,尝试进行任意文件写入

    图片.png

    上图为保存配置文件时抓取到的数据包,对数据包构造如下图

    图片.png

    这时发现响应包响应为非法json格式,看来此处的任意文件写入的内容需要符合json格式

    构造数据包如下尝试进行路径遍历写入

    图片.png

    查看文件写入情况

    图片.png

    成功写入

    灰盒-RCE

    前言:

    我们目前挖掘到了两个高危漏洞,任意上传、任意读写,那没有RCE怎么行呢!

    漏洞位置

    日志查看器>SystemLog

    功能点截图:

    图片.png

    测试经过:

    在进行功能点浏览的时候,一个日志查看器的功能引起了我的注意

    图片.png

    在输入help后,发现其存在start、stop等功能点

    这时候我一直在想,它的start、stop所有服务功能点是如何实现的呢

    直接写死在代码里的吗还是存在相应的脚本进行控制?

    这里有一个可控的source点,那么只需要找到相应功能点的sink点,就可以达到RCE

    我根据代码所处的接口位置找到如下代码:

    图片.png

    source点:可从外部输入restart命令

    sink点:getRuntime执行启动脚本

    这段代码大概的逻辑是这样:

    收到restart指令 - > 识别操作系统 -> 判断是否存在相应的启动脚本 -> 若存在则getRuntime执行对应脚本

    既然它这里的逻辑是执行相应的脚本文件,那么我们岂不是可以通过任意文件写入漏洞 或者 上面的任意文件上传漏洞进行覆盖重写该脚本文件,再通过restart指令执行被重写后的脚本,从而任意命令执行。

    下面对每种RCE方式进行实现

    RCE一:覆盖/etc/passwd添加用户

    利用条件:Linux系统

    1、首先,我们利用任意文件读取漏洞,读取/etc/passwd文件内容

    图片.png

    2、添加将原文件内容处理后,在尾部添加一条自定义密码的用户

    v1ct0ry:$1$ljH.AvaV$Q3uVym4pFYs2J4Mk7z9v9.:0:0:root:/root:/bin/bash
    

    这里添加的是,用户密码为v1ct0ry/123456的用户,处理后的文件内容如下图所示

    图片.png

    3、利用任意文件上传漏洞覆盖/etc/passwd文件

    利用任意文件上传漏洞覆盖服务器当中的/etc/passwd文件

    图片.png

    在服务器上验证是否上传成功

    图片.png

    成功写入

    这里由于是直接修改/etc/passwd文件,/etc/shadow文件不会同步加入v1ct0ry2用户,从而不能使用v1ct0ry2用户登录ssh

    需要再次写入/etc/shadow文件,文件内容为:

    v1ct0ry2:$1$ljH.AvaV$Q3uVym4pFYs2J4Mk7z9v9.:19209:0:99999:7:::
    

    4、利用ssh远程登录服务器(前提是ssh映射在公网)

    通过添加的账户密码远程连接服务器

    图片.png 图片.png

    成功连接。

    RCE二:任意文件上传覆盖启动脚本

    利用条件:Windows

    因为该RCE需要重启服务,为了不影响应用本身运行情况,我们需要在原启动脚本后添加一条命令执行语句

    首先通过任意文件读取漏洞读取原启动脚本内容

    图片.png

    准备好一个在尾部添加自定义命令的bat脚本,以start_windows.bat进行文件上传

    图片.png

    在日志控制台输入restart进行命令执行

    图片.png

    总结

    我们在这里再大概梳理一下整个过程,任意文件上传 -> 路径遍历 -> 任意文件读取 -> 任意文件写入 -> RCE 在我们日常进行漏洞挖掘时,大家可以参考这种方式,以source点和sink点结合的思维、黑白盒结合的方式进行漏洞挖掘,可以适当提高漏洞挖掘的效率

    相关文章

      网友评论

        本文标题:【网络安全】记一次代码审计

        本文链接:https://www.haomeiwen.com/subject/qbzoqdtx.html