Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS;
反射型xss(get)
反射型xss:它允许攻击者将恶意脚本注入到网页中,当用户浏览这些页面时,这些恶意脚本会被执行。
信息收集与分析
随便输入一个字符串,输入aa,然后提交,在下面会有反显的内容。很明显这是个反射型xss。
这边输入框对输入内容做了限制,最长20字符,突破这个限制有两个方法,
- 直接发送请求,就没有这个限制
- 直接通过Devtool修改这个长度
实施
我们注入的代码如下:
<script>alert(1)</script>
- 通过bp抓包修改
- 通过浏览器的开发者工具,在Elements中直接修改maxlength的值
总结
绕过前段限制的两种方式,一种直接跟服务器发请求,一种通过开发者工具修改。
反射型xss(post)
信息收集与分析
这一关应该是登录后,通过xss获取到cookie,我这边默认密码是admin|123456
登录后是一个输入框,并且这边的输入框没有限制。
实施
注入的代码有:
<script>alert(document.cookie)</script>
登录后,输入注入代码即可
总结
通过前段获取登录后的cookie信息。
存储型xss
存储型XSS是指攻击者将恶意脚本提交到目标网站的数据库中,这些脚本随后被服务器端读取并在用户的浏览器中执行。与反射型XSS不同,反射型XSS通常涉及将恶意脚本作为URL参数传递,而存储型XSS涉及将脚本存储在服务器端(例如,数据库或服务器文件系统中)。
信息收集与分析
此处是存储型,保存后,刷新页面后数据依然存在,而反射型就没有了。有信息保存的,并且会把这个信息文本显示的地方就会有这个漏洞。
实施
注入的代码:
<script>alert(document.cookie)</script>
输入代码后,显示:
总结
学习了存储型的特性,注入的代码会存储到数据库的。
dom型xss
DOM XSS它发生在客户端,通过修改网页的DOM结构来注入恶意脚本。
信息收集与分析
输入的内容,会包含在一个a标签的href属性中,那么我们输入javascript:alert(1);
实施
注入的代码:
javascript:alert(1)
总结
学习了对dom型的用例;
DOM型xss-x
信息收集与分析
此关主要是上一关的变形,只是需要点击两次,但是最总还是把输入的内容添加到一个a标签的href中
实施
注入代码:
javascript:alert(1)
xss盲打
信息收集与分析
随便输入一些信息后,当前页面没有显示相关的内容。
查看下提示 :
地址为:
/pikachu/vul/xss/xssblind/admin_login.php#
账号密码是:admin|123456
终于看到对应的内容:
实施
注入的内容是:
<script>alert(1)</script>
总结
学习了一个新的场景,不会直接在当前页面实现,而是在管理员页面显示。
xss过滤
信息收集与分析
我们输入:
<script>alert(1)</script>
结果被过滤掉,只出现了一个>
查看提示:
这边只能乱测试,可以考虑大小写是否能逃过。
我们通过源码可以看到过滤的代码:
根据这个,我们使用大写就能绕过了。
实施
注入的代码:
<sCRIPT>alert(1)</sCRIPT>
总结
尝试大小写、编码等方便尝试绕过。
xss之htmlspecialchars
htmlspecialchars()
会将以下字符转换为对应的 HTML 实体:
<
转换为<
>
转换为>
&
转换为&
"
转换为"
'
转换为'
htmlspecialchars() 是一种简单而有效的防止 XSS 攻击的方法,尤其适用于需要快速实现数据净化的场景。通过将特殊字符转换为 HTML 实体,可以确保这些字符不会被浏览器解析为实际的 HTML 或 JavaScript 代码。然而,对于更复杂的数据净化需求,如需要保留部分 HTML 标签或属性,建议使用更强大的工具,如 HTML Purifier,以实现更精细的控制。
信息收集与分析
输入的内容,被转化
'"<>6666
我们可以输入下面内容绕过的代码
' onclick='alert(1)
javascript:alert(1)
实施
下面是注入的代码与效果图
' onclick='alert(1)
总结
学习了绕过htmlspecialchars的方法;
xss之href输出
信息收集与实施
这边关主要是对输入的内容,创建a标签的href中,之前的关卡中也都有过这样的例子,我们这边就直接实施了,输入下面的代码:
javascript:alert(1)
效果:
xss之js输出
信息收集与分析
这一关把输入框的内容生成对应的js内容,我可以输入:asdfasdf ,进行测试,查看下页面的代码:
根据代码格式,我们想办法把 '
闭合,
$ms='内容';
下面是可以绕过的代码:
';alert(1);';
实施
输入绕过代码的效果:
总结
需要根据代码的具体内容,组织代码绕过。