OK
百色门户网努力打造百色最好的综合性门户网
站点首页 | 本地资讯 | 百色商家 | 房产频道 | 百色旅游 | 求职招聘 | 二手信息 | 供求信息 | 企业建站
团购打折 | 装饰建材 | 汽车之家 | 数码生活 | 家居家政 | 亲子教育 | 美食休闲 | 百色网站 | 我的博客
校园生活 | 交友征婚 | 女性频道 | 美容健康 | 上班游戏 | 电脑服务 | 有问必答 | 摄影天地 | 百色论坛
 
电脑DIY 软件使用 黑客知识 电脑经验
  网站优化 电脑论坛
频道首页 WinXp系统 Win2000系统 Win2003系统 vista系统 Linux系统 其他系统 HTML专题 XML专题 CSS专题 JavaScript VBScript ASP专题
PHP专题 Jsp专题 ASP.NET  SQL专题 Fox专题 VB专题 VC专题 Photoshop 3DMAX CorelDraw CAD专题 Flash Java专题 Delphi
当前位置 -> 首页 -> 电脑服务 -> SQL专题
 
MySQL中SQL的单字节注入与宽字节注入

[字体: ]   作者: 不详  来源: 网络
 

一、单字节SQL注入

MYSQL的SQL注入已经由来已久,以下是普遍采用的注入步骤:

1、在GET参数上加一个/*或者#(mysql专有的注释),判断数据库是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*

2、猜解某表的字段数,从order by 1一直更改到页面出错为止,就可以得到该表的字段数

注入URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#

对应的SQL: select * from articles where id=1607 or 1=1 order by 10#….


3、使用该表和用户表进行关联查询,在文章列表里就可以看到用户名和密码了。当也要猜解用户表的表名和用户名、密码的字段名,比如上一步得到的字段数是5:

注入的URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 union select  username,password,1,2,3 from user

对应的SQL: select * from articles where id=1607 or 1=1  union select  username,password,1,2,3 from user


这样就可以在界面上看到用户名和密码了。

解决方法:

过滤数据:这并不是罗唆。在合适的地方使用良好的数据过滤,可以减小多数安全隐患,甚至可以消除其中的一部分。

将数据用括号包含:如果你的数据库允许(MySQL 允许),在 SQL 语句中,不论什么类型的数据都用单引号包含起来。

转义数据:一些合法的数据可能在无意中破坏 SQL 语句本身的格式。使用 mysql_escape_string() 或者所使用数据库提供的转移函数。如果没有提供这样的函数,addslashes() 也是不错的最后选择。

二、宽字节注入

宽字节注入也是在最近的项目中发现的问题,大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ = %df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。比如:

以下为引用的内容:

$conn = mysql_connect(”localhost”,”root”,”2sdfxedd”);
mysql_query(”SET NAMES ‘GBK’”);
mysql_select_db(”test”,$conn);
$user = mysql_escape_string($_GET['user']);
$pass = mysql_escape_string($_GET['pass']);
$sql = “select * from cms_user where username = ‘$user’ and password=’$pass’”;
$result = mysql_query($sql,$conn);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$rows[] = $row;
}
?>


则通过以下注入即可:

http://www.xxx.com/login.php?user=%df’%20or%201=1%20limit%201,1%23&pass=

对应的SQL是:

select * from cms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

解决方法:就是在初始化连接和字符集之后,使用SET character_set_client=binary来设定客户端的字符集是二进制的。如:

以下为引用的内容:

mysql_query(”SET character_set_client=binary”);

打印本页】【关闭窗口返回顶部
 
上一篇: Oracle与SQL Server数据库镜像对比
下一篇: 解决MySQL 5数据库连接超时问题

免责声明:
本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。

 
本站搜索
请输入关键字:
电脑知识网随机推荐
·XML与HTML的结合(上)
·XML卷之实战锦囊(1):动态排序
·XML入门的常见问题(四)
·XML轻松学习手册(1)XML快速入门-
·如何建立网站地图(site map)
·JSP教程:关于JSP中基于Session的在
·JSP教程:关于JSP中基于Session的在
·Vista系统EFS加密功能的妙用(1)
·网站首页被百度降权 六个解决思路
·利用XSL对XML数据进行加密和大小写
·当Borland已成往事:献给曾经的Borl
·XML卷之实战锦囊(2):动态查询
最新电脑知识推荐
·Java序列化的机制和原理
·使用 Java 技术将 Atom 转换为 RDF
·利用JSP的思想来做ASP
·用AspJpeg组件,按宽高比例,真正
·在asp中使用js的encodeURIComponen
·ASP技巧:一个简单的asp数据库操作
·用PHP程序直接调用文本文件内容实
·PHP设置COOKIE保留时间为浏览器进
·用Suhosin加强PHP脚本语言安全性
·PHPUnit袖珍指南之PHPUnit的目的
·PHP中路径问题的解决方案
·IIS下PHP的ISAPI和FastCGI比较
 
| 关于我们 | 广告服务 | 付款方式 | 友情链接 | 意见反馈 | 收藏本站 | 设为首页 |
版权所有: 电脑服务频道·[百色门户网] (2009-2012 版)
www.0776.cn www.百色门户网.cn www.百色门户网.com
联系电话:0776-2660125 2660995 2660996 2853339 400-700-2502 传真:0776-2660126
地址:广西百色市城北一路36号供销大厦办公楼3楼迅联网络  邮编:533000
经营许可证:桂B2-20080001 桂ICP备08100250号 IP为:38.107.179.210
百色门户网旗下网站:广西房产网 一圈旅游网 建站中国