Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
おわり