[漏洞分析] simple-log_v1.3.1中存在的SQL注入漏洞
2015-05-28 13:18
656 查看
首先在URL中的s参数中输入一个撇号,页面返回的结果为\'
第二步,在URL中的s参数中输入%252527,结果返回%27
第三次,给URL中的s参数赋值%2527,结果程序报错,证实SQL注入漏洞的存在
源码分析
有两段关键代码:
代码片段一:
代码片段二,即core.php
首先输入撇号,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."%' ";中
导致单引号不平衡,引发错误。
第二步,在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."%' ";中
导致单引号不平衡,引发错误。
相关文章推荐
- WordPress Simple Login Log插件SQL注入和多个HTML注入漏洞
- [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入
- 简单分析什么是SQL注入漏洞
- 什么是简单的分析SQL注入漏洞
- 请注意!Zabbix高危SQL注入漏洞分析
- googInvision Power Board 1.3.1及更低版本SQL注入漏洞le的蜘蛛来了
- WordPress Simple Photo Gallery插件'index.php' SQL注入漏洞
- Discuz7.2版的faq.php SQL注入漏洞分析
- SQL注入漏洞的分析与利用(二)
- 动易网站管理系统vote.asp页面存在SQL注入漏洞
- PJBlog存在SQL注入漏洞大家要快下补丁了
- ThinkPHP 3.1中的SQL注入漏洞分析----论ThinkPHP 3.1中的半吊子的PDO封装
- 2007 10.30动易网站管理系统vote.asp页面存在SQL注入漏洞
- Discuz7.2版的faq.php SQL注入漏洞分析
- Invision Power Board 1.3.1及更低版本SQL注入漏洞
- 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!
- Ucenter Home SQL注入漏洞详细分析(需要GPC=OFF)
- 简单分析什么是SQL注入漏洞
- [漏洞分析] PHPCollab 2.5 SQL注入漏洞
- [分析]-DedeCMS全版本通杀SQL注入漏洞