python批量化提交100+shell
字数 919 2025-08-07 08:22:31
Python批量化提交Shell脚本教学文档
1. 背景介绍
本教学文档基于奇安信攻防社区中关于Python批量化提交100+ shell脚本的讨论内容,结合相关博客文章(https://www.wlhhlc.top/posts/997/)进行分析和扩展。
2. 核心功能
该脚本主要用于自动化批量提交shell漏洞,主要包含以下功能:
- 批量处理多个shell地址
- 自动验证shell有效性
- 提交漏洞到安全平台
3. 脚本分析
3.1 基础结构
import requests
import re
import time
# 基础配置
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
# 读取shell列表
with open('shell.txt', 'r') as f:
shells = f.readlines()
3.2 核心功能模块
3.2.1 Shell验证模块
def check_shell(shell_url):
try:
response = requests.get(shell_url, headers=headers, timeout=10)
if response.status_code == 200 and 'php' in response.text.lower():
return True
return False
except:
return False
3.2.2 提交模块
def submit_vuln(shell_url):
# 平台特定的提交逻辑
submit_url = "https://example.com/submit"
data = {
'url': shell_url,
'type': 'webshell',
'desc': '自动提交的webshell漏洞'
}
try:
response = requests.post(submit_url, data=data, headers=headers)
if response.status_code == 200:
print(f"[+] 成功提交: {shell_url}")
return True
except Exception as e:
print(f"[-] 提交失败: {shell_url}, 错误: {e}")
return False
3.3 主执行流程
for shell in shells:
shell = shell.strip()
if not shell:
continue
print(f"[*] 正在处理: {shell}")
# 验证shell有效性
if check_shell(shell):
# 提交漏洞
if submit_vuln(shell):
# 记录成功提交
with open('success.txt', 'a') as f:
f.write(shell + '\n')
else:
# 记录提交失败
with open('failed.txt', 'a') as f:
f.write(shell + '\n')
else:
print(f"[-] 无效shell: {shell}")
with open('invalid.txt', 'a') as f:
f.write(shell + '\n')
# 避免请求过于频繁
time.sleep(5)
4. 关键技术与实现细节
4.1 反反爬机制
- User-Agent设置:使用常见的浏览器UA
- 请求间隔:使用time.sleep()避免高频请求
- 异常处理:完善的try-except块防止脚本中断
4.2 验证码绕过方案
针对评论中提到的"极难验证码"问题,可以考虑以下解决方案:
# 验证码处理方案示例
def handle_captcha():
# 方案1: 使用打码平台API
# 方案2: 机器学习识别(需训练模型)
# 方案3: 人工干预模式
pass
4.3 性能优化
- 多线程/协程:使用concurrent.futures或asyncio提高效率
- 代理池:集成代理IP轮换功能
- 结果缓存:避免重复处理相同的shell
5. 扩展功能
5.1 Shell分类功能
def classify_shell(shell_url):
# 根据响应内容分类shell类型
response = requests.get(shell_url, headers=headers, timeout=5)
content = response.text.lower()
if 'eval(' in content:
return 'PHP_EVAL'
elif 'system(' in content:
return 'SYSTEM_SHELL'
elif 'jsp' in content:
return 'JSP_SHELL'
else:
return 'UNKNOWN'
5.2 自动化报告生成
def generate_report():
with open('report.html', 'w') as f:
f.write("<h1>漏洞提交报告</h1>")
# 添加统计信息和详细列表
6. 安全注意事项
- 合法性:确保有授权进行漏洞扫描和提交
- 隐私保护:处理数据时注意敏感信息过滤
- 速率控制:避免对目标系统造成影响
7. 完整脚本示例
import requests
import re
import time
from concurrent.futures import ThreadPoolExecutor
class ShellSubmitter:
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
self.proxies = None # 可配置代理
self.max_workers = 5 # 并发数
def load_shells(self, filename):
with open(filename, 'r') as f:
return [line.strip() for line in f if line.strip()]
def check_shell(self, shell_url):
try:
response = requests.get(
shell_url,
headers=self.headers,
timeout=10,
proxies=self.proxies
)
return response.status_code == 200 and any(
kw in response.text.lower()
for kw in ['php', 'jsp', 'asp', 'aspx']
)
except:
return False
def submit_vuln(self, shell_url):
submit_url = "https://example.com/submit"
data = {
'url': shell_url,
'type': self.classify_shell(shell_url),
'desc': '自动提交的webshell漏洞'
}
try:
response = requests.post(
submit_url,
data=data,
headers=self.headers,
proxies=self.proxies
)
return response.status_code == 200
except Exception as e:
print(f"提交错误: {e}")
return False
def process_shell(self, shell_url):
print(f"处理: {shell_url}")
if self.check_shell(shell_url):
if self.submit_vuln(shell_url):
return (shell_url, 'success')
return (shell_url, 'failed')
return (shell_url, 'invalid')
def batch_process(self, shell_list):
results = {'success': [], 'failed': [], 'invalid': []}
with ThreadPoolExecutor(max_workers=self.max_workers) as executor:
futures = [executor.submit(self.process_shell, shell) for shell in shell_list]
for future in futures:
shell, status = future.result()
results[status].append(shell)
time.sleep(1) # 控制请求频率
return results
def generate_report(self, results):
# 实现报告生成逻辑
pass
if __name__ == '__main__':
submitter = ShellSubmitter()
shells = submitter.load_shells('shell.txt')
results = submitter.batch_process(shells)
submitter.generate_report(results)
8. 常见问题解决
-
请求被拦截:
- 更换User-Agent
- 使用高质量代理
- 模拟人类操作间隔
-
验证码识别:
- 使用OCR服务
- 机器学习方案
- 人工干预模式
-
性能瓶颈:
- 增加并发数
- 优化网络请求
- 减少不必要的验证
9. 最佳实践建议
- 模块化设计:分离验证、提交、报告生成等逻辑
- 配置化:将平台URL、headers等提取为配置文件
- 日志记录:详细记录操作过程便于排查问题
- 异常恢复:实现断点续传功能
10. 法律与道德声明
使用此类脚本必须遵守以下原则:
- 仅在获得授权的情况下使用
- 不用于非法渗透测试
- 提交漏洞时遵循平台规则
- 不保存或泄露敏感数据
请确保在使用前充分了解并遵守当地法律法规和道德准则。