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