网络安全-sqlmap注意项及高级使用

目录

注意项

ip隐藏

UserAgent

高级使用

POST表单

延迟设置

绕过防火墙

Tamper脚本

官方脚本

结构介绍

优先级别

 依赖

主体

样例


 


注意项

ip隐藏

跑一些python脚本获取免费ip代理,或者购买稳定的ip代理,隐藏自己的ip,防止被日志记录真实ip。

--proxy=http://112.84.54.169:9999

UserAgent

sqlmap发送的http数据包中的UserAgent包含sqlmap字样,一般都会被拦截,使用浏览器的UserAgent一般没问题。

参数:-A="你的UserAgent" 或者--random-agent

高级使用

POST表单

使用--forms参数sqlmap会自动抓包显示参数,不必使用burpsuite抓包,-r或者--data参数

延迟设置

一些网站对于连续出错的请求将关闭连接,使用--delay参数可以延迟,--delay=0.5

绕过防火墙

使用参数--identify-waf进行防火墙探测,--skip-waf跳过防火墙,或者--tamper参数(参考下面)

Tamper脚本

tamper是对sqlmap进行扩展的一系列脚本,主要功能是对本来的payload进行特定的更改以绕过WAF。

官方脚本

apostrophemask.py 用UTF-8全角字符替换撇号(')(eg. '->%EF%BC%87)

apostrophenullencode.py 用非法的双unicode替换撇号(')(eg. '->%00%27)

appendnullbyte.py 在有效载荷的末尾附加(访问)NULL字节字符(%00)

base64encode.py 对给定有效载荷中的所有字符进行Base64编码

between.py 使用'NOT BETWEEN 0 AND#'替换运算符('>'),使用'BETWEEN#AND#'替换等于运算符('=')

bluecoat.py 用有效的随机空白字符替换SQL语句后的空格字符。然后用运算符LIKE替换字符'='

chardoubleencode.py 给定有效负载中的所有字符进行双重URL编码(不处理已编码的字符)(例如,SELECT->%2553%2545%254C%2545%2543%2554)

charencode.py 给定的有效载荷的所有字符进行URL编码(不处理已经编码的字符)(例如,SELECT->%53%45%4C%45%43%54)

charunicodeencode.py 给定的有效载荷中的所有字符进行Unicode-URL编码(不处理已经编码的)(例如,SELECT->%u0053%u0045%u004C%u0045%u0043%u0054)

charunicodeescape.py 给定有效负载中的未编码字符进行Unicode转义(未处理已编码的字符)(例如SELECT-> \ u0053 \ u0045 \ u004C \ u0045 \ u0043 \ u0054)

commalesslimit.py 用'LIMIT N OFFSET M'替换(MySQL)实例,例如'LIMIT M,N'

commalessmid.py 用'MID(A FROM B FOR C)'替换(MySQL)实例,例如'MID(A,B,C)'

commentbeforeparentheses.py 在括号前加(内联)注释(例如((-> / ** /()

concat2concatws.py 用'CONCAT_WS(MID(CHAR(0),0,0),A,B)' 替换(MySQL)实例,例如'CONCAT(A,B)' 

equaltolike.py 将所有出现的等于('=')运算符替换为'LIKE'

escapequotes.py 斜杠转义单引号和双引号(例如'-> \')

great.py 替换大于运算符('>' )和'GREATEST'对应

Halfversionedmorekeywords.py 当数据库为MySQL时绕过防火墙,在每个关键字之前添加MySQL版本注释

hex2char.py 替换每个(MySQL)0x等效的CONCAT(CHAR(),...)编码字符串

htmlencode.py HTML编码(使用代码点)所有非字母数字字符(例如'->')

ifnull2casewhenisnull.py 替换'IFNULL( A,B)'与'CASE WHEN ISNULL(A)THEN(B)ELSE(A)END'对应

ifnull2ifisnull.py 用'IF(ISNULL(A),B)替换'IFNULL(A,B)'之类的实例,A)'对应

informationschemacomment.py 在所有出现的(MySQL)“ information_schema”标识符的末尾添加一个内联注释(/ ** /)

least.py 用'LEAST'对应替换大于运算符('>')

lowercase.py 用小写值替换每个关键字字符(例如SELECT->选择)

luanginx.py-LUA-Nginx WAF绕过(例如Cloudflare)

modsecurityversioned.py 包含带有(MySQL)版本注释的完整查询

modsecurityzeroversioned.py 包含带有(MySQL)零版本注释的完整查询

multiplespaces.py 在SQL关键字周围添加多个空格('')

overlongutf8.py 将给定有效载荷中的所有(非字母数字)字符转换为超长UTF8(未处理已编码)(例如'->%C0%A7)

overlongutf8more.py 将给定有效载荷中的所有字符转换为超长UTF8(尚未处理编码)(例如
SELECT->%C1%93%C1%85%C1%8C%C1%85%C1%83%C1%94)

percent.py 在每个字符前面添加一个百分号('%') (例如,SELECT->%S%E%L%E%C%T)

plus2concat.py 替换加号运算符('+')与(MsSQL)函数CONCAT()对应

plus2fnconcat.py 用(MsSQL)ODBC函数{fn CONCAT()}替换加号('+')对应项

randomcase.py 用随机大小写值替换每个关键字字符(例如SELECT-> SEleCt)

randomcomments.py 在SQL关键字内添加随机内联注释(例如SELECT-> S / ** / E / ** / LECT)

sp_password.py 将(MsSQL)函数'sp_password'附加到有效负载的末尾,以便从DBMS日志中自动进行混淆

space2comment.py 用注释'/ ** /' 替换空格字符('')

space2dash.py 用短划线注释('-')替换空格字符(''),后跟一个随机字符串和一个新的行('\ n')

space2hash.py 用井字符('#')替换(MySQL)空格字符('')实例,后跟随机字符串和换行('\ n')

space2morecomment.py 替换(MySQL)带注释'/ ** _ ** /' 的空格字符('')实例

space2morehash.py 用井号('#')后面跟一个随机字符串替换(MySQL)空格字符('')实例和新行('\ n')

space2mssqlblank.py 用有效的替代字符集中的随机空白字符替换空间字符('')的(MsSQL)实例

space2mssqlhash.py 替换空间字符('' )和井号('#'),后接换行('\ n')

space2mysqlblank.py 用有效替代字符集中的随机空白字符替换(MySQL)空格字符('')实例

space2mysqldash.py 用破折号('-')替换空格字符('') )后跟换行('\ n')

space2plus.py 用加号('+')替换空格字符('')

space2randomblank.py 用空格中的随机空白字符替换空格字符('')有效的替代字符集

substring2leftright.py 用LEFT和RIGHT替换PostgreSQL SUBSTRING

symbolicologic.py 用其符号对应物(&&和||)替换AND和OR逻辑运算符

unionalltounion.py 用UNION SELECT对应项替换UNION ALL SELECT的实例

unmagicquotes.py 用多字节组合%BF%27替换引号字符('),并在末尾添加通用注释(以使其起作用)

uppercase.py 用大写值替换每个关键字字符(例如select -> SELECT)

varnish.py 附加HTTP标头'X-originating-IP'以绕过Varnish防火墙

versionedkeywords.py 用(MySQL)版本注释将每个非功能性关键字括起来

versionedmorekeywords.py 将每个关键字包含(MySQL)版本注释

xforwardedfor.py 附加伪造的HTTP标头'X-Forwarded-For'

结构介绍

apostrophemask.py

#!/usr/bin/env python

"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    Replaces apostrophe character (') with its UTF-8 full width counterpart (e.g. ' -> %EF%BC%87)

    References:
        * http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128
        * http://lukasz.pilorz.net/testy/unicode_conversion/
        * http://sla.ckers.org/forum/read.php?13,11562,11850
        * http://lukasz.pilorz.net/testy/full_width_utf/index.phps

    >>> tamper("1 AND '1'='1")
    '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
    """

    return payload.replace('\'', "%EF%BC%87") if payload else payload

优先级别

__priority__ = PRIORITY.LOWEST

定义脚本的优先级,用于有多个tamper脚本的情况。 

class PRIORITY(object):
    LOWEST = -100
    LOWER = -50
    LOW = -10
    NORMAL = 0
    HIGH = 10
    HIGHER = 50
    HIGHEST = 100

 依赖

dependencies()函数

dependencies函数对适用/不适用的环境进行声明,可以为空。

主体

tamper函数

参数

  • payload:原payload
  • **kwargs:其他参数

返回替换后的新payload

样例

<?php
$id = trim($POST($id),'union');
$sql="SELECT * FROM users WHERE id='$id'";
echo $sql;
?>

 trim函数是删除字符串的,可以看看php手册。

在线网站展示

可以看到union被删除。

def tamper(payload, **kwargs):
    return payload.replace('union','uniounionn')

以后有写tamper脚本的话再来更新。

 更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

猜你喜欢

转载自blog.csdn.net/lady_killer9/article/details/107288590