xssLab笔记

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

声明:本文用途为供自己学习
参考博文: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>
在这里插入图片描述

结果如下图
在这里插入图片描述

第一处划线处<和>被更改成了&lt和,而第二处划线处则未被更改,于是再次构造payload"><script>alert()</script>
结果如下:
在这里插入图片描述

源代码画线位置变为:
在这里插入图片描述

后端代码:
htmlspecialchars函数的相关介绍

htmlspecialchars()函数的功能如下:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
    & (和号)成为 &amp;
    " (双引号)成为 &quot;
    ' (单引号)成为 '
    < (小于)成为 &lt;
    > (大于)成为 &gt;
它的语法如下:
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_nclickscript将被替换为scr_ipt
在这里插入图片描述

于是希望换一个标签绕过调用alert函数(之前的题目也可以用这种方法绕过)
在这里插入图片描述

此时网页源代码:
在这里插入图片描述

任意点击一个链接后
在这里插入图片描述

做些有意思的研究:

再看下其后端代码,onscript字符串分别被替换为o_nscr_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标签的还有inputscripth1等。
参考文档: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")

得到的编码为&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;
输入到输入框内,可以看到网页右下角显示如下图:
在这里插入图片描述
点击友情链接,完成目的

在这里插入图片描述
补充:其实我一开始本关并没有用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:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;//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也和上一关一样
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值