快,关注这个公众号,一起涨姿势~
0x00 introduction
https://pentesterlab.com/
官网截图:
虽然有些实验是收费的,但是总体来说,免费的还是占多数的。
本文进行操作的是“Web for Pentester”实验。
点击进入实验主页,下载iso镜像文件,
实验主页地址
https://pentesterlab.com/exercises/web_for_pentester
下载好的镜像文件是要放在虚拟机里的,至于虚拟机怎么安装ISO镜像文件,百度很多,这里就不细说了。
安装好了之后,它发现是自动登录了,ifconfig一下看一下ip地址。
直接访问ip即可,看到的是这样子的
那么首先从XSS开始
0x01 XSS-Example 1
点进去我们发现
可以清楚的看到url上有个name,通过改变name的值,发现下面的值也会有变化。
那么尝试在name上加上XSS的代码来进行测试
Payload: :
?name=
其实第一关肯定是最简单的,name这个参数不用想就知道是有问题的。
0x02 XSS-Example 2
发现还是和第一关是一样的页面。还是尝试改变name参数,发现内容也是随之而改变。
那么猜想,可能是进行了某种过滤,还是用第一关的payload尝试一下。
再查看下源代码,可以直观的看到2个,如果出现,就替换成空,尝试用大小写绕过
成功,payload:
?name=
0x03 XSS-Example 3
一样熟悉的界面,name参数肯定是突破点,还是用老方法,用最常用也就是第一关的payload尝试。
发现还是和第二关是一样一样的。好,那我们用第二关的payload尝试
发现也被过滤了,也就是说匹配,但是忽略了大小写,反思一下前面做的,发现,他是连用””一起过滤的,也就是说scscriptript是不行的,但是要把也算进去,所以是
0x04 XSS-Example 4
还是一样的场景。老方法,用最正常的payload去尝试,看看返回的结果是什么。
这次直接报error了,
也就是说在后端的处理,是直接检测到关键字就报error,而不是替换再输出,那么我们就要各种尝试了,看看他是匹配什么关键字的。,下面就是一些尝试
?name= 报error
?name=alert(/xss/) 返回alert(/xss/)
说明一旦出现,就报error。那就简单了,能执行xss代码的语句不止一个,只要不出现上面2个关键字就行。
Payload:
?name=
0x05 XSS-Example 5
还是一样的界面,不多说,还是直接上最简单的payload
还是和上一关一样的场景。这次思考了一下,上面是过滤
当然了,除了prompt(),和alert()还有类似的弹窗效果的还有confirm()
0x06 XSS-Example 6
恩,开始界面还是一样的,就直接上最简单的payload,看看效果了
这次又变了,看下网页源代码
这次是直接放在了变量里,不得不说,越来越贴近实际情况了。其实这也是最简单的一种,只要精心构造语句,然后把引号闭合,就可以执行后面我们想要执行的代码了。接下来,就来尝试一下,首先,看到提交的内容都是在完整的在引号里,那么就可以先闭合引号,然后分号(;)表示一句结束,然后alert语句,最后注释(//)最后一个分号即可,即?name=”;alert(“xss”);//
Payload:
?name=";alert("xss");//
0x07 XSS-Example 7
还是一样,用最普通的payload尝试,查看源代码可以看到,果然进行了过滤
把尖括号给编码成了html字符实体,所谓的html字符实体,简单的说就是html里的预留字符,就像是C语言中的int不能作为变量名一样,为了防止html把尖括号误认为标签,所以要进行编码.
从上面的测试中可以看到只是编码了尖括号,但是因为上下文已经有了script标签,所以就不需要我们再加上"
可以看到源码;
0x09 XSS-Example 9
可以看到稍微有点变化了,还是老规矩,用常规payload测试。
第一次并没有反应,查看一下源码
百度一下这个函数,发现
location是JavaScript管理地址栏的内置对象,location.hash则可以用来获取或设置页面的标签值,也就是#号后面的值。所以当我们第一次访问
/xss/example9.php#hacker时,location.hash.substring(1)就是#后面的hacker,当我们在改变为
#时,location.hash.substring(1)的值并没有更新,需要刷新一下,才会更新。这是典型的DOM-XSS。
Payload:
#
当然如果你直接访问/xss/example9.php#的话,是可以直接成功的。
0x10 总结
现在来总结下:
第一关是普通的payload
第二关是匹配并替换标签,大小写绕过
第三关是忽略大小写的匹配并替换标签,双重标签绕过
第四关是匹配标签并报错,使用未过滤的标签绕过
第五关是匹配函数并报错,使用未过滤的函数绕过
第六关/第七关都是把提交的代码放入某个变量中,根据上下文闭合双引号,标签等
第八关则是考察了php的漏洞结合的xss,$_SERVER['PHP_SELF']
第九关是DOM-XSS
其实xss漏洞也主要是这些,在CTF比赛中或者在实际的发掘漏洞中,当然不可能是单个的一种,肯定需要多种不同的组合。
领取专属 10元无门槛券
私享最新 技术干货