0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

不同的SQLMap命令

我快闭嘴 来源:菜鸟学安全 作者:菜鸟学安全 2022-09-15 09:19 次阅读

前言

SQLMap是每个渗透测试师的必备工具。这是众多强大的主流工具之一,尤其是在测试OWASP Top 10中的SQL注入漏洞时。从扫描SQL注入漏洞到获取数据库名字、表和列,以及获得系统访问权限,其可被用于多种目的。

在本文中,我们将看到不同的SQLMap命令,在对不同场景下的SQL注入进行利用时可能会比较得心应手。

可以从如下链接下载SQLMap:

Windows

Linux:git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

出于演示目的,我用的是Vulnhub上的这个虚拟机

让我们一起来看看SQLMap这款工具在GET和POST请求上的基本用法。

GET请求

  • sqlmap -u http://site-to-test.com/test.php?id=1-p id

  • sqlmap -u http://site-to-test.com/test.php?id=1*

    • -u:要扫描的URL

    • -p:要扫描的字段

    • *:要扫描的字段(如果不用-p来指定的话)

POST请求

我们可以在SQLMap扫描中指定POST请求体中的数据。

  • sqlmap -u http://site-to-test.com/admin/index.php–data=”user=admin&password=admin”-p user

  • –data=POST数据

a22cd9d2-348e-11ed-ba43-dac502259ad0.png

a277999a-348e-11ed-ba43-dac502259ad0.jpg

另外一种方式是复制Burp请求到一个文件里,然后同样传给SQLMap。

  • sqlmap –r 请求文件的路径

a2cde67e-348e-11ed-ba43-dac502259ad0.png

a2fe3ffe-348e-11ed-ba43-dac502259ad0.jpg

让我们再深入地了解一下SQLMap的其他选项。

扫描POST登录页面

POST请求的登录页面是通过cookie头来进行身份认证的,也就是GET或者POST请求时,包含在HTTP头里的。我们必须给SQLMap提供有效的cookie才能对登录页面的POST请求进行扫描。

  • sqlmap -u http://192.168.202.163/admin/index.php?id=1–cookie=”cookie value

/admin/index.php?id=1 是一个登录页面的POST请求。

a31b936a-348e-11ed-ba43-dac502259ad0.jpg

  • sqlmap -u http://192.168.202.163/admin/index.php?id=1–user-agent=infosec

  • sqlmap -u http://192.168.202.163/admin/index.php?id=1–referer= http://192.168.202.163/admin/index.php

a366887a-348e-11ed-ba43-dac502259ad0.jpg

除此以外,我们还可以通过–random-agent选项来随机指定user-agent头。

a384e34c-348e-11ed-ba43-dac502259ad0.jpg

a3eee6f2-348e-11ed-ba43-dac502259ad0.jpg

爬取

爬取(crawl)是一个非常重要的选项,可以让SQLMap从网站根目录开始爬取,爬取深度可以在命令中指定。

sqlmap -u http://192.168.202.160/–crawl=1

–crawl: 指定爬取深度。(例如:指定值为2表示让SQLMap最多爬取两层目录)

a44002a8-348e-11ed-ba43-dac502259ad0.jpg

如果想排除爬取范围内的任意页面,我们可以通过使用–crawl-exclude参数。当爬取POST型的登录页面时,该选项十分有用。

  • sqlmap -u http://192.168.202.163/ –crawl=3 –cookie=”cookie value” –crawl-exclude=”logout”

该命令可以最多爬取三层目录,并排除任何存在“logout”(注销)关键字的URL。

a47322fa-348e-11ed-ba43-dac502259ad0.jpg

如下图所示,SQLMap爬取了网站,但是排除了注销的URL。

a48d85dc-348e-11ed-ba43-dac502259ad0.jpg

去掉–crawl-exclude选项,再运行一次同样的命令:

a4d5ccac-348e-11ed-ba43-dac502259ad0.jpg

如下图所示,去掉–crawl-exclude选项后,SQLMap爬取了注销URL。该URL由于注销会导致退出当前会话(session),失效的会话会导致无法完成扫描。

a6e83016-348e-11ed-ba43-dac502259ad0.jpg

通过代理使用SQLMap

我们可以指定一个代理来记录传递的请求。如果想通过Burp这样的代理工具来传递请求,打开Burp Suite并配置其监听本机的8080端口。接着使用如下SQLMap命令:

  • sqlmap -u http://192.168.202.162/cat.php?id=1 -p id–proxy=”http://localhost:8080″

a739a45a-348e-11ed-ba43-dac502259ad0.jpg

a7721588-348e-11ed-ba43-dac502259ad0.jpg

现在想象一下这样的场景:当SQL注入关键字,比如OrderBy和Union,被服务器端加到黑名单了。对于这种场景,我们可以通过驼峰拼写法来绕过这类限制。用SQLMap将流量转发到Burp,然后用Burp的“匹配和替换(match and replace)”功能来绕过以上限制。

匹配和替换功能可以在Burp的“Proxy”标签下的“Options”标签下找到。

a7b3ad2c-348e-11ed-ba43-dac502259ad0.jpg

这样就可以检查请求中是否存在“union”这样的关键字。如果存在,那么将其替换为“UnIoN”。

在某些网站只能通过代理服务器访问的场景下,同样可以用下面的命令来指定:

  • sqlmap -u http://192.168.202.162/cat.php?id=1 -p id –proxy=”http://localhost:8080″–proxy-cred=username:password

批(量)处理

批处理(batch)命令适用于非交互的会话。在扫描的时候,SQLMap可能会让我们提供一些输入:比如,在用爬取功能的时候,会问用户是否想扫描指定的URL。当在命令中指定–batch选项时,SQLMap会用一个默认值来处理,而不再问用户。

a7ffaaec-348e-11ed-ba43-dac502259ad0.jpg

a81a9500-348e-11ed-ba43-dac502259ad0.jpg

表单

存在表单字段的页面URL(比如登录页面)可以通过–form选项来解析该页面,并引导用户去测试指定字段。

a837141e-348e-11ed-ba43-dac502259ad0.jpg

现在,可以通过–form和–batch选项一起来高效地测试存在大量表单字段的页面了。因为这样可以解析该页面,并代替用户自动提供输入来测试这些表单字段。

如果想要扫描整个网站,可以同时用crawl和form选项。

a88f7dac-348e-11ed-ba43-dac502259ad0.jpg

线程

线程(threads)选项可以让用户指定SQLMap发送的并发请求数量,这样可以减少整体的测试时间。不过别总是保持一个较高的值,因为可能会影响结果的准确性。

a8d63760-348e-11ed-ba43-dac502259ad0.jpg

危险和级别(Risk andlevel)

危险(risk)可以指定SQLMap使用的payload类型。默认情况下值为1,最高可以设置为3。值为3时,就是最大值,包含了一些严重的SQL查询。

级别(level)指定要执行的检查或payload的数量。值的范围时从1到5。最大值为5,扫描时会用到大量的payload。

当SQLMap使用默认设置无法扫描注入点时,建议增加risk和level的值。(译者注:此举存在风险【risk】)

详细信息

假如我们想看看SQLMap发送的payload,可以用详细信息(verbose)参数,其值范围是从1到6。

a912b546-348e-11ed-ba43-dac502259ad0.png

a93955ca-348e-11ed-ba43-dac502259ad0.jpg

数据库枚举

众所周知,SQLMap主要用于对SQL注入的利用,一起来看看这些通过SQL注入漏洞来枚举数据库的命令。

1. –dbs: 该选项用于枚举数据库。

a96e0e50-348e-11ed-ba43-dac502259ad0.jpg

a9a57142-348e-11ed-ba43-dac502259ad0.jpg

2. 现在得到了数据库名。要获得“photoblog”数据库的表,可以执行如下命令:

a9e315d8-348e-11ed-ba43-dac502259ad0.jpg

aa0b1fb0-348e-11ed-ba43-dac502259ad0.jpg

3. 要获得“users”表中的字段细节,可以执行如下命令:

aa2e280c-348e-11ed-ba43-dac502259ad0.jpg

aa4e0a64-348e-11ed-ba43-dac502259ad0.jpg

4. 要转储(dump)“users”这张表中的数据,可以用–dump命令:

aab7297c-348e-11ed-ba43-dac502259ad0.jpg

ab06501a-348e-11ed-ba43-dac502259ad0.jpg

5. 查看当前数据库用户:

ab8ce7ec-348e-11ed-ba43-dac502259ad0.jpg

abb5881e-348e-11ed-ba43-dac502259ad0.jpg

6. 查看当前数据库名:

abf68b70-348e-11ed-ba43-dac502259ad0.jpg

ac13ccee-348e-11ed-ba43-dac502259ad0.jpg

7. 查看权限(privileges)、角色(roles),并查看当前数据库用户是否是数据库管理员:

ac3b4030-348e-11ed-ba43-dac502259ad0.jpg

ac58dab4-348e-11ed-ba43-dac502259ad0.jpg

用tamper脚本绕过WAF

很多时候,我们会遇到网站被WAF(Web Application Firewall)保护的场景,我们可以用下面的命令来检查目标网站是否被WAF保护:

  • –identify-waf (译者注:新版本中已移除)

识别出WAF后,我们就可以用tamper脚本来进行绕过。tamper脚本可以修改请求来绕过WAF检测。这些脚本可以在/usr/share/sqlmap/tmper/ 目录下找到。

ac79dfd4-348e-11ed-ba43-dac502259ad0.jpg

ac98ad7e-348e-11ed-ba43-dac502259ad0.jpg

执行系统命令

如果当前数据库用户拥有DBA权限,我们就可以使用如下选项来执行操作系统级别的命令:

  • 对于Linux目标服务器:

  • sqlmap -u http://192.168.202.162/cat.php?id=1–os-shell

  • 对于Windows目标服务器:

  • sqlmap -u http://192.168.202.162/cat.php?id=1–os-cmd cmd命令

执行SQL查询

我们还可以用下面的命令在数据库中执行SQL语句:

  • sqlmap -u 192.168.202.164/cat.php?id=2–sql-shell

acc4bfb8-348e-11ed-ba43-dac502259ad0.png

aced9762-348e-11ed-ba43-dac502259ad0.jpg

其他选项

一些其他选项如下:

1. 扫描一些被类似Basic、NTLM和Digest这样的HTTP身份认证保护的页面:

  • sqlmap -u http://example.com/admin.aspx –auth-type Basic –auth-cred “admin:admin”

2. 扫描被基于密钥认证保护的页面:

  • sqlmap -u http://example.com/admin.aspx–auth-file=PEM证书或私钥文件路径

3. 随机化发起攻击的IP地址(在比如WAF检测,或者为了增加被溯源的难度,隐藏攻击来源等场景下很有用)。

使用默认的Tor(洋葱路由)匿名网络:

  • sqlmap -u http://example.com/admin.aspx–tor

指定Tor的端口:

  • sqlmap -u http://example.com/admin.aspx–tor-port=tor代理端口

4. 如果需要在每次HTTP请求之间延时:

  • sqlmap -u http://example.com/admin.aspx–delay=1#延时1秒

5. 如果页面被CSRF token保护,同样可以用下面的命令:

  • sqlmap -u http://example.com/admin.aspx–csrf-token=csrf token

6. 在二阶注入中,SQL注入的payload会被存储在目标网站的数据库中,之后在访问其他页面的时候被执行。我们指定一个SQLMap用来请求的已被注入的URL。然后让SQLMap用如下命令来注入:

  • sqlmap -r /root/Desktop/Burp.txt–second-order“http://target/vulnerbalepage.php”

Burp.txt是包含将要用于测试的文件,其中包含注入点。

  • –second-order “URL” 指定的是每次注入后SQLMap去访问的URL。

总结

在检测和利用SQL注入漏洞方面,SQLMap是一个不错的工具。其支持如此多的选项,开关以及可以创建并使用自定义脚本,让它从众多检测SQL注入漏洞的开源工具中脱颖而出。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43466
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849

原文标题:一些重要的SQLMap命令

文章出处:【微信号:菜鸟学安全,微信公众号:菜鸟学安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    sqlmap的安装与使用

    44sqlmap的安装与使用
    发表于 04-20 10:10

    dos命令查本机ip的命令

    dos查本机ip的命令 可以打开运行.-输入amd-然后输入命令;IPconfig /all 就显示出来了本地IP. 还有一个打开运行.输入amd-然后输入命令;ping localhost.你看有一
    发表于 06-18 16:10 7.8w次阅读

    cad命令快捷键_cad命令大全

    以下文章为CAD命令大全,全文分为二个部份,第一部份是总的CAD命令,第二部份是CAD2007命令大全。 一、cad命令大全 cad命令-材
    发表于 10-18 17:34 2.1w次阅读

    dos是什么意思_dos命令是什么?

    dos命令就是机器语言,通过输入对应的dos命令,让电脑运行相关操作。DOS命令,是DOS操作系统的命令,是一种面向磁盘的操作命令,主要包括
    发表于 01-17 14:45 2w次阅读
    dos是什么意思_dos<b class='flag-5'>命令</b>是什么?

    linux的Shell命令和相关的命令

    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
    的头像 发表于 10-03 13:14 2254次阅读

    linux有哪些常用的命令

     Linux的命令非常之多,分为内部命令和外部命令
    发表于 02-27 08:00 4次下载
    linux有哪些常用的<b class='flag-5'>命令</b>

    用于删除的命令:groupdel和groupadd命令

    二、groupdel 1.命令简介 groupdel(group delete)命令是系统管理员命令,用于删除一个组。 groupdel 命令用于删除指定的工作组,本
    的头像 发表于 01-11 10:44 2394次阅读

    Shell内建命令:trap命令

    1.命令简介 trap 命令是 Shell 内建命令,用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。 2.命令格式 trap  [-lp] [ARG
    的头像 发表于 02-09 18:19 5372次阅读
    Shell内建<b class='flag-5'>命令</b>:trap<b class='flag-5'>命令</b>

    Shell内建命令:exit命令

    1.简介 exit 命令是 Shell 内建命令,用于退出当前 Shell 进程。 2.命令格式 exit  N (1)状态码 N 的范围是 0-255,一般情况下,0 表示正常退出,非零表示异常
    的头像 发表于 02-02 10:45 3406次阅读

    如何使用Linux xargs命令

    `xargs`命令允许您从标准输入或者文件生成命令的参数并命令。通常`xargs`命令通过管道与其他命令组合使用。
    的头像 发表于 12-02 17:42 1852次阅读

    如何使用sudo命令以及选项

    sudo命令允许您以其他用户身份运行命令与程序,默认是root用户。如果您是个命令行用户,那么sudo是您将经常使用的命令之一。
    的头像 发表于 12-09 17:47 4521次阅读

    Sqlmap简介与使用

    白昼安全 一、Sqlmap简介与使用 当我们明白sql注入的原理,渗透过程似乎很简单。但事实上,在实际的渗透当中,漏洞注入并非仅仅只是通过简单的一两次尝试就能够得到测试人员想要的答案。很多
    的头像 发表于 01-14 11:24 613次阅读

    浅析Linux精致的命令

    这只是一小部分常用的Linux命令,Linux有很多命令可以使用。建议通过man命令来查看命令的使用方法,例如:man cd
    的头像 发表于 04-24 16:28 1338次阅读

    CAD使用技巧,15个命令走天下

    透明命令。大部分命令执行的过程是单一的,也就是说在执行的过程中只能执行完,或者中途取消。但也有些命令是在一个命令的执行过程中可以执行另外一个命令
    的头像 发表于 07-12 16:09 368次阅读

    shell命令和linux命令一样吗

    Shell命令和Linux命令并不完全一样。 首先,Shell是一种命令行解释器,它是用来解释和执行用户输入的命令的。Shell既是一种命令
    的头像 发表于 11-08 10:51 1399次阅读