仅限学习参考,欢迎补充指正

目录

绕过姿势

第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关

第九关

第十关(更新中)

第十一关

十二关


打靶场之前先整理下一些可执行绕过姿势

大小写绕过(转换大小写字符)
  注意:1、js中严格区分大小写
       2、在html标签中不区分大小写

实体编码转换绕过

双写绕过

伪协议绕过  (JavaScript 后面可以执行很多js代码,但每个语句要用;隔开)

事件绕过(onlick、onmouseout)

还可利用单双引号、制表符

1、   <script> alter() </script>      //警告消息框  有一个确定键 (用的比较多)
      <script> confirm() </script>    //确认消息框  有一个确定键和一个取消键
      <script> prompt() </script>     //提示消息框  有一个text输入框


2、   <img onerror=javascript:alert(/xss/);>


3、   <a href="javascript:alert(/xss/)"></a>  伪协议


4、   可内嵌在标签属性里的      onclick  或  onmouseout      eg: button标签、iframe标签等


5、   <iframe src="javascript:alert(/xx/)">

做之前需要找到交互点,要学会利用开发者工具以及源代码。

在后面比较难的关卡中,还需要用到BurpSuitePro,或者是在火狐安装HackBar插件。


第一关

页面没有任何可以点击或输入的地方,很明显唯一可输入的只有URL中了。尝试输入后,发现name值可修改,可考虑在此进行绕过。

在name后试着输入代码口令,成功过关

<script>alert(/xxs/)</script>


第二关

打开页面发现有两个输入点,试着在页面输入框中输入,发现可输出,考虑在此绕过

打开开发者工具(若查询不到错误,打开源代码分析)

有两种解决方法: 

方法一:

想让它利用标签执行弹窗,首先需要把input标签闭合,继而可继续执行命令

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

方法二:

可利用鼠标移出事件(onmouseout)在input内部进行绕过

 " onmouseout="alert(/xxx/)

方法三:

利用iframe,发现新开了一个页面并出现了弹窗,但并没有出现通关提示并跳转下一关,这是由于通关提示是写在当前页面的,在另一个页面实现弹窗绕过,也是通关的一个体现,手动跳关就可以了。

"> <iframe src="javascript:alert(/xx/)">


第三关

还是重复之前的操作,先找到输入点随便输入,查看是否可以输出。发现可输出,就可以在这继续执行绕过操作了。

" onmouseout="alert(/xxx/)

输入后并没有出现弹窗,打开开发者工具,会发现鼠标指向输入框后,输入框变蓝,是因为把值都赋给了values,这时打开源代码查找问题

 发现双引号被实体编码了,并且变成了单引号。可以试试把双引号变为单引号是否可以。

 ' onmouseout='alert(/xxx/)


第四关

和第二关的原理一样,两种方法都可实现 

" onmouseout="alert(/xxx/) 

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


第五关

试验下之前的方法,发现过滤掉了on,试了大小写,发现一样被过滤掉

试试   "> <script>alert(/xxs/)</script>     发现输入框后面多出来了一串代码,于是想到了a标签的超链接行不行得通

"> <a href="javascript:alert('xss')">aaa</a> 

出现了超链接,点击进去出现了弹框

"> <iframe src="javascript:alert(/xx/)">

发现出现了新开了页面并弹窗,但是并没有跳转到下一关,这是因为通关代码写在挑战的当前页面,但也是挑战成功(手动跳关吧#^.^#)


第六关

尝试伪协议,发现过滤了hr,改成大写

第一种方法:  "> <a HRef="javascript:alert('xss')">aaa</a>

 第二种方法: 

" ONCLICK="alert('xxx')"

第三种方法: 

"> <iframe sRc="javascript:alert(/xxx/)"


第七关

随便输入一个字符,发现仍然可以被输出。那就试试之前的几种方法看看可不可行

发现服务器会自动过滤掉src、script、on 等字符,可尝试下大小写绕过以及双写绕过,尝试过只有双写绕过可以成功过关。

双写绕过:不让服务器识别到src、script、on等字符,只要不让它们连续出现(不连续出现的情况下,只会过滤一遍)

第一种方法:     "> <iframe srsrcc="javascripscriptt:alert(/xx/)

第二种方法:     " oonnclick="alert('xxx')

第三种方法:     "> <input oonnmouseout="alert(111)


第八关

在页面中看到有“友情链接”的超链接,随意输字符点击进去,会出现这样一个界面

输入常用的payload试试,看看问题在哪里。打开源码发现输入的东西,在a标签里输出了,并对一些字符进行了过滤

 这时我们需要试试大小写、双写是否可以绕过,发现同样执行不了,并且是在a标签中输入,只可以使用内嵌绕过的方式。

这时我们就只能用实体编码了,在百度上搜索编码转换,输入需要转换的字符,然后复制就可以了。这时我们使用内嵌绕过的方式来实现

java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/xxx/)

制表符绕过:%09  只能在URL中使用。


第九关

 页面上出现了超链接,随便输入字符,点进去

查看源码,输入的字符串传递给了name和a标签里,还说我的链接不合法╭(╯^╰)╮ ,这提示我们所输入的字符串赋给了a标签。

既然它提示链接不合法,我们应该想到,标准的链接都会带有http://或https://,这时可以试一下把它放进去行不行。 发现还是错误,去到源码里找问题

发现把script过滤掉了,不让它们一起出现,试了大小写,双写都行不通,那就只能给字符编码了

这里想方便这些字符里编写一个就可以,我编了三个。但是发现还是行不通,链接点不开。

我们想让伪协议和http://共存,可以把http注释掉,之所以不会出错是因为http://是个必须出现的字符,但在这当中不是重要字符,只要它出现了,并且不让后台读取到就可以了。

java&#x73;&#x63;&#x72;ipt:alert()  // http://

补充: 重新做一遍后,想着http://能不能放在前面,试下瞅瞅,看到返回报错。

我的理解是:

它放在开头,虽然是注释掉了,但返回到的是URL中,URL并不认识这串注释,只会从javascript开始执行后续命令。

再来,放到中间就不一样了,把/* http:// */ 放在javascript: 后面,即开始执行JavaScript语句,自然就可以正确执行这段注释,最后出现弹窗。回车绕过同样(去掉注释)。


javasc&#x72;ipt:/*http://*/ alert() 


又学到了一种新的绕过方式: 回车绕过 编码为&0a
javasc&#x72;ipt:http://%0a alert() 

第十关

在URL中输入后发现字符串由keyword字符输出,但在源代码中并没有看到有任何keyword的字符,这时我们可以返回到之前的关卡,发现也有keyword,并且代码中显示了name=keyword。

仔细观察一下源代码,发现与上一关不同的是多了一串表单,可以试着从这里找方向

看到每行的type值都为hidden,hidden是隐藏段落,在这段命令意思为隐藏文本框。

这下我们知道了其中的含义,就可以试试哪个input可以传参了,在URL中写,看到源码中t_sort传参了,说明此方法是可行的

input标签是自由标签,会出现一个文本框,会自动输出所输入的内容,由keyword传出。不想让hidden生效,可以添加一个type ,即选择让第一个type值生效(type中的值会冲突 )

输入后,看到页面上显现了文本框,第一个type的值生效,点击文本框就可以过关了。

方法一:

t_sort=" onclick="alert()" type="text"

方法二:


t_sort=" onclick="alert()" type="text"><!--       

之所以注释没有补全还可以执行,因为这是在浏览器,浏览器自动把后面的语句补全了

这种方式不适用于后面还有很多代码,因为注释语句没有补全,会自动注释掉后面的代码语句


第十一关

进入十一关后,观察只有URL一个输入点,进入开发者工具,并没有查看到什么有用的信息,于是分析源码,发现出现了一个表单,并且t_sort后给我们带了值(带的值是什么意思呢,详解看下方提示 #^.^#),type值为hidden(把输入框隐藏掉了),说明这是一个突破口,可以在这里试试。

提示:这串value值其实是referer传递出来的,作用是记录你是从哪个页面跳转过来的。也就是说这是默认通过第十关跳过来才会出现的;如果你是直接访问的当前关卡,就不会出现了。

 但是当你发现你修改了URL中的值,虽然在页面中显示了,但是并没有返回给t_sort

这时,我们就需要借助外部工具来绕过它,以我用的方法为例:

① 可以利用Burp Suite Professional软件来抓包,找到referer并修改值,看下图

 先试试我们的老朋友   "> <script>alert(/xxs/)</script>    发现把尖括号过滤掉了,使用字符串编码也不好使,那就试试内嵌的方式能不能行得通(记得像上一关一样显示出文本框)

发现是可行的,文本框出来之后即可通关

第一种方法:    " onclick="alert()" type="text
第二种方法:    " onmouseout="alert(/xxx/)" type="text

②  还有一种方式是在火狐浏览器找到扩展和主题,下载hackbar v2 ,在开发者工具选择hackbar,点击referer,赋值就可以了,就不在这里演示了。


十二关

 不难发现,其实跟十一关的原理一样,上一关是输出了referer的值,这一关则是输出了

user-agent的值(包含请求的用户的指纹信息)

 还是一样修改user-agent的值,并显示出文本框,这里一样过滤掉了尖括号,方法与上关相同。

第一种方法:    " onclick="alert()" type="text
第二种方法:    " onmouseout="alert(/xxx/)" type="text

更多推荐