注意: この記事はハッカーが主人公の物語から抜粋した一部である。

これだからWebは最高だ

はい、なんていうんでしょうかね、Webアプリケーションのペネトレーションテストができるめっちゃ便利なツールを見つけてしまったんです。まあ、これを見つけたきっかけは、あるサイトのAPIフォーマットを特定したかったっていうことなんですけど、いかんせん最近のサイトはSSLで暗号化されているからWireshark等のNICでパケットをキャプチャするツールじゃあ中身は解析できないんですよね。そこで見つけたのが、ZAP、通称man-in-the-middle-proxyってい神ツールです。クライアントとサーバの間に立って動作するこのツールは、まあプロキシとして働いてくれて、SSLの内容を見放題。その他にも便利な機能がたくさんついている。まじで神!!

zapのインストール

zapはjava上で動く。Ghidraといい、すごいツールはなんかJavaで書かれているんだけど、その理由は何だろう。まあいいや。まずはJavaをインストールする。11+がいい。

sudo apt install default-jre
sudo apt install default-jdk

その次、 ZAPの公式からinstallerを持ってきてあとは、シェルスクリプトを走らせるだけ。

ZAPの使い方

基本的にはWebブラウザでアクセス可能なページの診断だったり脆弱性のチェックに使う。で、完全に自動化された脆弱性診断のAutomated scanっていうのと、ブラウザを普通にいじっているみたいに自分で脆弱性を見つけるManual scanっていうのがある。 気をつけてほしいのが、scanをするともう攻撃とみなされても仕方がない、ということ。 しかし、モードを選べて、safe modeっていうのを選択すると、攻撃とみなされないかも。わからん。

Automated Scan

これは、ターゲットとなるサイトのディレクトリ構造をクローリングして各ページに対して、脆弱性チェックのリポートを出してくれるツールになっている。うん、結構便利だと思う。

manual scan

これがこのツールの真骨頂だと思う。HUDっていう、新しい機能なんだけど。HUDの説明簡単に下に書いておくか。

The HUD is a completely new way to interact with ZAP.
It overlays security information on top of the application you are testing and allows you to access key ZAP features.
It is easier for people new to security to understand but it also allows experienced penetration testers to focus on the application they are testing.
By default, the HUD is injected into all of the HTML pages proxied through the ZAP desktop. You can turn it on and off easily using the [green radar] button on the ZAP toolbar. It is not injected by default into pages proxied through ZAP when it is running in headless/daemon mode as that could break unit tests. This behaviour can be changed via the HUD options.

まずは、各ページ、さらに今まで訪れたページ (そのサイトの)に対して、脆弱性のレポートを出してくれるってところは前と同じ。だが、ここからがすごい。まじで。httpとwebsocketのリクエストの内容が全部見られるってところ。これはやばくないか???やばいね。 さらに、変更が許されていないフォームを変更したり、リクエストを送るときにリクエストの内容を書き換えたり、リクエストをpendingしたりできる。これはやばい。見放題だね。ちょっと怖いね。今日の夜が楽しみすぎるって話なんだわ。ちょっとできることまとめるわ。

HUD Framesの出し方/隠し方

[green radar]を押すことで出したり隠したりできる。

Alert Notifications

ページを見ていって、各ページでの脆弱性を自動でリポートしてくれる。これ便利だねー。

History

The History tab shows all of the requests that have been made by your browser since you opened this page. These can be requests for resources like images or JavaScript files, or they can be API requests.

If new pages are requested after the page loads then the tab will show a count of these requests - if you see that keeps going up then that will probably indicate that the page is making a series of API requests.

Enable Fields

However, if you click on the [lightbulb (off)] 'Show / Enable' tool then the icon will change to [lightbulb (on)] and you will now be able to type in all of the fields. You can then try changing fields that the developers might have thought could not be changed. Clicking on the 'Show / Enable' tool again will return the field to their previous states, but the text you typed will still be in the fields.

Break

When testing a site there are many times when it is useful to be able to change requests 'on the fly' - you can do this using the [Green Circle] 'Break' tool.
The following form uses HTML5 to limit the values to between 1 and 100:

Enter a number from 1 to 100:	
1
When you click the 'break' tool you will see that the button changes to [Red Circle] and this means that all requests to and from your browser will be intercepted by ZAP. When you then submit the form (or navigate to another page) you will be shown a dialog that contains the request that has been sent by the browser. You can change any part of the request before it is submitted to the site, including the values set via the form, and then select either:

Step: to submit this request and then break on the next request or response
Continue: to submit this request and turn the 'break' tool off
Drop: to prevent the request from being sent to the site or the response from being received by the browser
Break works with both HTTP and WebSocket messages.

Comments

The Comments tool [white speech balloon] shows the number of HTML comments on the current page. It will not currently show comments in JavaScript or sub-frames.
If any of the comments contain 'suspicious' strings then an exclamation mark will be added to the icon: [white speech balloon with exclamation mark]

The suspicious strings are case insensitive and are currently hardcoded to:
TODO, FIXME, BUG, XXX, QUERY, DB, ADMIN, USER, PASSWORD, PWORD, PWD, SELECT
The intention is for these to be configurable from within the HUD in a future release.

If you click on the 'Comments' tool then the icon will change to [yellow speech balloon] or [yellow speech balloon with exclamation mark] and the same icon will be shown on the target page everywhere there is an HTML comment. Hovering over these icons will show the related comment and clicking on them will copy the comment to the clipboard.

Showing comments may well mess up the formatting of the target page, and in some cases may break functionality if any scripts rely on the DOM structure not changing. Clicking on the 'Comment' tool again will return the page to its original state.

Unlike many of the other tools, the Comments tool is tab specific, so turning it on or off on one tab will not affect the other tabs.

The Comments tool is not shown by default so you will need to add it to a panel as described in the Tools Configuration tutorial page.

Toggle Script