\r\n
\r\n \r\n \r\n
\r\n \r\n\r\n=\r\n```\r\n\r\n\r\n### 試したこと\r\n今回初めてjsonのリクエストに対して罠HTMLを作成したので、jsonだと不要なイコールが出力されてしまうのかと調べたところ、\r\n以下のような記事を見つけました。\r\nhttps://medium.com/@pig.wig45/json-csrf-attack-on-a-social-networking-site-hackerone-platform-3d7aed3239b0\r\n\r\n翻訳して読んでみましたが、原因や対策方法がよくわかりませんでした。\r\n他のjsonリクエストに対しても罠HTMLを作成して見たのですが、イコールは出力されませんでした。\r\n一度出力されたリクエストに対して、もう一度罠HTMLを作成すると、イコールは出力されませんでした。\r\n\r\n\r\n### 補足情報(FW/ツールのバージョンなど)\r\n\r\nBurpSuiteのバージョン\r\nBurpSuite pro v2021.8.3","answerCount":1,"upvoteCount":0,"datePublished":"2021-09-21T12:00:00.199Z","dateModified":"2021-09-21T12:00:52.529Z","acceptedAnswer":{"@type":"Answer","text":"このイコール記号は明らかに不要なのでBurpSuiteのバグではないですかね。\r\nmediumの記事は、まったく別の内容だと思います。これはこれで面白い記事ですが。\r\n\r\nご提示いただいてるBurpSuiteのPoCだと、送信されるリクエストボディは下記となりますが、\r\n\r\n```\r\n{\"name\":\"test\",\"email;:\"test%40.com\"}=\r\n```\r\n\r\n以下の3点が原因で攻撃は刺さらないでしょう。\r\n\r\n- emailの後の「;:」の箇所がJSONの文法違反(コピペミス?)\r\n- メールアドレスの@がパーセントエンコードされているが、JSONの場合パーセントエンコードは不要\r\n- JSONデータの後に余計な=記号がつく\r\n\r\nこのうち、余計な=記号を避けるためにinput要素を以下のようにすればよいというのがmediumの記事の趣旨です。\r\n\r\n```\r\n \r\n```\r\n\r\nこの場合のリクエストボディは下記となります。\r\n\r\n```\r\n{\"name\":\"test\",\"email\":\"test@example.com\",\"dummy\":\"=\"}\r\n```\r\n\r\nこうすると、JSONの文法違反は回避できる代わりに、項目dummy要素が加わります。通常JSONに余計な項目があっても単に無視されるので攻撃は成立する場合が多い、ということでしょう。\r\n\r\nなお、enctype=\"text/plain\"のformを使う代わりに、XMLHttpRequestを使う方法もあります。自著で恐縮ですが、下記の本の「4.16.5 Web APIのクロスサイト・リクエストフォージェリ / ◆クロスオリジン対応のXMLHttpRequestによる攻撃(シンプルなリクエスト)」という項に詳しく書いてあります。この方法だと、ダミー項目を置く必要はありません。\r\n\r\n[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版](https://www.amazon.co.jp/dp/4797393165/)\r\n\r\nそれでは、脆弱性診断がんばってください。","dateModified":"2021-09-21T13:18:54.656Z","datePublished":"2021-09-21T13:15:57.363Z","upvoteCount":1,"url":"https://teratail.com/questions/360660#reply-491432"},"suggestedAnswer":[],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/JSON","name":"JSONに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/360660","name":"BurpSuiteの罠HTML作成時に不要なイコールが出力される。"}}]}}}
質問するログイン新規登録

Q&A

解決済

1回答

2612閲覧

BurpSuiteの罠HTML作成時に不要なイコールが出力される。

oriba

総合スコア1

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/09/21 12:00

編集2021/09/21 12:00

0

1

前提・実現したいこと

脆弱性診断ツールのBurpSuiteを使用しています。
CSRFの診断でBurpSuiteのGenerate CSRF PoCから罠HTMLを作成時に不要な=(イコール)が出力されてしまう時があります。
出力される時とされない時があり、原因が分からないため、質問させて頂きました。

発生している問題・エラーメッセージ

以下のようなリクエストに対して罠HTMLを作成します。
※リクエストヘッダは省略しています。

POST ~省略~ HTTP/1.1 〜省略〜 { "name":"test", "email":"test@test.com" }

作成された罠HTMLは以下のようになります。
一番最後の行に=(イコール)が出力されます。

<html> <body> <script>history.pushState('', '', '/')</script> <form action="http://~省略~" method="POST" enctype="text/plain"> <input type="hidden" name="&#123;&quot;name&quot;&#58;&quot;test&quot;&#44;&quot;email;&#58;&quot;test%40.com&quot;&#125;" value="" /> <input type="submit" value="Submit request" /> </form> </body> </html> =

試したこと

今回初めてjsonのリクエストに対して罠HTMLを作成したので、jsonだと不要なイコールが出力されてしまうのかと調べたところ、
以下のような記事を見つけました。
https://medium.com/@pig.wig45/json-csrf-attack-on-a-social-networking-site-hackerone-platform-3d7aed3239b0

翻訳して読んでみましたが、原因や対策方法がよくわかりませんでした。
他のjsonリクエストに対しても罠HTMLを作成して見たのですが、イコールは出力されませんでした。
一度出力されたリクエストに対して、もう一度罠HTMLを作成すると、イコールは出力されませんでした。

補足情報(FW/ツールのバージョンなど)

BurpSuiteのバージョン
BurpSuite pro v2021.8.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このイコール記号は明らかに不要なのでBurpSuiteのバグではないですかね。
mediumの記事は、まったく別の内容だと思います。これはこれで面白い記事ですが。

ご提示いただいてるBurpSuiteのPoCだと、送信されるリクエストボディは下記となりますが、

{"name":"test","email;:"test%40.com"}=

以下の3点が原因で攻撃は刺さらないでしょう。

  • emailの後の「;:」の箇所がJSONの文法違反(コピペミス?)
  • メールアドレスの@がパーセントエンコードされているが、JSONの場合パーセントエンコードは不要
  • JSONデータの後に余計な=記号がつく

このうち、余計な=記号を避けるためにinput要素を以下のようにすればよいというのがmediumの記事の趣旨です。

<input type="hidden" name='{"name":"test","email":"test@example.com","dummy":"' value='"}' />

この場合のリクエストボディは下記となります。

{"name":"test","email":"test@example.com","dummy":"="}

こうすると、JSONの文法違反は回避できる代わりに、項目dummy要素が加わります。通常JSONに余計な項目があっても単に無視されるので攻撃は成立する場合が多い、ということでしょう。

なお、enctype="text/plain"のformを使う代わりに、XMLHttpRequestを使う方法もあります。自著で恐縮ですが、下記の本の「4.16.5 Web APIのクロスサイト・リクエストフォージェリ / ◆クロスオリジン対応のXMLHttpRequestによる攻撃(シンプルなリクエスト)」という項に詳しく書いてあります。この方法だと、ダミー項目を置く必要はありません。

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版

それでは、脆弱性診断がんばってください。

投稿2021/09/21 13:15

編集2021/09/21 13:18
ockeghem

総合スコア11710

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oriba

2021/09/21 13:46

ご親切に丁寧に解説頂きありがとうございます! 理解することができました! まさか脆弱性診断のプロ中のプロの方から回答頂けるとは、夢にも思っておりませんでした。 体型的に学ぶ安全なWebアプリケーションの作り方は初版と第2版も読んでおりました。 今一度、読み直し診断に望みます。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問