web学习笔记之布尔注入喵
[TOC]
布尔注入?什么东西喵?
不会显示查询出来的数据,但是会显示某种状态,这时候的注入就叫做布尔注入(boolean)或者盲注(blind),只能根据真假两种状态来进行注入攻击
边做边看喵~
1_sql_bool_db_name(获取数据库名)
题目:
依旧先检验能否进行SQL注入
输入1' and 1=1#以及1' and 1=2#,如果出现两种状态,说明可以进行SQL注入
获取数据库名
1.首先判断数据库长度
以前直接使用database()就能获取数据库名,现在不行,因为不显示任何语句,只显示状态
所以我们改写成1' and length(database())>数字#,通过出现的两种不同的状态来判断数据库长度
【sql语句是:select * from users where id = '1' and length((database())>数字#】
(这里只是假设的个users;因为id=1一定为true,所以如果数据库长度大于你写的那个数字,就显示true)
这里为18(大于17但是不大于18)
2.爆破库名的每个字符
输入1' and substr(database(),1,1) = '字母'#(substr代表要取某个字符串的一个子串,这里取的是数据库名的子串,后面的两个1分别代表取下标为1的一个字符,因为数据库名下标是从1开始的)
【SQL语句是:select * from users where id = '1' and substr(database(),1,1) = '字母'#】
手动爆破肯定不行,太麻烦了,所以我们上点小手段(❁´◡`❁)
在数据库中有两个函数,一个是ascii另一个是ord,这两个函数可以获取字符对应的ASCII码
(数据库名一般是可见字符,ASCII区间为32到126,因为127为删除符,一般不会出现 )
接下来我们把刚才的SQL语句改为这样➡1' and ascii(substr(database(),1,1))=102#(这里以f的ascii102为栗子)
这样就可以将所有的可见字符变成一个区间,然后要么使用bp的专业版爆破,要么转为python代码来爆破,这里以python为例
1 | import requests |
或者…使用二分法会更快一些捏o( ̄︶ ̄)o(速度更快,而且可以自动判断长度了喵)
1 | import requests |
3.tac flag喵
我们得到了➡flag_4e1a12591_txt,然后bp访问它即可(题目说了数据库名也是文件名)
2_sql_bool_table_name(获取表名)
题目:
1.依旧快速获得数据库名
(这一部分跳过了喵,和上面的步骤一模一样喵)
得到数据库名为d7dbdb653e
2.获取表名
substr和group_concat一起使用
group_concat:group_concat(username)是按分组来连接,没有分组就会把所有的用户名放在同一行,会获得所有的用户名。
把python脚本中的database()换为(select group_concat(table_name) from information_schema.tables where table_schema='数据库名')
1 | import requests |
得到了表名为flag_2ace574ff_txt和users
3.tac flag喵
去bp tac喵~
3_sql_bool(获取列名➡获取数据)
题目:
1.快速获得数据库名
依旧python
得到数据库名为d27124e179
2.获取表名
得到表名为t02bdb8a5f
3.获取列名
依旧database()修改为(select group_concat(column_name)from information_schema.columns where table_schema='数据库名' and table_name='表名')
1 | import requests |
得到列名为cdd6792c45
4.获取数据
database()修改为(select group_concat(列名) from 表名)
1 | import requests |
得到flag喵
4_sql_bool_bypass(带一点点点点点绕过喵)
题目:
1.获取数据库名
1 | import requests |
获得数据库名d45d861dab(懒得截屏了喵喵喵😋)
2.同理获得表名
获得表名为t54dc28610(获取表名以及下面的列名等和上面一样喵,偷个懒喵)
3.获得列名及数据
列名c78fa5c2e7
数据即flag,flag{dda5d071-9941-4aa0-85b7-f9f8e77773ab}
Leave a comment