xssLab笔记

声明:本文用途为供自己学习
参考博文: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题

xssLab笔记_第1张图片

网页源代码:

xssLab笔记_第2张图片

当把url中的name=test改为name=hacker后,网页的源代码中,画线位置发生了变化。
xssLab笔记_第3张图片

后端源代码:
仅仅是GET传递参数,未对参数进行修改,所以不用构造payload
xssLab笔记_第4张图片

这就表明我们通过GET方式传递的参数可以对网页代码进行修改,而题目目的是调用alert参数,因此将传递的参数改为

第2题

审计代码:

xssLab笔记_第5张图片

更改搜索内容:
xssLab笔记_第6张图片

下图两处划线部分发生变化
xssLab笔记_第7张图片

更改输入内容,设计payload:
xssLab笔记_第8张图片

结果如下图
xssLab笔记_第9张图片

第一处划线处<和>被更改成了<和,而第二处划线处则未被更改,于是再次构造payload">
结果如下:
xssLab笔记_第10张图片

源代码画线位置变为:
xssLab笔记_第11张图片

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

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

xssLab笔记_第12张图片

第三题

xssLab笔记_第13张图片

向搜索框内输入">,页面源码变为下图所示,
xssLab笔记_第14张图片

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

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

点击鼠标,调用alert函数
xssLab笔记_第17张图片

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

第四题

xssLab笔记_第18张图片

先像上题输入同样的payload,源码如下图所示:
xssLab笔记_第19张图片

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

第五题

xssLab笔记_第20张图片

发现源码中的onclick被替换为了o_nclickscript将被替换为scr_ipt
xssLab笔记_第21张图片

于是希望换一个标签绕过调用alert函数(之前的题目也可以用这种方法绕过)
xssLab笔记_第22张图片

此时网页源代码:
xssLab笔记_第23张图片

任意点击一个链接后
xssLab笔记_第24张图片

做些有意思的研究:

再看下其后端代码,onscript字符串分别被替换为o_nscr_ipt
xssLab笔记_第25张图片

①.HTML超链接标签:
xssLab笔记_第26张图片
href中的内容为跳转到的位置,当然也可以是一个函数,
②在HTML网页中书写JavaScript

当payload为">blank时,页面如下,点击超链接的名称blank,及达成目的
xssLab笔记_第27张图片
然而当输入的payload为">xssLab笔记_第28张图片

第六题

后端源码中可以看到,像这些字符串都被替换掉了
xssLab笔记_第29张图片
因此考虑用html标签大小写过滤的方式绕过,然而如下图方式将上题中的herf改为HERF是不可行的
xssLab笔记_第30张图片
这是由于大小写过滤只发生在html标签中,在">语句中html标签为a标签,属于HTML标签的还有inputscripth1等。
参考文档:CSDN-DayDayUp(作者)-HTML元素属性名大小写的问题
xssLab笔记_第31张图片

因此,构造payload考虑将
此时网页源码为
xssLab笔记_第32张图片
然而发现网页的源码中Script并没有像想象中的被转化为了script…看来这个转换发生在其他地方。
xssLab笔记_第33张图片

第七题

本次相比于上次有两个地方出现了变动,一是在GET方法获取参数时调用了strtolower函数,第二个是str_replace将需要替换的内容改为空字符串。
xssLab笔记_第34张图片
第一个变动导致无法通过HTMl标签大小写过滤的方式调用alert函数,第二个变动则导致了可以利用双写绕过替换规则来达成目的,详见下图所示。
参考博文:博客园-zhengna(作者)-DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则

xssLab笔记_第35张图片
其实本质上即为构造类似于的字符串,该字符串index从2到7为一个完整的script子字符串,当遇到str_replace函数的时候,前述子字符串被替换为空字符串,而此时的原字符串则变为

你可能感兴趣的:(javascript,前端)