铭感文件目录_waf绕过

绕过特征和技术

一. 观察相应码和内容

响应码

  • 请求正确或错误文件目录
  • 观察响应码是否有差异,是否相同
  • 根据差异或者相同写出相应绕过代码

内容

  • 请求正确或错误文件目录
  • 观察响应内容是否有差异,是否相同
  • 根据差异或者相同写出相应绕过代码

二. 绕过技术

延时绕过

  • 很多WAF都有规则,如果在限制的时间内发包过,就立马封IP
  • 如:10秒钟发100个请求,可能就会被认为存在攻击行为
  • 可以设置延迟,每请求一次延时1-4秒左右

修改usergent绕过

  • 有的WAF,收集有工具特征指纹,可以修改其usergent和refer尝试绕过

设置代理池绕过

  • 设置代理池,挂了又继续,但是安全狗现在也有检测。

基于安全狗特征实验

一.观察安全狗的拦截规则

  • 可以看到安全狗规则就是每10秒超过一百个请求就认为是攻击者,从而冻结5分钟
  • 并且安全狗可以通过识别工具的指纹,比如御剑,就直接屏蔽
    在这里插入图片描述
  • 防护规则-响应内容

在这里插入图片描述

二.绕过思路研究

  • 那我就不让他10秒超过100个请求呗,就延时
  • 再通过响应码和响应文本去观察正确请求和错误请求是否存在区别

开始实验

  • 经过实验响应码全为200ok

在这里插入图片描述

  • 请求正确的目录

在这里插入图片描述

  • 请求错误的目录

在这里插入图片描述

  • 请求正确的文件

在这里插入图片描述

  • 请求错误的文件

在这里插入图片描述

规律发现

  • 所有状态码都为200
  • 请求正确的目录时候返回403
  • 请求正确的文件啥也不返回,并且html中没有了safedog
  • 只要请求错误的目录或文件页面都返回404

代码构思:
该代码不完整,主要是讲解思路
既然状态码都为200,那就来一个if判断

if code==200:

既然正确的目录时候返回403,增加条件判断,在html找到403就打印url

if code==200:
	x=rep.text.find("403</a>错误")
	# x!=-1 ,本身就不等于-1,意思就是找到03</a>错误,则打印
            if x!=-1:
                print("[+]" + urls + "|" + str(code))

正确的文件怎么验证了??

  • html中啥也不返回,并且没有safedog,那我们就再来一个条件,除了含有safedog的页面都返回
        if code==200:
            i=rep.text.find("safedog")
            x=rep.text.find("403</a>错误")
            # x!=-1 ,本身就不等于-1,意思就是找到03</a>错误,则打印
            if x!=-1:
                print("[+]" + urls + "|" + str(code))
            # i==-1,本身就不等于-1,意思就是不等于 safedog时候打印出文件或目录
            if i==-1:
                print("[+]" + urls + "|" + str(code))

到此为止,我们就大概的编写出了绕过WAF扫描目录和文件的代码,接下来看小迪老师的完整的代码,↓↓↓↓↓

小迪老师绕过脚本

  • 里面添加了延时,从而不触发安全狗
  • 并且添加了一个简单的多线程
import sys
import os
import requests
import threading
import queue
import time

q=queue.Queue()
#复制给q发送和接受

def scan():
    #接受的数据不为空则执行
    while not q.empty():
        #接受url+dir的urls
        urls=q.get()
        urls=urls.replace('\n','')
        code = requests.get(urls).status_code
        rep = requests.get(urls)
        time.sleep(5)
       
        if code==200:
            i=rep.text.find("safedog")
            x=rep.text.find("403</a>错误")
            # x!=-1 ,本身就不等于-1,意思就是找到03</a>错误,则打印
            if x!=-1:
                print("[+]" + urls + "|" + str(code))
            # i==-1,本身就不等于-1,意思就是不等于 safedog时候打印出文件或目录
            if i==-1:
                print("[+]" + urls + "|" + str(code))
        else:
            time.sleep(1)
         

def show():
    print('ps:scan.py url.txt dir.txt 10')
    print('\n')
    print('脚本名 网站文件 字典文件 线程数')


if __name__ == '__main__':
    path=os.path.dirname(os.path.realpath(__file__))
    if len(sys.argv)<4:
        show()
        sys.exit()
    url = sys.argv[1]
    file = sys.argv[2]
    num = sys.argv[3]
    for url in open(path+'/'+url):
        for dir in open(path+'/'+file):
            urls=url+dir
            #将urls传递出去
            q.put(urls)
    for i in range(int(num)):
        t=threading.Thread(target=scan)
        t.start()

对比御剑和小迪老师的效果

御剑

  • 啥也扫不到

在这里插入图片描述

小迪老师的工具

  • 可以看到没被WAF拦截

在这里插入图片描述

总结

  1. 通过搭建waf软件观察有哪些规则
  2. 通过响应码和响应文本去观察正确请求和错误请求是否存在区别
  3. 通过差异编写绕过脚本,如果怎么怎么样,就打印出正确的文件和目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值