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

More than 3 years have passed since last update.

posted at

updated at

Organization

俺的MarkdownにおけるXSS

はじめに

Markdown便利ですよね。QiitaやGutHubなど主要なサービスでは主にMarkdownを使って記事の投稿だったり、中~長文を投稿するときにはよく使われていますよね

でもユーザーにWebページに投稿するときに気をつけないといけないのはXSS

インターンシップなどで学生が作ったサイトとかだと大体6割はXSSできちゃいます。(とか言う自分も学生なんですけどね!)

ここでは私個人が経験したXSSについて色々紹介したいと思います。

追記
書いてて思ったけど、Markdownあんまり関係ないです。

いってみよぉ!

HTML編

まず最初はこちら!

XSS.Markdown
<iframe srcdoc="<script>alert('XSS');</script>"></iframe>

メディア系の要素が使えてしまうパターン。
なんと言うか、これが使える場合は大体入力をそのまま何もエスケープせずに出力しているパターンが多いです。

ちなみにこういうパターンもあります。属性内部の文字列「<」や「>」だけがエスケープされていても下記のようにBase64でエスケープされずに通る場合もあります。

XSS.Markdown
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk7PC9zY3JpcHQ+">

他にもvideo要素だったりaudio要素などもエスケープしましょう。
あずにゃんのキャラソンが勝手に再生されたりしちゃいます。

次はちょっと変わって装飾系要素について

Markdownを書いてて文字を太くしたりするときありますよね
そのときに出てくるのが<b>Hoge</b>要素ですね
これも実はXSSできるんです。

XSS.Markdown
<b onmousemove="alert('XSS')">XSS!</b>

マウスをXSSという文字列に持っていくとJavascriptが実行されます。

わざわざ文字列の場所にマウスを持っていかないといけないと、限定的だと思われますが、こういう場合は大体style属性も使えてしまうのでこうすれば画面のどこかにマウスを持っていけば実行されちゃったりするんです。

XSS.Markdown
<b onmousemove="alert('XSS')" style="padding: 10000px;margin: -10000px;">XSS</b>

また、<b nomouseとbとnの間の空白があるので空白をエスケープしても下記の方法で実行できる場合もあります。

XSS.Markdown
<b/onmousemove="alert('XSS')">XSS!</b>

Markdown編

Markdownの脆弱性はコード関係に多い印象です。

これは挙動がMarkdownの実装によって異なってきます。
実際にできたパターンを紹介したいと思います。
xss.png

HTMLではどのような挙動になっているかと言うと

XSS.html
<code lang="py" onmousemove='alert("XSS")'>
print(0)
</code>

こんな感じでXSSできちゃいます
(Qiitaにもその昔あったとか・・・?)

コピペでできる脆弱性診断

便利な奴があるので貼っときますね。
とはいえ簡易的なものなので過信はしないようにおねがいします

';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";
alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--
></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

XSS フィルター回避チートシートより

XSSについてもっと知りたい!

こちらのチートシートをよく見ると良いと思います。

XSS フィルター回避チートシート

「Markdown XSS」
「Qiita XSS」
などで検索すると色々出てきて面白いです。

とりあえず、自分が最近できたXSSを羅列しました。Markdownを実装するときは意識していきましょう。

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
17
Help us understand the problem. What are the problem?