[php审计实战篇]BlueCms v1.6 Union注入

技术 作者:i春秋 2017-12-11 08:50:44
非常基础的代码审计练习,适合有php基础的审计新手练习
本文作者:Aedoo 来源:i春秋社区
0×01 代码跟踪 首先,进入首页代码 :index.php 包含了php文件:/include/common.inc.php 跟踪这个php文件,这些文件都是包含的全局文件。 这个php文件还是先包含了几个全局文件。 最主要的是上图最下方的if判断: if(!get_magic_quotes_gpc()) { $_POST = deep_addslashes($_POST); $_GET = deep_addslashes($_GET); $_COOKIES = deep_addslashes($_COOKIES); $_REQUEST = deep_addslashes($_REQUEST); } 如果未开启magic_quotes_gpc,则对以各种请求的数据使用deep_addslashes()进行过滤,跟踪一下这个函数: 对传入的的$str,无论是数组还是字符串,使用addslashes()进行过滤。 PS:magic_quotes_gpc=On的情况下,如果输入的数据有,单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。 0×02 注入分析 在phpstorm使用CTRL+SHIFT+F全局搜索:$_GET 寻找以GET方式传入的参数: 使用红框圈起来的这条有异常。 ad_id明显是文章或者广告的id,并没有使用intval强制转化为整数型而是使用了trim()函数来去除了前后的空格,有点看不懂。 此时还不能完全确定存在注入,跟踪到这行代码看一下: 这次确定,对传入的ad_id只判断了是否为空,去除了前后的空格,此外也就多了一个全局的addslashes()转义了一下特殊字符,直接进行了SQL查询。 将SQL语句传入了getone()函数,很明显getone是进行SQL查询的函数,跟进。 getone()函数: function getone($sql, $type=MYSQL_ASSOC){ $query = $this->query($sql,$this->linkid); $row = mysql_fetch_array($query, $type); return $row; } query()函数: function query($sql){ if(!$query=@mysql_query($sql, $this->linkid)){ $this->dbshow(&quot;Query error:$sql&quot;); }else{ return $query; } }   第一个if,如果执行发生错误,将错误信息&quot;Query errorsql&quot;传入dbshow()函数。 dbshow()函数: function dbshow($msg){ if($msg){ echo &quot;Error:&quot;.$msg.&quot;<br><br>&quot;; }else{ echo &quot;Errno:&quot;.$this->errno().&quot;<br>Error:&quot;.$this->error(); } exit; } 作用是输出错误信息。 之后回到ad_js.php文件: $ad_content输出查询信息。 输出形式: <!– document.write(&quot;test&quot;); –>   0×03 构造Payload 正常的SQL查询语句为:
select * from blue_ad where ad_id=1
因为直接回显查询内容,所以直接union注入咯。 看一下数据库结构: 我们需要的数据列名为admin_name和pwd,构造PayLoad: 执行后查看源码:   0×04 源码下载及工具说明   回到文下载工具

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接