声明:本文用途为供自己学习
参考博文:CSDN-无(作者)-XSS靶场之xss-lab(1-5)关卡笔记
参考博文:在HTML网页中书写JavaScript
参考博文:CSDN-DayDayUp(作者)-HTML元素属性名大小写的问题
参考博文:CSDN-一路向前-执着(作者)-url地址为什么有时候会被编码
参考博文:w3schools 教程-(作者)-HTML URL 统一资源定位器
参考博文:CSDN-wangqi0079(作者)-开头的是什么编码呢。浏览器可以解释它。如中国等同与中文"中国"?
参考博文:CSDN-lengye7(作者)-超链接标签:a标签的基本用法
参考博文-CSDN-zkzq(作者)-XSS 常用标签及绕过姿势总结
当把url中的name=test
改为name=hacker
后,网页的源代码中,画线位置发生了变化。
后端源代码:
仅仅是GET
传递参数,未对参数进行修改,所以不用构造payload
。
这就表明我们通过GET
方式传递的参数可以对网页代码进行修改,而题目目的是调用alert
参数,因此将传递的参数改为
第一处划线处<和>被更改成了<和,而第二处划线处则未被更改,于是再次构造payload">
结果如下:
后端代码:
htmlspecialchars函数的相关介绍
htmlspecialchars()函数的功能如下:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号
相比于第二题,第二处划线处的<
、>
和 "
等符号也被转化为HTML
实体(和这些符号被进行了HTML
编码是一个意思)。导致出现这样原因的后台源码如下图所示:
那么构造的payload就不能够包含< >和"向(其实这里是看了后端源码才知道’是没有被实体化,如果不看后端源码其实这里也不知道’没有被实体化)
构造payload='onclick='alert()
(ps:
①学习一个js
的函数onmouseover
:onclick是点击鼠标事件,onmouseover是移动鼠标事件;
②onmouseover = 'javascript:alert()
中,加上javascript:
也是正确的;
③结尾多加单引号也是正确的)
原来单引号的地方变成双引号即可正常构造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为">
后端源码中可以看到,像
此时网页源码为
然而发现网页的源码中Script
并没有像想象中的被转化为了script
…看来这个转换发生在其他地方。
本次相比于上次有两个地方出现了变动,一是在GET方法获取参数时调用了strtolower函数,第二个是str_replace将需要替换的内容改为空字符串。
第一个变动导致无法通过HTMl标签大小写过滤的方式调用alert函数,第二个变动则导致了可以利用双写绕过替换规则来达成目的,详见下图所示。
参考博文:博客园-zhengna(作者)-DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则
其实本质上即为构造类似于
的字符串,该字符串index从2到7为一个完整的script
子字符串,当遇到str_replace函数的时候,前述子字符串被替换为空字符串,而此时的原字符串则变为,因此绕过了str_replace函数。而之前的题目则不能利用该方式,这是由于之前题目中str_replace函数的目的字符串并非空字符串。
因此构造payload">
(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为
参考博文:CSDN-liaonn5(作者)-URL编码对照表
参考博文:CSDN-小惜(作者)-XSS-labs通关(超详细)
最终payload为(向arg01传参)123 onclick='alert(1)'