基于Python:XSS漏洞检测脚本
字数 1170 2025-08-11 17:39:51
XSS漏洞检测脚本开发指南
一、XSS漏洞检测原理
XSS(跨站脚本攻击)漏洞检测的核心思路是通过注入恶意脚本并验证其执行情况来判断漏洞存在与否。本文介绍的检测方法基于以下原理:
- 通过注入
<script>alert('xss exists!')</script>等测试脚本 - 使用Selenium WebDriver自动化浏览器操作
- 检测页面是否出现JavaScript弹窗来判断XSS漏洞存在
二、环境准备
必要组件
- Python 3.x
- Selenium库 (
pip install selenium) - Chrome浏览器
- ChromeDriver (需与Chrome版本匹配)
ChromeDriver配置
- 下载对应版本的ChromeDriver
- 将ChromeDriver放在系统PATH路径或指定其路径
三、Selenium基础配置
无界面模式配置
from selenium import webdriver
options = webdriver.ChromeOptions() # 创建配置对象
options.add_argument("--headless") # 开启无界面模式
options.add_argument("--disable-gpu") # 禁用GPU加速
driver = webdriver.Chrome(options=options) # 实例化带有配置的driver
四、XSS检测方法实现
方法1:URL直接注入
import time
import traceback
# 配置无界面浏览器(同上)
url = "http://example.com/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert(%27xss%20exits%EF%BC%81%27)%3C/script%3E&submit=submit"
driver.get(url)
try:
time.sleep(3) # 等待页面加载
driver.switch_to.alert.accept() # 尝试接受弹窗
print("存在XSS漏洞!")
except:
print("没有XSS漏洞!")
traceback.print_exc() # 打印异常信息
finally:
print("检测结束!")
driver.quit()
方法2:页面定位注入
from selenium.webdriver.common.by import By
# 配置无界面浏览器(同上)
url = "http://example.com/vul/xss/xss_reflected_get.php"
driver.get(url)
# 定位元素并注入XSS测试脚本
driver.find_element(by=By.NAME, value="message").send_keys("<script>alert('存在XSS漏洞!')</script>")
driver.find_element(by=By.NAME, value="submit").click()
try:
driver.switch_to.alert.accept() # 尝试接受弹窗
print("存在XSS漏洞!")
except:
traceback.print_exc()
print("不存在XSS漏洞!")
finally:
print("运行结束!")
driver.quit()
五、关键知识点
1. Selenium定位元素方法
By.NAME: 通过name属性定位By.ID: 通过id属性定位By.XPATH: 通过XPath定位By.CSS_SELECTOR: 通过CSS选择器定位
2. 弹窗处理
driver.switch_to.alert: 获取弹窗对象.accept(): 接受弹窗(点击确定).dismiss(): 取消弹窗(点击取消).text: 获取弹窗文本
3. 等待机制
time.sleep(): 强制等待- 隐式等待:
driver.implicitly_wait(10) - 显式等待: 使用
WebDriverWait和expected_conditions
六、脚本优化建议
- 参数化输入: 将目标URL和测试payload作为参数传入
- 多种payload测试: 使用不同XSS测试向量
- 结果记录: 将检测结果保存到文件或数据库
- 异常处理增强: 细化异常类型处理
- 多浏览器支持: 添加Firefox等浏览器支持
- 并发检测: 使用多线程提高检测效率
七、典型XSS测试payload
<script>alert('XSS')</script>
<svg/onload=alert('XSS')>
<body onload=alert('XSS')>
八、注意事项
- 确保ChromeDriver版本与Chrome浏览器版本兼容
- 无界面模式下某些页面行为可能与普通模式不同
- 检测前应获得目标系统的授权
- 真实环境中应考虑WAF等防护机制的绕过
- 该脚本仅检测反射型XSS,存储型XSS需要其他方法
九、扩展思路
- 结合爬虫自动发现网站所有输入点
- 添加DOM型XSS检测能力
- 集成到持续集成/持续部署(CI/CD)流程中
- 开发为浏览器插件形式
- 添加漏洞利用证明(PoC)自动生成功能
通过以上方法,可以构建一个功能完善的XSS漏洞检测系统,帮助开发和安全人员及时发现和修复XSS漏洞。