如何通过Kali Linux工具测试自己开发的接口是否存在SQL注入?

P粉602998670

P粉602998670

2026-07-21

701人浏览

原创

sqlmap是最该先试的sql注入检测工具,但需先手动验证参数可测性(如?id=1'是否触发数据库错误)、明确请求结构(get/post/json)、合理设置--level、--risk、--threads及绕过waf参数,再交由其自动化判断注入点。

如何通过kali linux工具测试自己开发的接口是否存在sql注入?

sqlmap 是你最该先试的工具,它能快速验证接口是否真有 SQL 注入漏洞,而不是靠猜或手动拼接一堆单引号。但直接丢一个生产 URL 进去,大概率会漏判、误报,甚至触发 WAF 或日志告警——这不是工具不行,是你没告诉它该怎么“问问题”。

确认目标 URL 和参数是否可测

SQL 注入只发生在「用户输入参与拼接 SQL 语句」的地方,比如 ?id=1?username=adminPOST /login 的 JSON body 里字段。别测首页、静态资源路径或没参数的接口。

  • 先用浏览器或 curl 手动发一次正常请求,确认返回是预期数据(比如查到用户信息),不是 404/500/空响应
  • 在参数值末尾加单引号,比如 ?id=1',看是否返回数据库错误(如 MySQL syntax errorORA-00936)——有错不等于可注入,但没错大概率要换思路(比如盲注)
  • 如果接口走 POST 且是 JSON,sqlmap 默认不解析 body,得加 --data 参数显式传原始 payload,例如:sqlmap -u "http://localhost:8000/api/user" --data='{"id":"1"}' -r request.txt

sqlmap 做最小化探测

别一上来就跑 --dbs--dump,先让工具判断「这个参数到底能不能注入」。默认行为足够敏感,但你要关掉干扰项:

Go语言(Golang)Linux版
Go语言(Golang)Linux版

Go语言(Golang)Linux版适合在 Linux 环境中部署 Go 编译工具链,支持服务端开发、微服务、网络程序、容器化项目和自动化工具开发。

下载
  • --level 2 --risk 1:跳过高风险 payloads(如堆叠查询),避免被拦截或写坏测试库
  • --threads 3:并发别太高,防止把本地开发服务打挂
  • 如果目标用了 Cloudflare、ModSecurity 等 WAF,加 --random-agent--delay 1 降低被封概率
  • 遇到重定向或登录态,用 -c 指定配置文件或 --cookie 传 session,否则 sqlmap 看不到后端真实响应

识别盲注时的关键信号

很多现代接口即使存在注入,也不报错、不回显数据——这就是盲注。这时候 sqlmap 依赖页面内容变化或响应时间来判断,但容易误判:

  • 如果页面返回 JSON,且只有 {"code":0,"data":[]} 这类固定结构,sqlmap 可能无法区分真假响应,需加 --string "code\":0" 指定成功标识
  • 基于时间的检测(--technique T)会发 SLEEP(5) 类请求,务必确认数据库支持该函数(MySQL 支持 SLEEP(),PostgreSQL 要用 pg_sleep()),否则全判为“不可注入”
  • 若开发环境数据库是 SQLite,sqlmap 默认不启用 SQLite 检测,得加 --dbms sqlite 显式指定,否则跳过

绕过简单过滤的常见陷阱

你可能在代码里写了类似 str_replace("'", "", $id),以为就安全了——sqlmap 仍可能绕过:

  • 它会自动尝试双写绕过('''''')、编码绕过(%27)、大小写混合(UnIoN)、注释符切割(UNION/*abc*/SELECT
  • 如果过滤只针对 GET 参数,但接口同时接受 POST 或 Header(如 X-User-ID),sqlmap 可通过 -p "X-User-ID" 指定测试 Header,这点常被忽略
  • 某些 ORM(如 Django 的 filter(id__exact=...))本身防注入,但若你混用了 extra() 或原生 SQL,sqlmap 仍能打穿——别假设“用了框架就没事”
真正难的不是跑出 sqlmap 的“vulnerable”结果,而是理解它为什么说“not vulnerable”:是真没洞,还是你没给对上下文?比如漏了 Cookie、没处理 CSRF Token、响应体结构太单一。这些细节不调通,工具再强也白搭。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

2448

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

448

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

613

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3945

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

1324

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

3540

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

3465

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

640

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

525

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP开发基础之数据库篇(PDO)
PHP开发基础之数据库篇(PDO)

共10课时 | 2.2万人学习

phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Apifox下载与安装手册
Apifox下载与安装手册

共0课时 | 0人学习