You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.4 KiB

import re
import subprocess
import tempfile
import os
import pexpect
import struct
import sys
import mysql.connector
import requests
def do_worker(str_instruction):
try:
# 使用 subprocess 执行 shell 命令
result = subprocess.run(str_instruction, shell=True, text=True,capture_output=True)
return {
"returncode": result.returncode,
"stdout": result.stdout,
"stderr": result.stderr
}
except Exception as e:
return {"error": str(e)}
def do_worker_ftp_pexpect(str_instruction):
# 解析指令
lines = str_instruction.strip().split('\n')
cmd_line = lines[0].split('<<')[0].strip() # 提取 "ftp -n 192.168.204.137"
inputs = [line.strip() for line in lines[1:] if line.strip() != 'EOF']
# 使用 pexpect 执行命令
child = pexpect.spawn(cmd_line)
for input_line in inputs:
child.expect('.*') # 等待任意提示
child.sendline(input_line) # 发送输入
child.expect(pexpect.EOF) # 等待命令结束
output = child.before.decode() # 获取输出
child.close()
return output
def do_worker_ftp_script(str_instruction):
# 创建临时文件保存输出
with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
output_file = tmpfile.name
# 构建并执行 script 命令
script_cmd = f"script -c '{str_instruction}' {output_file}"
result = subprocess.run(script_cmd, shell=True, text=True)
# 读取输出文件内容
with open(output_file, 'r') as f:
output = f.read()
# 删除临时文件
os.remove(output_file)
return output
import socket
def dynamic_fun():
try:
host = "192.168.204.137"
port = 8009
# 尝试建立连接
sock = socket.create_connection((host, port), timeout=15)
# 发送一个基础的AJP协议探测包(仅用于检测响应)
payload = b'\x12\x34\x00\x02' # 示例数据包
sock.sendall(payload)
response = sock.recv(1024)
sock.close()
if response:
return (1, "收到响应,可能存在CVE-2020-1938漏洞风险,请进一步人工验证")
else:
return (0, "无响应,暂未检测到漏洞")
except Exception as e:
return (0, "连接失败或错误: " + str(e))
if __name__ == "__main__":
# 示例使用
bok,res = dynamic_fun()
print(bok,res)