Slide 1

Slide 1 text

OWASP JUICE SHOPで学ぶ 脆弱性(診断) えるもあ

Slide 2

Slide 2 text

お前だれよ なまえ : えるもあ しごと : よくわからない何か ねんれい : 26歳 ついったー : @elmore_mk2 2

Slide 3

Slide 3 text

今日はなすこと 3 脆弱性(Web) OWASP JUICE SHOP

Slide 4

Slide 4 text

1. 脆弱性(Web) コンピュータのOSやソフトウェアにおいて、プログラムの不具合や設計上のミスが原 因となって発生した情報セキュリティ上の欠陥のこと 出典:http://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/risk/11.html 4

Slide 5

Slide 5 text

Webにはどんな脆弱性が潜んでいる? ◈ SQLインジェクション ◈ クロスサイトスクリプティング ◆ XSS ◈ クロスサイトリクエストフォージェリ ◆ CSRF 「IPAのウェブ健康診断仕様」には他に10項目記載されている 5

Slide 6

Slide 6 text

2. OWASP The Open Web Application Security Project Webセキュリティなどをよりセキュアにするために情報共有などをするコミュニティ 6

Slide 7

Slide 7 text

OWASPってなに? ◈ 世界規模 ◈ OWASP Top 10 ◈ Mobile、IoTのプロジェクトもある ◈ OWASP Japan、Kansai etc. 7

Slide 8

Slide 8 text

OWASP Top 10を見てみよう 8 出典:https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

Slide 9

Slide 9 text

3. JUICE SHOP OWASP Projectの1つ OWASP Top 10をほぼ網羅した脆弱性のあるアプリケーション 9

Slide 10

Slide 10 text

OWASP JUICE SHOPを始めよう ◈ CTF形式やチャレンジ形式で脆弱性を学べ る ◈ SPA ◆ 既存のvictimアプリはサーバーレンダリン グがほとんど ◈ インストールも簡単(Dockerなら3分未満) 10

Slide 11

Slide 11 text

OWASP JUICE SHOPの構成 11

Slide 12

Slide 12 text

SQLインジェクションを見つけよう ◈ そもそもSQLインジェクションって ◆ アプリが想定してないSQL文を発行させ る 12 For Example user_id = "hoge" # ユーザからの入力値 sql = "select * from users where user_id = '" + user_id + "'" SPAなのにSQLインジェクションの話なのは許してヒヤシンス

Slide 13

Slide 13 text

SQLインジェクションを見つけよう 13

Slide 14

Slide 14 text

SQLインジェクションを見つけよう 14 商品検索できる ->DBからデータ 引っ張ってきて る??

Slide 15

Slide 15 text

SQLインジェクションを見つけよう 15 「apple'」で検索 ->構文が崩れるか 確認

Slide 16

Slide 16 text

SQLインジェクションを見つけよう 16 何も表示されな い。。。

Slide 17

Slide 17 text

SQLインジェクションを見つけよう 17 ◈ どんなHTTPレスポンスが返ってきたのか確 認したい ◆ ローカルプロキシを使おう! ◆ 今回はBurp Proxy

Slide 18

Slide 18 text

SQLインジェクションを見つけよう 18 ◈ 実際に見てみる

Slide 19

Slide 19 text

SQLインジェクションを見つけよう 19 なんかエラーとおいしそうな情報が "message": "SQLITE_ERROR: near \"'%'\": syntax error" "sql": "SELECT * FROM Products WHERE ((name LIKE '%apple'%' OR description LIKE '%apple'%') AND deletedAt IS NULL) ORDER BY name" SQLインジェクションの脆弱性がありそう

Slide 20

Slide 20 text

SQLインジェクションを見つけよう 20 ◈ 文字列結合してみる 通常検索時と同じ結果に -> SQLインジェクション脆弱 性あり!

Slide 21

Slide 21 text

SQLインジェクションしてみよう 21 ◈ ちょっと悪いことを考える ◆ 他のテーブルからデータを取りたい ◆ 使ってるDBはSQLite ◇ SQLiteはsqlite_masterテーブルから テーブル構造を取得してみる

Slide 22

Slide 22 text

SQLインジェクションしてみよう 22 HTTPレスポンスに取得データが返ってくるので、 UNIONでテーブル同士をくっつける sqlite_masterからデータの取得を試みる

Slide 23

Slide 23 text

SQLインジェクションしてみよう 23 juice')) union select NULL, sql,NULL,NULL, NULL,NULL,NULL,NULL from sqlite_master; -- カラム数を合わせる必要があるので、NULLで調整 sqlite_masterからデータを取得する

Slide 24

Slide 24 text

SQLインジェクションしてみよう 24

Slide 25

Slide 25 text

SQLインジェクションをしてみよう 25 BasketItemsテーブルの構造が取れた ユーザー情報持ってそうなテーブルを探してみる juice')) union select NULL, sql,NULL,NULL, NULL,NULL,NULL,NULL from sqlite_master LIMIT 1 OFFSET 10; -- OFFSETでとってくるデータを調整

Slide 26

Slide 26 text

SQLインジェクションをしてみよう 26 Usersテーブルの構造が取れた

Slide 27

Slide 27 text

SQLインジェクションをしてみよう 27 取れた構造をもとにユーザー一覧を取得

Slide 28

Slide 28 text

SQLインジェクションをしてみよう 28 ユーザのリスティングができた!

Slide 29

Slide 29 text

SQLインジェクションをしてみよう 29 ユーザのリスティングができた!

Slide 30

Slide 30 text

SQLインジェクションをしてみよう 30 パスワードはハッシュ化されているが、、、

Slide 31

Slide 31 text

SQLインジェクションをしてみよう 31 世の中には単純なハッシュ値を検索できるさいと があるので、、、

Slide 32

Slide 32 text

SQLインジェクションをしてみよう 32 取得できた情報をもとにログインしてみる

Slide 33

Slide 33 text

SQLインジェクションをしてみよう 33 ログインできた!!

Slide 34

Slide 34 text

SQLインジェクションをしてみよう 34 他人の認証情報を窃取できた!

Slide 35

Slide 35 text

注意 35 自身が管理しているもの、許可があるもの以外に はやってはいけないよ!!!

Slide 36

Slide 36 text

ほかのVictimアプリ ◈ OWASP WebGoat ◈ OWASP NodeGoat ◈ OWASP Broken Web Application etc. 36

Slide 37

Slide 37 text

おわり