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
2 months ago
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)