第一关
1.使用单引号进行尝试,发现2次回显不同,说明是get传参,单引号闭合。
继续下一步,尝试构造错误语句
确定注入点是字符型
2.手工判断表列数
发现’#’被过滤,换’--+’进行尝试
代码正常运行,并且在输到4时报错,证明有3列
尝试进行联合注入,爆出用户名和数据库名
接着尝试爆出该数据库的所有表
爆列
爆出user表的所有数据
第二关
单双引号均报错,但输入数字正常回显,猜测是数字型注入点
判断字段数,输入到4时报错,常见的3字段
后面步骤同第一关,不过就是省略了引号
第三关
单引号尝试成功,猜测是字符型,结果也确实如此
根据报错信息判断传参地方是’)’和引号的组合
Select…from…where id=(‘$id’)
后面不再展示,过程同第一关,只不过是在1’后加’)’
本地搭建Payload
段数
http://localhost/sqllabs/Less-3/?id=1' ) order by 4--+
数据库名
http://localhost/sqllabs/Less-3/?id=-1' ) union select 1,2,database()--+
表名
http://localhost/sqllabs/Less-3/?id=-1' ) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
列名
http://localhost/sqllabs/Less-3/?id=-1' ) union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
所有数据
http://localhost/sqllabs/Less-3/?id=-1' ) union select 1,2,group_concat(username,'_',password,'|') from users --+
第四关
将第三关-1’)改成-1”),其余不变
第五关
经过测试是单引号,字符型,但似乎只回显错误结果
果真如此,正确输出都是同一个页面
尝试使用报错函数,发现回显了结果
尝试逐个击破
不加截断会显示不完全
不断向后慢慢查找,最终取得完整数据即可。
第六关
和第五关步骤相同,将1’换为1”即可
第七关
第七关实战无意义
1.outfile的作用为导出,依靠这个参数,但这个参数为none不让你导出,除非对方项目有需求进行过更改不然此漏洞无法生效,还有一个重要的点,我们压根不知道对方的网站物理路径
2.secure_file_priv=必须为空ini文件,修改ini文件就必须要root权限
修改后一句话木马解决
?id=-1')) union select 1,2,'<?php phpinfo();?>' into outfile "SQLLab路径(放Less7最好)"--+
第八关
测试得到是单引号字符型
报错不显示
尝试使用布尔盲注,编写一个脚本尝试爆破
成功爆出数据库名
后面更改payload即可爆出其余结果
第九关
布尔盲注不管用了
尝试时间盲注,发现成功
同样的,编写一个脚本来进行字段猜解
更换payload即可逐个解出数据
第十关:和第九关解法相同,只不过要将1’改为1”
第十一关
出现输入框,变成了POST传参
使用BP抓包,放到重发器里尝试
往后步骤与第一关相同,只不过是在抓取的数据包中完成
第十二关
闭合方式:括号,其余不变
第十三关
闭合方式:括号闭合里面加了单引号
第十四关
闭合方式:没有括号的双引号
第十五关
变成盲注,尝试使用多个例子,看看页面的变化
图片发生改变,查看网页源码碰碰运气看看能不能找到图片名
找到图片名,修改爆破字段代码的payload来实现爆破数据库数据
后续同样是替换payload来实现其他数据的爆破
第十六关
闭合方式变为双引号加括号,其余与第十五关一致
本文章代码内容参考:
https://blog.csdn.net/m0_68976043/article/details/135965844