Files

135 lines
5.3 KiB
Python
Raw Permalink Normal View History

2025-03-09 13:49:12 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
XSS 深度漏洞扫描器
作者: 高级渗透工程师
版本: 1.0.0
描述: 一个全面的XSS漏洞扫描工具能够扫描多种平台的XSS漏洞并提供其他漏洞的辅助扫描功能
"""
import sys
import os
import argparse
import time
import logging
from datetime import datetime
# 导入内部模块
from xss_scanner.core.scanner_engine import ScannerEngine
from xss_scanner.core.config import Config
from xss_scanner.core.logger import setup_logger
from xss_scanner.ui.cli import display_banner, display_progress, display_results
from xss_scanner.utils.validator import validate_target
def parse_arguments():
"""解析命令行参数"""
parser = argparse.ArgumentParser(description='XSS 深度漏洞扫描器')
parser.add_argument('-u', '--url', help='目标URL')
parser.add_argument('-f', '--file', help='包含目标URL的文件')
parser.add_argument('-d', '--depth', type=int, default=2, help='爬虫深度 (默认: 2)')
parser.add_argument('-t', '--threads', type=int, default=5, help='线程数 (默认: 5)')
parser.add_argument('--timeout', type=int, default=10, help='请求超时时间,单位秒 (默认: 10)')
parser.add_argument('--user-agent', help='自定义User-Agent')
parser.add_argument('--cookie', help='请求Cookie')
parser.add_argument('--headers', help='自定义HTTP头格式: "Header1:Value1;Header2:Value2"')
parser.add_argument('--proxy', help='HTTP代理格式: http://user:pass@host:port')
parser.add_argument('--scan-level', type=int, choices=[1, 2, 3], default=2,
help='扫描级别: 1-快速, 2-标准, 3-深度 (默认: 2)')
parser.add_argument('--scan-type', choices=['all', 'xss', 'csrf', 'sqli', 'lfi', 'rfi', 'ssrf', 'xxe'],
default='all', help='扫描类型 (默认: all)')
parser.add_argument('--payload-level', type=int, choices=[1, 2, 3], default=2,
help='Payload复杂度: 1-基础, 2-标准, 3-高级 (默认: 2)')
parser.add_argument('-o', '--output', help='输出报告文件路径')
parser.add_argument('--format', choices=['txt', 'html', 'json', 'xml'], default='html',
help='报告输出格式 (默认: html)')
parser.add_argument('-v', '--verbose', action='store_true', help='显示详细输出')
parser.add_argument('--no-color', action='store_true', help='禁用彩色输出')
# 高级选项
advanced_group = parser.add_argument_group('高级选项')
advanced_group.add_argument('--browser', action='store_true', help='使用真实浏览器进行扫描')
advanced_group.add_argument('--exploit', action='store_true', help='尝试利用发现的漏洞')
advanced_group.add_argument('--custom-payloads', help='自定义Payload文件路径')
advanced_group.add_argument('--exclude', help='排除URL模式 (正则表达式)')
advanced_group.add_argument('--include', help='仅包含URL模式 (正则表达式)')
advanced_group.add_argument('--auth', help='基本认证,格式: username:password')
return parser.parse_args()
def main():
"""主函数"""
# 显示Banner
display_banner()
# 解析命令行参数
args = parse_arguments()
# 配置日志
log_level = logging.DEBUG if args.verbose else logging.INFO
logger = setup_logger(log_level, args.no_color)
# 配置扫描器
config = Config()
config.load_from_args(args)
# 验证目标
targets = []
if args.url:
if validate_target(args.url):
targets.append(args.url)
else:
logger.error(f"无效的目标URL: {args.url}")
sys.exit(1)
elif args.file:
if not os.path.exists(args.file):
logger.error(f"文件不存在: {args.file}")
sys.exit(1)
with open(args.file, 'r') as f:
for line in f:
url = line.strip()
if validate_target(url):
targets.append(url)
else:
logger.error("必须指定目标URL(-u)或包含目标的文件(-f)")
sys.exit(1)
if not targets:
logger.error("没有有效的目标")
sys.exit(1)
# 初始化扫描引擎
scanner = ScannerEngine(config)
# 开始扫描
start_time = time.time()
logger.info(f"扫描开始,目标数量: {len(targets)}")
results = []
for target in targets:
logger.info(f"正在扫描: {target}")
result = scanner.scan(target)
results.append(result)
total_time = time.time() - start_time
# 显示结果
display_results(results, total_time)
# 生成报告
if args.output:
from xss_scanner.reporters.report_generator import generate_report
generate_report(results, args.output, args.format)
logger.info(f"报告已保存至: {args.output}")
logger.info(f"扫描完成,总耗时: {total_time:.2f}")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n用户中断,扫描已停止")
sys.exit(0)
except Exception as e:
print(f"发生错误: {str(e)}")
sys.exit(1)