• Sqlmap 学习笔记1:sqlmap参数


    SQLMP参数分析

    1 目录

        1、Target Options

        2、Requests Options 

        3、Injection Options

        4、Detection Options

        5、Techniques Options

        6、Fingerprint options

        7、Enumeration options

        8、Brute force options

        9、User-defined function options

        10、File system options

        11、Takeover options

        12、General options

    2 学习前提

      1、众所周知,sqlmap是一款sql注入工具,其强大功能不再赘述,再次抱着学习的态度,在源码的角度再次学习sqlmap。

        首先需要了解sqlmap工作体系:

    2 SQLMAP参数

      2.1:Target options

      -d:

        

      其连接方式为:MYSQL:'mysql://root:123456@127.0.0.1:3306/database_name'

             ACCESS:'access://database_filepath'

      

      -u:

       设置将要检测sql注入的目标url

      -l:

       从Burp或WebScarab代理日志文件中解析目标,顾名思义,就是将一个HTTP请求以文件的方式引入sqlmap存而检测注入。

        首先获取一个HTTP文件:

        

      然后使用命令:sqlmap -l 路径

      

      -x:

        从远程站点地图(.xml)文件中解析目标。此xml格式为:<loc> url </loc>

        定义从xml文档获取URL的源码位于:libparsesitemap.py  20行

        例如:xml文档内容

        sqlmap使用命令:sqlmap -x localhost/test.xml

        

      -m:

        扫描文本文件中给定的多个目标

         首先给定一个文本文档:

        sqlmap命令:sqlmap -m 路径

        

      -r:

        从文件中加载HTTP请求,相当于对POST请求进行sql注入检测。

        首先获取一个POST包:

        

        然后使用命令:sqlmap -r 路径

        

      -g:

        对谷歌的搜索结果进行SQL注入测试,非常强大的功能。

        例如:sqlmap -g "inurl:".php?id=1""

      -c:

        从配置文件中加载选项

      2.2:Requests options

      --method

        强制使用给定的HTTP方法(例如PUT),顾名思义,就是进行sql检测时使用的HTTP方法。

        

      --data

        要通过POST发送的数据字符串,检测POST注入可以使用此种方法,与 -r 不同的是 --data  只检测其后面的参数是否可以sql注入

        

      --param-del

        用于分割参数值的字符,倘若有多个参数是,分隔符可以为; , 。等,并不一定必须为&

        

      --cookie

        使用cookie。当sqlmap只有在level大于等于2的时候才会检测cookie是否存在注入。所以,当默认情况下,设置此参数并不会检测cookie是否存在注入漏洞。

        

         所以可以构造命令: sqlmap -u "http://localhost/sqli-labs/Less-20/" --cookie "uname=admin" --level 2 

         

      --cookie-del: 

        类似--param-del参数。用于分割cookie参数,适用于cookie多参数场景

        

      --drop-set-cookie

        从响应中忽略掉 set-cookie 头,这种场景一般是无cookie的情况下才可注入。(个人揣测,并未测试)

        构造注入命令:sqlmap -u "URL" --drop-set-cookie

      --user-agent

        设置user-agent的值,同cookie注入,需要level大于等于3才可。

        

      --random-agent

        随机使用HTTP用户代理头。

        构造SQL注入命令:sqlmap -u "URL" --random-agent  -v 5 (加-v参数,可以看到发出的请求与返回的请求,类似--level)

      --host

        设置HTTP头中的 host 消息内容。

        

      -H  --header

        额外的HTTP头

        

      --referer

        设置HTTP头中的Referer的值。当level大于等于3时会检测此值是否存在SQL注入漏洞。

        

      --headers

        同--header

      --auth-type

        HTTP身份验证类型。(不知何用)

      --auth-cred

        HTTP授权凭证。猜测用于某些需要登录的场景。

      --auth-file

        某些场景需要证书认证时,猜测使用此参数

      --ignore-proxy

        忽略系统默认的代理设置

      --ignore-redirects

        忽略重定向的尝试

      --proxy

        使用代理去连接URL

      --proxy-cred

        连接代理需要认证时使用此参数

      --proxy-file

        从文件中加载代理列表。此参数非常有用。用于过狗。

      --tor

        使用TOR匿名网络,注意一定要安装TOR服务,否则会出错。

      --tor-port

        设置TOR匿名网络的代理端口而非默认端口

      --delay

        设置每个HTTP请求之间的延迟,默认无延迟

      --timeout

        超时连接前等待的时间,个人认为还蛮有用,此参数可以节省一些时间,默认为30秒。

      --retries

        设置连接超时后重复连接的次数,默认是3次

      --randomize

        设置每次HTTP请求随机改变给定某个参数的值。

        

      --skip-urlencode

        跳过对payload数据的编码。

      --eval

        在进行HTTP请求之前执行一段python代码

        例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

      --threads

        设置最大的并发线程数

      2.3:Injection options

      -p

        需要测试的参数,加入有2个参数,而只需要检测其中一个参数时,可以使用此参数指定。

        

      --skip

        跳过给定参数的测试。与-p参数意义相反。假如有多个参数,但其中有一个参数不用测试时使用该参数。

      --dbms

        选中某个数据库,在已知数据库的情况下,这样做极大的减少测试时间。

        假如已知数据库mysql,则构造:sqlmap -u "URL" --dbms mysql

      --dbms-cred

        设置数据库的登录凭证。用于某些需要登录数据库的场景。

      --os

        指定数据库服务器的操作系统,由于默认情况下,sqlmap会探测服务器操作系统,此参数可以减免此过程。

      --invaild-bignum

        当需要指定一个报错的数值时,可以使用此参数,将数值设置很大,存而报错。

      --prefix

        对将要进行测试额payload添加前缀

        

      --suffix

        对payload添加指定后缀

      --tamper

        使用指定脚本来修改注入的数据,通常用于绕过WAF

      2.4:Detection options

      --level

        检测等级。默认为1.    level 1:只检测GET.  POST数据

                  level 2:检测cookie数据

                  level 3:检测user-agent,referer的数据

        建议检测等级为3

      --risk

        风险等级,    risk 1:测试大部分的语句

                 risk 2:会增加基于事件的测试语句

                 risk 3:会增加OR的语句测试

        注意,如果风险等级为3 ,有可能会造成重置所有用户密码,update语句可能会更新整个表。所以请郑重选择。

      --string

        在检测注入的过程中,当返回页面差距不大时,可能会导致误判,所以出现此参数,当返回页面与正常页面区别不大时,可以手动指定某个字符串,当匹配到此字符串时,表示存在注入。

      --not-string

        与--string相反

      --regexp

        通过正则来判断,当通过正则过滤是,则表示存在注入

      --code

        通过状态码来进行判断。

      --text-only

        仅通过页面内容来比较

      --titles

        通过标题内容来比较

      2.5:Techniques options

      --technique

        sql注入使用哪种类型。默认为全部类型

        类型共五种:1,布尔型注入    2,联合查询注入  3,报错注入  4,多语句查询注入(堆叠查询注入)  5,延时盲注

        这5中类型分别对应5个大写字母:1,B  2,U  3,E  4,S  5,T

        

      --time-sec

        用于在时间盲注的时候,设置延时时间。默认为5秒

        构造命令:

        

      --union-cols

        此参数设置联合查询注入时查询的列数,默认情况下为1-10个字段数,level-5时会增加到50个字段数。此参数在字段大于10但是在默认情况下时出现的问题。

      --union-char

        此参数设置联合查询时的字符,默认情况下为NULL,比如:union select null,null,null,null 修改为 union select 1,1,1,1。

      --second-order

        此参数用于在注入时返回不同页面的时候,判断返回页面的URL地址来确定是否具有注入。

      2.6:Fingerprint options 

       -f  --fingerprint

        使用一个最广泛的DBMS版本指纹

      2.7:Enumeration options

       -a  --all

        检索所有数据,此参数会列出数据库用户,主机名,密码哈希值,是否为管理员,以及所有库,所有表,所有字段和所有的数据,如果一个数据库非常大的话不建议使用,非常消耗时间。

        

      -b  --banner

        此参数会列出注入数据库得版本

        

        

      --current-user

        检索当前数据库的用户

        

        

      --current-db

        检索当前数据库的数据库名

        

        

      --hostname

        检索当前数据库服务器的hostname

        

        

      --is-dba

        检索当前数据库用户是否为管理员

        

        

      --users

        列举出当前数据库的用户

        

        root不算用户

      --password

        列举数据库用户的密码哈希值

        

        

      --privileges

        列举出数据库用户的权限

      --roles

        枚举数据库用户角色(仅适用于数据库为Oracle)

      --dbs

        枚举数据库数据库名

        

        

      --tables

        枚举数据库中的表

        

        

      --columns

        枚举数据库表中的字段

      --schema

        枚举数据库的系统架构

      --count

        获取表中数据的个数

      --dump-all

        枚举所有数据库表条目

      --search

        搜索字段名,表名或者数据库名

        共三中模式:    1:--search  -D:搜索某个数据库

                  2:--search  -C:搜索某个字段名

                  3:--search  -T:搜索某个表名

        

        

      -D

        指定某个数据库,与枚举数据参数共同使用。

        

        

      -T

        指定某个库中的某个表名

        建议同-D参数,以及枚举数据参数共同使用。

        

        

      -C

        指定某个库中表的字段名

        

        

      -X

      -U

        要枚举的数据库用户

      --exclude-sysdbs

        枚举时排除系统表

        例如mysql:会排除掉information_schema这个表。

      --sql-query

        要执行的sql语句,产生sql注入时执行什么sql语句

        

        

      --sql-shell

        产生一个交互式的shell

        

        

      --sql-file

        给定一个文件,执行其中的SQL语句

      2.8:Brute force options

      --common-tables

        暴力破解表名。1、mysql数据库版本小于5.0

               2、使用的是Access数据库

               3、当前用户权限不够

      --common-columns

        暴力破解列名

      2.9:User-defined function options

      --udf-inject

        使用用户自定义函数注入

        注:UDF注入需要堆栈查询sql注入才可

      --shared-lib

        本地共享路径库

      2.10:File system options

      --file-read

        读取一个文件从后端数据库文件系统

      --file-write

        将数据写入数据库服务器文件中

      --file-dest

        要写入数据的数据库服务器文件绝对路径

      2.11:Takeover options

      --os-cmd

        执行系统命令。此参数执行需知网站根目录,为root权限,并且有sys_exec(),sys_eval()函数。于是此参数看似强大,其实鸡肋

        

        

        

      --os-shell

        返回一个交互式的shell,同--os-cmd

      注:暂时就这些,大多使用的参数都有。其余的参数后续再补。

      2.12:General options

      -s:

        从存储的(.sqlite)文件加载会话。

  • 相关阅读:
    链接Caffe,程序报错应用程序无法正常启动(0xc000007b)
    C++ 11的移动语义
    C++ 11的右值引用
    (持续更新)Qt3D 学习资源
    Qt3D 设置窗口背景颜色和图案
    C++ chrono 库中的 steady_clock 和 system_clock
    VS2017+CMake+OpenCV下报错 set OpenCV_FOUND to FALSE
    C++可继承的单例基类模板
    AngularJS的基础知识
    gulp入门详情
  • 原文地址:https://www.cnblogs.com/Spec/p/11039206.html
Copyright © 2020-2023  润新知