SQLmap绕脚本编写

qq2276461217   ·   发表于 2022-03-25 12:02:59   ·   学习杂记

SQLmap绕脚本编写

1.WAF的介绍

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)
核心目的:防御网站被入侵。
具体手段:检测到你的入侵者,然后拦截你当前访问的页面或者是跳转其他页面,或者是直接禁止你的ip访问。
日常生活中,有些网站不一定安装了WAF,但是他可能会有自己的防护策略,过滤你的恶意传参数据,例如传参不能出现union,不能出现and 1=1等等等

2.WAF的检测机制介绍

WAF检测机制核心就是正则表达式,通过开发人员写在WAF里面的正则表达式来匹配内容,匹配到了就触发

例1:传参了and 1=1他就拦截了,-1 =-1没有拦截。这就是匹配

例2:文件内容检测:传统一句话木马,传参任何参数都拦截,同样的传参如果不是一句话木马就不拦

3.常见的绕过手法介绍

常见绕过手法:(1、4重点)

1、用其他函数、写法替代   $a=get_defined_functions();$a['internal'][841]($_GET['a']);  (这个是一句话木马)
2、大小写绕过(有些老WAF大小写就能绕) union => UniOn
3、替换绕过:有些过滤规则强行删除检测到的代码,然后执行  uinon => 会把关键词替换为空 uniounionn => union
4、编码绕过:网站因为功能需要有编解码,然后因为WAF不认识编码后的值然后绕过了
    直接在靶场使用sql语句id=1 and 1=1,会被安全狗拦截

    用base64编码后,页面回响正常

5、注释绕过:WAF有的时候会认为注释后的东西是安全的,然后可以尝试hpp
    http://xxxx.com/id=1/*order by 1&id=1 and sleep(1) -- qwe*/
    后面的id=1将把前面的id=1代替了,
    真正执行的代码是1 and sleep(1) -- qwe
    但WAF会认为/**/是注释
    因此会被认为是安全的

    在id=1后插入/*order by 1&id=1 order by 1 -- qwe*/
    页面回响正常

6、白名单绕过:本地访问可能不拦截、管理员权限 (1、文件白名单 )
    在id=1前插入/1.txt?
    页面回响正常
    安全狗认为不能在文本插入数据

7、垃圾数据填充:写个一大堆数据,然后传参,WAF只检测其中一部分绕过了(一般填充15w)

常见替代:

空格替代+(+是因为URL编码)  或者是/**/      sleep() 用 sleep/**/()代替`sleep`()

4.SQLmap绕WAF脚本介绍

1.sqlmap中的tamper模块给我们自带了很多防过滤的脚本

百度搜索一下就有,例如:https://www.webshell.cc/7162.html

使用方法也很简单:sqlmap.py --tamper 你要用的脚本名字 例如 base64encode.py 就可以直接使用

百度上的脚本大部分写的都是1.2.7.20的分析,但是现在已经到了1.5.8.4,新加的也不多。最多10个

tamper脚本都在sqlmap-master\tamper的目录下

下面的是编码情况(URL编码)
    >>> tamper('1 AND 9227=9227')
    '1%23upgPydUzKpMX%0AAND%23RcDKhIr%0A9227=9227'
    """
使用语言和版本

参考的网址

跑tamper脚本
    用burp抓包

将id的值加密

2.WAF脚本编写

priority是定义脚本的优先级的,dependencies是声明脚本适用使用范围

不过官方的脚本全部都是pass,所以这个我们可以也用pass,就是不做任何操作。  (红框里面的东西是要我们写的,其他的基本可以照抄)

def tamper(payload,**kwargs): 
    这个是定义了一个函数tamper,然后有两个形参,payload和kwargs

payload实际上就是指sqlmap原本要执行的代码。
kwargs可以用来设置HEAD头信息(不过SQLmap脚本中用的少)我可以在数据包里面设置为啥要用这种脚本?

if payload:  (if语句,如果存在payload)
    payload = payload.replace("SLEEP(", "GET_LOCK('%s'," % kb.aliasName)
    replace是替换,将某某某替换为某某,例如这里SLEEP(替换为GET_LOCK('xxx',

    (kb是sqlmap中存储扫描信息的库) %s他是一个虚词,真的内容是kb.aliasName

正则替换:re.sub代表正则替换。 
re.sub(替换前内容,替换后,要替换值)            r”” 是告诉别人这个是正则语句类似//

5.WAF知识框架图



6.安装安全狗

选择系统服务

用户名金币积分时间理由
陈默先生 0.64 0 2022-04-28 23:11:12 爱杰哥,爱柚子~~
陈默先生 0.64 0 2022-04-28 23:11:48 爱杰哥,爱柚子~~

打赏我,让我更有动力~

0 条回复   |  直到 2022-3-25 | 799 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.