您的位置:首页 > 数据库

[漏洞分析] simple-log_v1.3.1中存在的SQL注入漏洞

2015-05-28 13:18 656 查看
首先在URL中的s参数中输入一个撇号,页面返回的结果为\'



第二步,在URL中的s参数中输入%252527,结果返回%27



第三次,给URL中的s参数赋值%2527,结果程序报错,证实SQL注入漏洞的存在



源码分析

有两段关键代码:

代码片段一:

define('IN_PBBLOG', true);
require(dirname(__FILE__) . '/includes/core.php');

$pg=isset($_GET['pg'])?intval($_GET['pg']):1;
$s=!empty($_GET['s'])?trim($_GET['s']):'';

/* 根据用户所在组等级和所在页面以及操作类型md5哈希得到缓存编号 */
$cache_id = md5($_SESSION['group_id'].'-'.$pg.'-'.$s);

/*------------------------------------------------------ */
//-- 判断是否存在缓存,如果存在则调用缓存,反之读取相应内容
/*------------------------------------------------------ */

if (!$smarty->is_cached('list.html', $cache_id))
{
$s=htmlspecialchars(urldecode($s));
$where=" WHERE b.title like '%".$s."%' ";
$where_page=" WHERE title like '%".$s."%' ";
$page_url='?s='.$s.'&pg=';

$notice=$title='搜索"'.$s.'"的结果';
//调用assign_page_info函数,对页面进行模板初始化,包括页面标题,博客名称,博客描述等
assign_page_info($title);

//调用边栏赋值函数,对页面边栏进行初始化
assign_sidebar_info();


代码片段二,即core.php

// 对传入的变量过滤
if (!get_magic_quotes_gpc())
{
$_GET       = empty($_GET)?'':input_filter($_GET);
$_POST    = empty($_POST)?'':input_filter($_POST);
$_COOKIE  = empty($_COOKIE)?'':input_filter($_COOKIE);
$_FILES  = empty($_FILES)?'':input_filter($_FILES);
}

有一个input_filter函数
//过滤函数
function input_filter($input)
{
return is_array($input) ? array_map('input_filter', $input) : addslashes($input);
}


首先输入撇号,get_magic_quotes_gpc()函数判断php.ini中的magic_quotes_gpc是否已经设置,如果没有设置,则执行代码块中的内容。
代码块中的内容先判断是否为空,若否则把变量交给input_filter函数处理,这个函数先检查全局变量(此处就是$_GET)是否是一个数组,若是,将数组中的所有单元取出来之后,再此经过input_filter过滤,如果不是数组(本例中的情况),则交给addslashes函数处理,这个函数在单引号,双引号,反斜线以及NULL字符前加转义字符。也就有了网页中的结果,即\'

对于第二种情况,%252527,在第一个代码片段中,函数urldecode对输入的参数进行URL解码,%252527变为%2527,显示在页面中为%27

对于第三种情况,%2527,在第一个代码片段中,函数urldecode对输入的参数进行URL解码。%2527变为%27,也就是撇号,随后放到代码

$where=" WHERE b.title like '%".$s."%' ";

$where_page=" WHERE title like '%".$s."%' ";中

导致单引号不平衡,引发错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: