2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tryhackmeのOWASP Juice shopでセキュリティを学ぶ

Last updated at Posted at 2025-05-30

owasp juice shopとは?

owaspとはどういう団体かを調べてみました。

image.png

(引用)

このowaspが提供している、脆弱性があるやられサイトがowasp juice shopです。
これを実際に攻撃してみて、webセキュリティを学ぼう、という趣旨のものみたいです。

利用方法

owasp juice shop自体はさまざまな方法で遊べるらしいのですが、
今回はtryhackmeというセキュリティが学べるサービスがあるのでこれを使いました。
tryhackmeはさまざまなコースが提供されていて、いろいろな攻撃手法を学べるらしいです。
サブスク登録しないとできないコースもありましたが、owasp juice shopは無料で遊べます。

はじめ方(openvpn接続)

tryhackmeでは他の環境に迷惑かけないようにopenvpnでtryhackme側と接続する必要があるらしいので接続してみました。

image.png

configファイルをダウンロードして、

sudo openvpn --config <username>.ovpn

で簡単に接続できました。

openvpn自体はmacを使っているのでbrewでとってきました。

やられサイトを立ち上げる

image.png

owasp juice shopのルームに参加して、start machineを押して1分程度で専用のipが払い出されました。
どうやら1時間限定で自分専用のインスタンスが立つみたいです。
add 1 hourというボタンがあったので押してみたら、期限を伸ばせました。
延長自体は無料でできるみたいです。

openvpnにつないだ状態でアクセスしてみると無事サイトを見ることができるようになりました!

image.png

タスクが用意されていたのでタスクに沿って進めていくことにしました。

image.png

Task1

やられサイトを立ち上げましょうというチュートリアル的なものだったので終わっていました。

Task2

サイト内を探索すれば見つかるadminのメールアドレスとかを探すタスクでした。
あまり紹介することもないので省略します。

Tasks3

Question #1: Log into the administrator account!

Task2で見つけたadminのメールアドレスを使ってadminでログインしてみましょう、というもの。
タスクにSQLインジェクションを使いましょう!とかいてくれていたので、素直にやったらログインできてしまった

image.png

これはユーザーを引っ張ってくるSQL文が

SELECT * FROM Users WHERE email = '<email>' and paddword = '<password>'

となっているときに上のように入力すると

SELECT * FROM Users WHERE email = 'admin@juice-sh.op'--' and paddword = '<password>'

となって、passwordの入力がコメントアウトされて実行されてしまうのを利用した手法ですね。

Question #2: Log into the Bender account!

↑と全く同じようにしてログインできました。

Task4

Question #1: Bruteforce the Administrator account's password!

adminのパスワードを総当たり攻撃しよう!というものです。
まずはリクエストフォーマットを見てみました。

image.png

このbodyのpasswordフィールドで含めているパスワードを変えてリクエストを投げ続ければ良さそうです。
タスクの中に便利なツールとして、burp suiteというものが紹介されていたので使ってみました。

image.png

これを使うと↑のようにPayload configurationに設定した辞書で総当たりリクエストしてくれるみたいです。

image.png

↑パスワードが違うので401が帰ってきていますね。

辞書はSecListsというものを使いました。

そして10分ほど待っていたらstatusCodeが200が返ってくるものがきました!
ウキウキでパスワードを見てみるとadmin123という何とも弱々しいパスワードだということがわかりました...

Task5

Question #1: Access the Confidential Document!

/aboutから踏める/ftp/legal.md で利用規約がマークダウンファイルそのまま公開されています。
さらに、/ftpも公開されてしまっていて、これをふむと色々なデータを確認することができてしまいます。

image.png

acquisitions.mdを取得したらフラグがもらえました。

Question #3: Download the Backup file!

package.json.bakがあることが確認できるので、これをダウンロードしたいです。
そのままクリックすると↓の画面になってしまいます。
どうやら.mdファイルか.pdfファイルしかダウンロードできない設定らしいです

image.png

しかし、これはpoison null byteという手法を使って
/ftp/package.json.bak%2500.md
をgetすることで入手可能でした。

nullbyte攻撃は
文字列処理でnull byte(\0)が文字列の終わりを意味してその後ろの文字列を切り捨てることを利用したものです。

  • クライアントサイドでpackage.json.bak%2500.mdをサーバーにリクエストするとデコードされて、package.json.bak%00.mdとなる。
  • その後、URLのデコード処理を走らせるとpackage.json.bak\0.mdとなる。

webサーバー側でURLのデコードしてくれているのにプログラムでもデコード処理をしてしまっている時にプログラム内で.pdfと.md以外は弾く、みたいな処理をしていると、
そのフィルタ段階ではpackage.json.bak%00.mdをみてOKになって、
ファイル読み込み部ではヌルバイト以降が切り捨てられ package.json.bak がダウンロードできるようになってしまう

みたいな挙動(のはずです)

無事ダウンロードできて、フラグが取得できました。


今回はここまでタスクが完了しました。

余談

自分が進められたところまでのタスクにはまだ出てきていなかったが興味本位でXSSしてみたらできてフラグがもらえました。

image.png

どんなパスがあるかを調べるためにdirbコマンドで見ようとしたらなんかフラグが2個もらえました(なぜもらえたかよくわかってないです)

image.png

感想・おわりに

今回は少ししか時間がとれなかったので初歩の初歩しかできなかったがowasp juice shopにはまだまだ先はあるので引き続きやっていきたいと思っています
web開発をする以上、セキュリティはついて回るものなので、セキュリティについて理解し、開発で活かしていきたいです

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?