以下のアンケートを卒業研究の参考にしたいので回答してもらえると嬉しいです。
4問のみなのでお願いします
https://forms.gle/AWRU4r3XDshfqaX77
burp 設定
burpを使用する場合は、以下の設定を行ってから使用する。
起動
proxy設定
-
firefoxを起動する
☆1 12/12
Score Board
1. F12キー押し、Dev Toolsを開き、JavaScriptを調査する。
2. 1番上にあるmain.jsを選択する。
3. {}をクリックし読みやすい形式に直し、
5. Ctrl+Fで検索バーを出す。
6. 検索バーに"score"と入力し、score boardのページのヒントを探す。
5. "score-board"というpathを発見できるので、
7. URL(http://localhost:3000/#/score-board)に入力を試す。
6. スコアボードを発見し、チャレンジ成功!
Bonus Payload
- DOM XSSができそうな場所を探す。
- 検索欄が存在するため、ボーナスペイロードをコピーし、検索欄にコピーする。
- チャレンジ成功!
Bully Chatbot
- サポートチャットボットのページを探す。
- サイドメニューにないので、アカウントを作成しログインしてもう一度サイドメニューを確認し、サポートチャットにクリックする。
- チャットに"coupon"と何度も入力し、クーポンを入手する。
Confidential Document
-
会社概要ページを閲覧する。
-
"もしくだらないことにご興味がおありでしたら、弊サイトの退屈な利用規約をご確認ください"というリンク付きメッセージにカーソルを合わせると、http://localhost:3000/ftp/legal.md というページへのリンクだとわかる。
-
/ftpというページの存在がわかったのでhttp://localhost:3000/ftp にアクセスし、acquisitions.mdというのをクリックする
DOM XSS
Error Handling解説
-
loginページ(/login)に移動し、Develop tools(Ctrl+F12)のネットワークタブに切り替える。
Exposed Metrics
-
問題文に書かれているリンクつきメッセージ"popular monitoring system"をクリックし、一般的な監視システムを確認する。
-
リンク先のページからプロメテウスということがわかり、ドキュメントはhttps://prometheus.io/ に詳しく書かれているようなのでそのページに遷移する。
-
first stepのConfiguring Prometheセクションに/metricsがプロメテウスのスクレイピングされたページと分かる。
-
http://localhost:3000/metriccs にアクセスし、スクレイピングされた使用状況データを閲覧しチャレンジ成功!
Mass Dispel
- https://pwning.owasp-juice.shop/part2/miscellaneous.html に書かれているヒントから、https://pwning.owasp-juice.shop/part1/challenges.html のSuccess notificationsを読む。
- Success notificationsからShiftキーを押しながらとXボタンを押すと複数のチャレンジの成功通知を消すことができると書かれていることがわかる。
画像 - 成功通知を2個以上にしてから、Shiftキー+Xボタンを押し、チャレンジをクリアする。
Missing Encoding
-
ヒントからフォトウォール(/photo-wall)にアクセスする。
-
Dev Tools(F12)を開き、インスペクタータブでCtrl+Shift+Cをクリックし、問題の画像欄をクリックし、Webページに表示されているものと似ているタグを見つけることができる。
<img _ngcontent-qty-c240="" class="image" src="assets/public/images/uploads/😼-#zatschi-#whoneedsfourlegs-1572600969477.jpg" alt="😼 #zatschi #whoneedsfourlegs">
- ネットワークタブに切り替えページを再読み込みし、サーバーに送信されたリクエストを確認する。
- 3と4から原因はURLの中の2つの#にあることがわかる。ブラウザでは#がHTMLのアンカーとして解釈され、サーバーに送信されない。
- そのまま#をサーバーに渡すには、#を%23でエンコードする必要がある。4のURLをエンコードし、
http://localhost:3000/assets/public/images/uploads/😼-%23zatschi-%23whoneedsfourlegs-1572600969477.jpg にアクセスするとかわいい猫の画像を見ることができ、チャレンジが成功する。
Outdated Allowlist
-
トップページ(/)からF12キー押し、Dev Toolsを開き、main.jsを調査する。問題文からリダイレクトすることがわかっているので、'redirect'というワードで検索する。
-
3つのうちのどれかを開き、チャレンジを完了する。
例
http://localhost:3000/redirect?to=https://blockchain.info/address/1AbKfgvw9psQ41NbLi8kufDQTezwG8DRZm
Privacy Policy
- アカウントを作成とログインを行い、プロフィール写真のドロップダウンメニューを開き、[プライバシーとセキュリティ]を選択する。
- 選択後に出てくるプライバシーポリシーをクリックする。
画像 - プライバシーポリシーページにアクセスたのでチャレンジが成功する。
画像
Repetitive Registration
- ユーザ登録ページで繰り返し入力があるのは、パスワードの欄である。
- パスワードと確認用パスワード欄以外には適切なものを入力する。パスワードと確認用パスワードに同じものを入力する。
画像 - そのあとに、確認用パスワードとパスワードが一致しないように確認用パスワードの値を他のものに変更する。このときに、パスワードが一致していないがエラーが出ないことがわかる。
画像 - パスワードと確認用パスワードが一致していないまま、ユーザ登録を行い、チャレンジをクリアする。
☆2 8/12
Admin Section順番注意
-
Dev Toolsを開き、main.jsを"admin"で検索する。
-
検索結果に気になるパスを発見できるので、そのページ(http://localhost:3000/#/administration)に移動する。
-
このときadminでログインしていないとエラーが発生するため、Login Adminのチャレンジを先にクリアしてからこのチャレンジに取り組む。管理者ページにアクセスできると、チャレンジが成功する。
Deprecated Interface
- 任意のユーザでログインする。
- サイドメニューから苦情を選択し、苦情フォーム(/complain)に移動する。
- ファイルアップロードボタンをクリックし、いろいろな形式ファイルをアップロードすると、「禁止されているファイルの種類です(PDF, ZIP のみ許可されています)」というエラーが出て.pdfと.zipのみに制限されていることがわかる。
- DevTools(F12キー)を開きmain.jsからファイルアップロードの宣言を探す。zipやpdf、uploadeなどの単語で検索する。
- allowedMimeTypeにpdf・zipのほかに"application/xml","text/xml"があることがわかる。
- 苦情フォーム(/complain)に適当なメッセージを入力し、xmlファイルをアップロードして送信する。
--Five-Star Feedback
Login Admin
以下の2つの方法でログインページ(/login)からログインするとよい。
- email欄に' or 1=1--を入力し、パスワード欄には適当な文字を入力する。
- 管理者のメールアドレスを既に知っている場合は、email欄にadmin@juice-sh.op'--、password欄に適当な文字を入力しログインする。
--Login MC SafeSearch
--Meta Geo Stalking
Password Strength ページ数
- Burp suitをxxページの起動し設定を行う。
- ログインページ(/login)を開き、メールアドレス欄にadminのメールアドレスを入力し、パスワードには適当な値を入力する。adminのメールアドレスは、管理者ページ(/administration)もしくは商品のレビューから確認できる。
- burpsuiteに戻り、ProxyタブのInterceptを選択し、intercept offをクリックし、onに変える。
- ログインページに戻り、ログインボタンを押す。
- burp suiteから
Reflected XSS docker追加
- 注文履歴のトラックマークをクリックし、注文の追跡ページを閲覧する。URLはhttp://localhost:3000/#/track-result?id=5267-2a4ecad11519a10f となっていることがわかる。5267-2a4ecad11519a10fパラメーターが注文番号の1つになっている。
-
パラメータはWebの画面に表示されるため、XSS攻撃を受けやすい可能性がある。
-
<iframe src="javascript:alert(
xss
)">という攻撃になるように、 id=のあとを変えてURL(http://localhost:3000/#/track-result?id=%3Ciframe%20src%3D%22javascript:alert(%60xss%60)%22%3E)でアクセスする。
--Security Policy
View Basket
-
ログインする。
-
いくつかの製品をショッピングバスケットに入れる。
Visual Geo Stalking
-
管理者アカウントでログインし、管理者ページ(/administration)にアクセスし、エマのメールアドレスを探す。emma@juice-sh.opというメールアドレスがエマのだと推測できる。
-
パスワードを忘れた場合のページ(/forgot-password)にアクセスし、セキュリティの質問の確認すると"Compan you first work for as an adult?"となっている。
-
次にフォトウォールに移動し、ユーザが投稿した写真を見るとE=ma^2がエマの投稿と予測できるものを発見することができる。
-
これを会社名と予測してパスワードを忘れた時のページに入力し、パスワードを再発行する。
ー-Weird Crypto
☆3
API-only XSS
Admin Registration
- 管理者権限を持つ権限を作成するために、burp suiteでユーザ作成ページ(/register)からユーザ作成するときの応答を調べる。burp suiteを開き 設定する。
- ユーザ作成ページ(/register)に必要な項目に適当な値を入力し、proxyタブのInterceptから"intercept is off"ボタンをクリックし、onにする。onにしたら登録ボタンをクリックし、ユーザを登録する。
画像 - requestとresponceを見る。responceに"role"(役割という名前の)というキーを発見することができる。
画像 - どっかを右クリックし、Send to Repeaterでリクエストに"role":"admin",を追加し変更し、Sendボタンをクリックする。
画像 - juice shop のサイトに戻るとチャレンジが成功している。
--Bjoern's Favorite Pet
CAPTCHA Bypass
-
カスタマーフィードバックページ(/contact)に必要な項目を入力し、Burp Suiteを設定( )し、proxyタブのInterceptから"intercept is off"ボタンをクリックし、onにする。onにしたらカスタマーフィードバックページから提出ボタンをクリックし送信する。
-
右クリックし、Send to Intruderを選択し、リクエストに"role":"admin",を追加し変更し、Sendボタンをクリックする。
-
juice shop のサイトに戻るとチャレンジが成功している。
CSRF
- 適当なユーザでログインをする。(今回名前を変えるユーザとなる)
- 問題文のサイトにアクセスし、そこに以下のユーザ名がCSRFに変更されるhtmlを入力する。
Client-side XSS Protection
-
burp suiteでユーザ作成ページ(/register)からユーザ作成するときの応答を調べる。burp suiteを開き 設定する。
-
ユーザ作成ページ(/register)に必要な項目に適当な値を入力し、proxyタブのInterceptから"intercept is off"ボタンをクリックし、onにする。onにしたら登録ボタンをクリックし、ユーザを登録する。
-
どっかを右クリックし、Send to Repeaterでリクエストに{"email": "<iframe src="javascript:alert(
xss
)">", "password": "xss"}に変更し、Sendボタンをクリックする。
Database Schema
- SQL インジェクション試行中に見られたエラーから、SQLite が使用中のリレーショナル データベースであることがわかる。
- https://www.sqlite.org/faq.html を参照して、「(7) SQLite データベースに含まれるすべてのテーブル/インデックスを一覧表示するにはどうすればよいですか」で、スキーマがシステムテーブルsqlite_masterに格納されていることを確認する。
- Christmas Specialという☆4のチャレンジから/rest/products/searchにSQLインジェクションの影響を受けやすい部分がある。
- burp suiteを設定し、検索バーからbananaと検索する。
- 右クリックし、Send Repeaterからq=以下を編集していく。
- 以下のようなものにq=以下を変更する。空白箇所には%20をいれる。
')) UNION SELECT '1' FROM sqlite_master--number of result columns
')) UNION SELECT '1', '2' FROM sqlite_master--number of result columns
')) UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8' FROM sqlite_master-- - q=のあとを banana'))UNION%20SELECT%20sql,2,3,4,5,6,7,8,9%20FROM%20sqlite_master--にすると、DBスキーマ全体の定義を抽出できる。
--Deluxe Fraud
-Forged Feedback
-Forged Review docker追加
ー-GDPR Data Erasure
Login Amy
Login Bender
-
管理者ユーザでログインし、/administrationページからそれぞれのユーザを探すと、2人のメールアドレスamy@juice-sh.opとbender@juice-sh.opを見つけることができる。
-
メールアドレス欄にamy@juice-sh.op'--に入力し、パスワード欄に適当な文字列を入力しログインボタンをクリックしSQLインジェクションでログインする。
-
次にメールアドレス欄にbender@juice-sh.op'--に入力し、パスワード欄に適当な文字列を入力しログインボタンをクリックしSQLインジェクションでログインする。
--Login Jim
Manipulate Basket
- 適当なユーザでログインする。
- Dev Toolsを開き、商品を追加するときの応答を調べる。
- /api/BasketItems/にユーザごとに対応するBasketId、商品に対応するProductIdがあることがわかる。
画像 - BasketIdをメモしておき、別のユーザでログインする。
- /api/BasketItems/の列を右クリックし、編集して再送信を選択する。
画像 - ボディを以下に3でメモしたBasketIdを追加し、送信する。
画像
--Payback Time
--Privacy Policy Inspection
Product Tampering
--Reset Jim's Password
--Upload Size
Upload Type
- ログインする。
- サイドメニューから苦情ページ(/complain)に移動する。メッセージを適当に入力する。100kB以下のファイルの拡張子を.zipする。例:test.png.zip
- 拡張子を変更したファイルをアップロードする。
画像
4. Burp suiteを設定し、roxyタブのInterceptから"intercept is off"ボタンをクリックし、onにする。onにしたら提出ボタンから送信する。
5. ProxyタブのHTTP historyからpostの/file-uploadを選択し、確認するとファイルのアップロードを行っていることがわかる。
6. 右クリックし、Send to Repeaterでリクエストを変更する。filenameキーの.zipを削除し、Sendボタンをクリックする。
画像 - レスポンスに204 No Contentと返ってくるが、チャレンジを解決できる。
画像
XXE Data Access
- /etc/passwdを取得するxmlファイルを作成する。
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
&xxe;
画像
- ログインをして、サイドメニューから苦情ページ(/complain)に移動する。
- サイドメニューから苦情ページ(/complain)に移動する。メッセージを適当に入力し、1で作成したファイルをアップロードする。
- Burp suiteを設定し、roxyタブのInterceptから"intercept is off"ボタンをクリックし、onにする。onにしたら提出ボタンから送信する。
- レスポンスを確認すると、/etc/passwdの中身を確認できる。
☆4 14/25
--Access Log
Allowlist Bypass
- ナビゲーションバーのGitHubボタンなどのリダイレクトリンク(http://localhost:3000/redirect?to=https://github.com/bkimminich/juice-shop)から1つを選択する。
- 認識されていないURLにリダイレクトしようとすると、許可リストの検証が原因で失敗する。例えば、http://localhost:3000/redirect?to=https://www.google.com/ にアクセスすると406のエラーが発生する。
画像 - toパラメーターを削除すると( http://localhost:3000/redirect )、許可リストの動作に重大な欠陥があることを示す500エラーが発生する。
画像 - ターゲットURLに許可リストのURL'to'を含む独自のパラメータを指定するリダイレクトURLを作成する。
例: http://192.168.56.121:3000/redirect?to=https://www.google.com/https://blockchain.info/address/1AbKfgvw9psQ41NbLi8kufDQTezwG8DRZm../../../../../../
--CSP Bypass docker追加
Christmas Special
- Dev Toolsを開き、ネットワークタブに移動し、検索バーからorangeと検索する。
-
http://localhost:3000/rest/products/search?q= という製品のデータを返すリクエストを確認できる。
画像 -
http://192.168.56.122:3000/rest/products/search?q='; を送信すると、SQLエラーが発生する。
画像 - 何パターンか入力し、エラーを見てみる。
- '--を入力するとかっこの数が足りないということがわかる。
- '))--を入力すると、構文が修正されてすべての製品を見ることができる。その中にChristmas Super-Surprise-Box (2014 Edition)という製品が存在するので、idをメモしておく。
画像 - 適当なユーザでログインする。
- 適当な商品をカートに入れると、http://localhost:3000/api/BasketItems というリクエストを確認できる。
- リクエストを右クリックし、再編集して送信をクリックする。ProductIdを先ほどメモした10に変更して送信する。
- カートに移動し、商品が追加されていることを確認する。そのあと、購入するとチャレンジクリアとなる。
Easter Egg
- 今までの課題を解いている中で/ftpの中にイースターエッグファイルがあったことを思い出す。
- /ftpのeastere.ggにアクセスすると閲覧できない。
- ヌルバイト攻撃を用いて、http://localhost:3000/ftp/eastere.gg%2500.md でアクセスするとダウンロードができる。
Ephemeral Accountant
- ログインページ/loginに移動し、DevTools のネットワーク タブを観察しながら、電子メール 'と任意のパスワードでログインしてみる。
- エラーから、ログインの SQL クエリに気付くことができる。
"sql": "SELECT * FROM Users WHERE email = ''' AND password = '339df5aeae5bc6ae557491e02619c5dd' AND deletedAt IS NULL" - ☆3のDatabase SchemaからUsersを抽出する。
- ログインページのemailに以下のSQL文を入力し、パスワードには適当なものを入力する。
' UNION SELECT * FROM (SELECT 15 as 'id', '' as 'username', 'acc0unt4nt@juice-sh.op' as 'email', '12345' as 'password', 'accounting' as 'role', '123' as 'deluxeToken', '1.2.3.4' as 'lastLoginIp' , '/assets/public/images/uploads/default.svg' as 'profileImage', '' as 'totpSecret', 1 as 'isActive', '1999-08-16 14:14:41.644 +00:00' as 'createdAt', '1999-08-16 14:33:41.930 +00:00' as 'updatedAt', null as 'deletedAt')--
--Expired Coupon
Forgotten Developer Backup
- http://localhost:3000/ftp にアクセスする。
- http://localhost:3000/ftp/package.json.bak を直接開くと、ファイルの種類が不正であるというエラーが表示されて失敗する。
- ヌルバイト攻撃で%00では、アクセスの成功はできない。
- %文字をURLエンコードし、%25にする。
- http://localhost:3000/ftp/package.json.bak%2500.md とURLに入力し、チャレンジを解決する
Forgotten Sales Backup
- ☆4のForgotten Developer Backupと同じように、ヌルバイト攻撃で http://localhost:3000/ftp/coupons_2013.md.bak%2500.md のようにするとチャレンジが解決する。
--GDPR Data Theft
--HTTP-Header XSS docker追加
--Leaked Unsafe Product
Legacy Typosquatting
- ☆4のForgotten Developer Backupチャレンジを解決し 、package.json.bakファイルを開く
- リスト内を調査する。例えばdependencies内のbody-parserを調べると画像のような結果がでる。
- 同様に調査するとepilogue-jsに"THIS IS NOT THE MODULE YOU ARE LOOKING FOR!"とでてくる。
- フィードバックページ(/content)のコメント欄にepilogue-jsと入力し、ショップに知らせる。
--Login Bjoern
--Misplaced Signature File
Nested Easter Egg
NoSQL DoS
- ログインしてから、DevToolsのネットワークタブを開き、レビューを書いて送信する。
- POSTをみると、/rest/products/{id}/reviewsがある。右クリックし、以下のように変更する。
http://localhost:3000/rest/products/sleep(99999)/reviews - sleep(integer ms)コマンドを挿入し、チャレンジを解決する。実際のサービス拒否 (DoS) 問題を回避するために、ジュース ショップは最大 2 秒しか待機しない。
NoSQL Manipulation
Poison Null Byte
Easter Egg・Forgotten Developer Backup・Forgotten Sales Backupなどのチャレンジをクリアするときにヌルバイト攻撃を使用する。
そのときにこのチャレンジがクリアされる。
--Reset Bender's Password
--Reset Uvogin's Password
Server-side XSS Protection
- /ftpから閲覧できるpackage.json.bakから"sanitize-html": "1.4.2"というのを確認できる。
- 1.4.2にはXSSの脆弱性が報告されている。この脆弱性は、1.4.3で修正されている。
- /xontentのコメント欄に<iframe src="javascript:alert(`xss`)">と入力する。
- 評価を選択し、送信する。
- /aboutにアクセスするとXSSのアラートを確認できる。
- また、/administrationからも確認できる。
--Steganography
User Credentials
- Christmas Specialから/rest/products/search?q= がSQLインジェクションの影響を受けやすいことがわかっている。
- q=のあとに様々なパターンのSQL文を入力し、試す。このときDevToolsのネットワークタブに切り替え、結果を待つ。
例:')) UNION SELECT * FROM x--
')) UNION SELECT '1' FROM Users--number of result columns
')) UNION SELECT '1', '2' FROM Users--number of result columns
')) UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8' FROM Users-- - ')) UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8', '9' FROM Users-- では、要素を追加した JSON 応答が返される。
- 最後の手順は、固定値を正しい列名に置き換える。それらを推測するか、 RESTful API の結果から導き出すか、ログインフォームを攻撃しているときに以前に確認された SQL エラーからそれらを思い出す。
- qwert')) UNION SELECT id, email, password, '4', '5', '6', '7', '8', '9' FROM Users-- では、すべてのユーザデータリストを入手できる。
Vulnerable Library
- /ftpのpackage.json.bakからぜい弱性を見つける。
- sanitize-html: HTML 文字列のサニタイズが入力に再帰的に適用されないため、攻撃者がスクリプトやその他のマークアップを挿入できる可能性がありる。 ( https://github.com/advisories/GHSA-3j7m-hmh3-9jmp を参照)。
express-jwt: 依存関係から JWT 検証バイパスおよびその他の脆弱性を継承する ( https://github.com/advisories/GHSA-c7hr-j4mj-j2w6 を参照)。 - /contactページからコメントにsanitize-html1.4.2 もしくはexpress-jwt0.1.3を入力し、送信する。