気軽に脆弱性を見つけてみよう！

ハイ！どうも皆さん、おはよう！こんにちは！こんばんは！
この季節がやってまいりましたね、[シーエー・アドバンス Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ca-advance)
17日目を担当します、@ihahajimeです。宜しくお願いします！！
シーエーアドバンスに入社しセキュリティのお仕事を始めて1年と2か月くらい、まだまだ修行中です。


# はじめに
今回は、自分の経験から**ブラックボックス視点で脆弱性をチェックしてみよう！**という内容となっています。
前職でブラックボックスのソフトウェアテスト[^1]をしていた経験と、今やっている脆弱性診断の経験を掛け合わせて、もっと簡単に脆弱性診断を紹介できればな！と思っています。
フランクな感じでサクッと読んでいただければ幸いです。Take it easy!:santa_tone3:


# そもそも脆弱性診断とは
皆さん**脆弱性診断（ゼイジャクセイシンダン）**ってご存じでしょうか？
だじゃくせい？きょじゃくせい？何それおいしいの？って方も、
剛腕セキュリティエンジニアの方も、
天下無双のWebアプリケーションエンジニアの方も、
様々いらっしゃるかと思いますので、簡単に説明しますと...

**Webアプリケーションやスマートフォンアプリに対し、攻撃者の視点から様々な疑似攻撃を考察・試行することで、潜在的な脆弱性を発見し、安全性を調査する。**

ということですね！つまりセキュリティ的にヤバい箇所がないかチェックするという感じです:closed_lock_with_key:

今回は、そんな脆弱性診断を、ツールとかも特に使わずに確認してみましょう！
この値を入力して結果こうなりました、こういう結果が返ってきてます。だけでも確認できれば問題ないです！


# さっそく見ていきましょう！
世の中に脆弱性の種類はたくさんあるので、今回は有名どころ
で説明がしやすいもの
を紹介させていただきます。

### その１　SQLインジェクション（SQLi）
最初はSQLインジェクションです。SQLiと略されたりしますね。
下のようなログイン画面があります。
まず試しに```''```シングルクォートを2つ入力してログインしてみてください。
<img width="301" alt="SQLi_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299842/a644dc07-cfe5-c433-fc0a-6687325b588d.png">
上のように、よく見る<font color=red>`Invalid email or password.`</font>のメッセージが出てますね

続いてシングルクォートを一つ消して、```'```シングルクォート1つでログインしてみます。
すると...
<img width="294" alt="SQLi_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299842/7c3072a5-c20e-4869-931b-4610f2860c5e.png">
`Invalid email or password.`と出るかと思いきや、`[object Object]`というなんかよくわからないメッセージが...
これはおそらく、**シングルクォートの数でログイン時のSQL構文が壊れてしまい、なんかよくわからんメッセージが表示されている。**ということがわかります。
<font color=red>アウトですね</font>:no_good:


### その２　クロスサイトスクリプティング（XSS）
続いては、クロスサイトスクリプティングです、XSSとも略されたりしますね。
<img width="960" alt="XSS_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299842/b2b4e7bb-8dbc-ba6b-f3d5-71fe0b3828af.png">
上の画像が、正常に`Apple`と検索を行った状態です。
<img width="960" alt="XSS_4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299842/752f6057-a3b2-fbf9-531f-7be91bb3fd4b.png">
画像のように、`"'>`と`HTMLのsタグ`をつけて、検索してみましょう。
すると...
<img width="960" alt="XSS_5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299842/581c1b53-f796-c904-8eca-03339aedbb87.png">
検索ワードの`Apple`の部分でHTMLタグが有効になって表示されていますね。
**HTMLタグが効いている状態となっていますので、HTMLタグを色々利用して悪用される恐れがあります。**
<font color=red>アウトですね</font>:no_good:

上記２つの脆弱性に関しての詳細な説明は、参考情報欄にリンクを貼っておきますので、よければ参考にしてください。
他にもCSRFやOSコマンドインジェクションなど色々な脆弱性があります:frowning2:

# 環境
今回はOWASP Juice Shopという環境で確認しました:tropical_drink:
OWASP Juice Shopはdockerで気軽に用意できる脆弱性が確認できる環境となっていますので、皆さんぜひ試してみてくださいね！
（:point_right_tone2:もちろん自分で作ったサイトとかでも全然OKです！※<font color=red>自己責任</font>でお願いします:point_left_tone2:）

dockerを起動し下記コマンドを実行。

```docker:
docker pull bkimminich/juice-shop
docker run --rm -p 3000:3000 bkimminich/juice-shop
```

あとは```http://{自分のIP}:3000/```にアクセスすればOKです。

```OWASP Juice Shop```で検索すれば導入方法でてきます。たくさんあります。
幅広い難易度で課題等も用意されているので、挑戦してみてはどうでしょうか:santa:


# 参考情報
[OWASP TOP 10 2017](https://www.owasp.org/images/2/23/OWASP_Top_10-2017%28ja%29.pdf)
[OWASP Juice Shop](https://www2.owasp.org/www-project-juice-shop/)

SQLインジェクション（SQLi）とは
https://www.nic.ad.jp/ja/basics/terms/sql-injection.html

クロスサイトスクリプティング（XSS）とは
https://www.nic.ad.jp/ja/basics/terms/xss.html



# まとめ
記事を書く経験がほとんど無いので、至らない箇所あれば容赦なく指摘していただければ嬉しいです。
まだまだ脆弱性はたくさんありますので、内容がまとまり次第また記事を書いていけたらと思います。
脆弱性の確認って意外と簡単にできちゃうもんなんですよ！

最後までありがとうございました。
それでは次の記事でまた！良いお年を！→See you next time→:wave_tone2:

[^1]: 余談ですが、「テストを実行する」ことは、ソフトウェアに存在する欠陥に起因する故障を見つけることで、「デバッグ」は、故障の基となる欠陥を見つけて、解析し、取り除く一連の開発の活動である。よくある「バグを見つけて報告するだけ♪」とかの言い方はデバッグではなくテストになります。JSTQB FLのシラバスにも記載されています。まー例外もありますが...