声明:本文用途为供自己学习
参考博文:CSDN-无(作者)-XSS靶场之xss-lab(1-5)关卡笔记
参考博文:在HTML网页中书写JavaScript
参考博文:CSDN-DayDayUp(作者)-HTML元素属性名大小写的问题
参考博文:CSDN-一路向前-执着(作者)-url地址为什么有时候会被编码
参考博文:w3schools 教程-(作者)-HTML URL 统一资源定位器
参考博文:CSDN-wangqi0079(作者)-&#x开头的是什么编码呢。浏览器可以解释它。如中国等同与中文"中国"?
参考博文:CSDN-lengye7(作者)-超链接标签:a标签的基本用法
参考博文-CSDN-zkzq(作者)-XSS 常用标签及绕过姿势总结
目录
第1题

网页源代码:

当把url中的name=test改为name=hacker后,网页的源代码中,画线位置发生了变化。

后端源代码:
仅仅是GET传递参数,未对参数进行修改,所以不用构造payload。

这就表明我们通过GET方式传递的参数可以对网页代码进行修改,而题目目的是调用alert参数,因此将传递的参数改为<script>alert()</script>
第2题
审计代码:

更改搜索内容:

下图两处划线部分发生变化

更改输入内容,设计payload:<script>alert()</script>

结果如下图

第一处划线处<和>被更改成了<和,而第二处划线处则未被更改,于是再次构造payload"><script>alert()</script>
结果如下:

源代码画线位置变为:

后端代码:
htmlspecialchars函数的相关介绍
htmlspecialchars()函数的功能如下:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号

第三题

向搜索框内输入"><script>alert()</script>,页面源码变为下图所示,

相比于第二题,第二处划线处的<、>和 "等符号也被转化为HTML实体(和这些符号被进行了HTML编码是一个意思)。导致出现这样原因的后台源码如下图所示:

那么构造的payload就不能够包含< >和"向(其实这里是看了后端源码才知道’是没有被实体化,如果不看后端源码其实这里也不知道’没有被实体化)
构造payload='onclick='alert()

点击鼠标,调用alert函数

(ps:
①学习一个js的函数onmouseover:onclick是点击鼠标事件,onmouseover是移动鼠标事件;
②onmouseover = 'javascript:alert()中,加上javascript:也是正确的;
③结尾多加单引号也是正确的)
第四题

先像上题输入同样的payload,源码如下图所示:

原来单引号的地方变成双引号即可正常构造payload
于是payload为"onclick="alert()
第五题

发现源码中的onclick被替换为了o_nclick且script将被替换为scr_ipt,

于是希望换一个标签绕过调用alert函数(之前的题目也可以用这种方法绕过)

此时网页源代码:

任意点击一个链接后

做些有意思的研究:
再看下其后端代码,on和script字符串分别被替换为o_n和scr_ipt

①.HTML超链接标签:

href中的内容为跳转到的位置,当然也可以是一个函数,
②在HTML网页中书写JavaScript
当payload为">blank时,页面如下,点击超链接的名称blank,及达成目的

然而当输入的payload为"><a href="javascript:alert()时,下图标记的三个地方均可以点击并达成目的,这是由于该payload之后没有</a>所以其后的内容均被作为可点击的超链接。(不过我没有理解·_·是怎么出来的)

第六题
后端源码中可以看到,像<script这些字符串都被替换掉了

因此考虑用html标签大小写过滤的方式绕过,然而如下图方式将上题中的herf改为HERF是不可行的

这是由于大小写过滤只发生在html标签中,在"><a href="javascript:alert()">语句中html标签为a标签,属于HTML标签的还有input、script、h1等。
参考文档:CSDN-DayDayUp(作者)-HTML元素属性名大小写的问题

因此,构造payload考虑将<script>改为<Script>等,来绕过对<script的过滤,于是构造的payload为"><Script>alert()</script>
此时网页源码为

然而发现网页的源码中Script并没有像想象中的被转化为了script…看来这个转换发生在其他地方。

第七题
本次相比于上次有两个地方出现了变动,一是在GET方法获取参数时调用了strtolower函数,第二个是str_replace将需要替换的内容改为空字符串。

第一个变动导致无法通过HTMl标签大小写过滤的方式调用alert函数,第二个变动则导致了可以利用双写绕过替换规则来达成目的,详见下图所示。
参考博文:博客园-zhengna(作者)-DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则

其实本质上即为构造类似于<sscriptcript>的字符串,该字符串index从2到7为一个完整的script子字符串,当遇到str_replace函数的时候,前述子字符串被替换为空字符串,而此时的原字符串则变为<script>,因此绕过了str_replace函数。而之前的题目则不能利用该方式,这是由于之前题目中str_replace函数的目的字符串并非空字符串。
因此构造payload"><sscriptcrip>alert()</sscriptcript>
(ps:这里一开始犯了一个小错误,第一个引号达成了中文符号,导致一直失败=_=||)


第八题
后端源码:

正如上题中所说:当str_replace函数的目的字符串不为空时,双写绕过不可用,本题中提供了a标签,因此秩序构造的payload为javascript:alert()即可,然而script由于str_replace函数不能正常传递到a标签中,而由于解析url时,url会被自动进行url解码,所以要考虑通过HTML的NCR编码绕过str_replace函数,即将javascript:alert()进行HTML实体化编码。
参考博文:w3schools 教程-(作者)-HTML URL 统一资源定位器

生成HTML实体化的python代码如下(英文对应的NCR编码为&#加上该字母对应的ascii码)(如果不多输出一个\n,输出结果结尾会有一个多余的%)
s = "javascript:alert()"
for i in s:
print("&#"+str(ord(i))+";",end="")
print("\n")
得到的编码为javascript:alert()
输入到输入框内,可以看到网页右下角显示如下图:

点击友情链接,完成目的

补充:其实我一开始本关并没有用NCR编码,而是用的URL编码:

通过下述python代码可以得到字符串s的url编码(就是%加上对应的十六进制ascii码)
s = "javascript:alert()"
for i in s:
print("%"+str(hex(ord(i))[2:]),end="")
print("\n")
将%6a%61%76%61%73%63%72%69%70%74%3a%61%6c%65%72%74%28%29输入到搜索框内,可以看到如下图所示,划线处显示刚才编码内容已经被替换为了jacascript:alert()

但其实并不可以达成调用alert()函数的目的
这是因为:
参考博文十-CSDN-zkzq(作者)-XSS 常用标签及绕过姿势总结

第九题
从下图中的后端源码中可以发现,构造的payload中需要包含http://子字符串,而且子字符串的起始位置。(不能出现在起始位置没关系,因为本来也没打算这样做,想把这个字符串放在末尾注释掉)

结合上述思路,构造payload:javascript:alert()//http://,第一个//前的部分和上一题的相同,为javascript:alert()的HTML编码。
最终网页源码如下图所示:

达成目的:

第十题
后台源码:

可以向t_sort变量传参,只要传递的参数里不包含<>就可以成功绕过。
但是,该input标签最后的type为hidden,那么设置onclick等属性时,由于没有该项input标签显示的位置,不可以点击等操作,所以依然不能完成调用函数操作,可由于输入的payload在type之前,因此在最后一个type之前输入一个type=”text“,即可忽略掉type="hidden",达到绕过目的,因此最后payload为" type="text" onclick="alert(1)

第十一题
后端源码为:
关键地方在于划线部分,其他部分严格封锁已经走不通了,需要对HTTP请求中的REFERER进行修改,一种是通过BurpSuit修改,另一种直接通过火狐浏览器的hackbar插件修改,

loadurl后,点击Referer,

在下列选项的低端下图所示位置输入和上题相同的payload,点击Execute,


点击出现的文本框即达成攻击目的。
附:hackbar安装教程:
参考博文:CSDN-Abernorland(作者)-hackbar2.1.3 安装教程(附下载地址 )Firefox & Chrome
第十二题
后端源码

和上题思路一样,修改部分改为USER_AGENT,依然用hackbar,详细过程不做赘述



第十三题
后端源码:

依然和上题思路一样:
修改部分为COOKIE:
然而,没有想象中的这么直接,在原来的payload的基础上,还要在其之前添加user=(就是后台源码中$_COOKIE的变量名),最终payload为user=" type="text" onclick="alert(1)"

第十四题
由于后台源码中的http://www.exifviewer.org/网站已失效,因此这题做不了,思路如下
参考博文:CSDN-shy014(作者)-exif xss 复现
linux下:
安装exiftool工具:sudo apt install exiftool
在图片作者栏中写入payload:
exiftoll -artist='"<img src=1 onerrror=alert(/shy/)>' exif.jpg
上传到可以读取图片exif信息的网站,出现弹窗,复现成功。
第十五题
后端源码:

本题用到了span标签的ng-include指令,

可以认为是一个可用于文件包含的选项
参考博文-CSDN-Lydia_Ha(作者)-xss-labs搭建及通关攻略
payload为
src='http://a89bf69c-1b58-4262-97f1-10b59de622fe.node4.buuoj.cn:81/level1.php?name=<img src=asd onerror=alert(1)>'
7.2.16

空格和tab被过滤掉了,但标签名和属性之间要有间隔隔开,而使用url编码也依然会被过滤掉,因此考虑用回车来绕过,而url中又不能直接回车,于是找到回车的url编码,为%0d或%0a,考虑用其他加其他标签的方式绕过,payload为<a%0D%0Aonclick='alert(1)'>
参考博文:CSDN-liaonn5(作者)-URL编码对照表

第十七题

参考博文:CSDN-小惜(作者)-XSS-labs通关(超详细)

最终payload为(向arg01传参)123 onclick='alert(1)'

第十八题
后端源码和上题几乎一模一样

payload也和上一关一样

XSS实验室攻防实战与HTML编码绕过技巧
17万+

被折叠的 条评论
为什么被折叠?



