频道栏目
首页 > 资讯 > 网站安全 > 正文

利用双字节编码突破PHP单引号转义限制进行SQL注入

11-05-23        来源:[db:作者]  
收藏   我要投稿
当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了。一下子截断了字符型注入的路。
 
GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好涵盖了对应的编码0x5C。
 
0xD5 0x5C 对应了汉字“誠”,于是 %d5%5c 经URL解码后为“誠”。
 
于是提交参数 %d5 ,经PHP自动转义后为 %d5%5c%27 (被转义为了,对应%5c%27),再经URL解码后,就变成了 誠 。
 
这样就突破了单引号转义的限制。
 
 
本地测试如下:
 
 
测试脚本index.php如下:
 
 
 
<?php
$conn=0;
$conn = mysql_connect("localhost","root","see2006");
if (!$conn)
{
die("不能打开数据库连接,错误: " . mysql_error());
}
 
// 选择数据库
mysql_select_db("test", $conn);
 
// 设置mysql数据库输出数据的字符集
mysql_query("set names gbk");
 
$sql="select * from news where content like %".$_REQUEST[k]."%";
echo "当前sql语句:".$sql."<br/><br/>";
 
$result=mysql_query($sql,$conn);
 
if(!$result)
echo mysql_error();
 
while($result && $row=mysql_fetch_array($result))
{
echo "$row[title]<br/>";
}
?>
 
 
 
 
搜索关键字为空,显示所有条目
 
 
 
 
单引号被PHP自动转义
 
 
 
 
利用双字节编码绕过PHP转义,SQL语句出错
 
 
 
 
利用#注释之后的SQL语句,语法正确
 
 
 
 
union猜字段数目和可显示字段的位置
 
 
 
 
union查看当前用户
 
 
 
 
union查看当前数据库名
 
 
 
 
union查看test数据库表名
 
 
 
 
union查看user表的name字段值
 
 
 
 
union查看user表的pass字段值
相关TAG标签
上一篇:xp下利用控制面板的cpl文件留后门
下一篇:robots对网站的危害(安全相关)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站