tag:crieit.net,2005:https://crieit.net/tags/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7/feed 「ローカルプロキシ」の記事 - Crieit Crieitでタグ「ローカルプロキシ」に投稿された最近の記事 2021-05-25T16:54:10+09:00 https://crieit.net/tags/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7/feed tag:crieit.net,2005:PublicArticle/17277 2021-05-25T16:54:10+09:00 2021-05-25T16:54:10+09:00 https://crieit.net/posts/OWASP-ZAP OWASP ZAPで脆弱性診断を行う際の、予備知識的なもの─ローカルプロキシの設定編 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>OWASP ZAPを使って脆弱性診断を行う際、色んなサイトを参考にしながら進めていますが<br /> よくわからない箇所もとりあえず「そういうものなんだなー」と深く考えず、書いてあるとおりに行っていました。</p> <p>今回はそこを「それってなんズラなんズラ?」とツッコみつつ、<br /> なんとなく、ざっくり、ゆる~く 見ていこうかなと思います。</p> <p>なお、手順は<a target="_blank" rel="nofollow noopener" href="https://qiita.com/aikasu/items/6bfd33967448136b93bc">こちら</a>に沿って進めていきますが、<br /> 触れるのは冒頭の「ローカルプロキシの設定」のみとなっています。</p> <h1 id="プロキシ"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7">プロキシ</a></h1> <p>手順によるとまず最初に、</p> <blockquote> <p>OWASP ZAPをプロキシとして使用することで診断対象サイトへリクエストを送信し、そのレスポンスから脆弱性を診断します。</p> </blockquote> <p>とありますね。<br /> 私はまだ赤ちゃんなのでそもそもプロキシってなんやねんレベルです。プロ棋士??ひふみん????</p> <h2 id="プロキシはブラウザとサーバの仲介人的ポジション"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AF%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A8%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BB%B2%E4%BB%8B%E4%BA%BA%E7%9A%84%E3%83%9D%E3%82%B8%E3%82%B7%E3%83%A7%E3%83%B3">プロキシはブラウザとサーバの仲介人的ポジション</a></h2> <p>まずは<a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1752.html">わわわIT用語辞典</a>さんを読んでみます。<br /> マジいつもお世話になってます。</p> <p>簡単説明をそのまま引用すると、</p> <blockquote> <p>ホームページを見るときに使うソフト(Webブラウザ)の身代わりになってホームページにアクセスしてくれるコンピュータ(サーバ)のこと</p> </blockquote> <p>らしい。ほほーう。</p> <p>以下、書いてあったことほぼそのままですが、</p> <h5><del>プロ棋士</del>プロキシが居ないとき</h5> <p><a href="https://crieit.now.sh/upload_images/5410c8c78b63e2daeba20552c322f97960ab648d2a215.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5410c8c78b63e2daeba20552c322f97960ab648d2a215.png?mw=700" alt="image" /></a></p> <p>ってなるところが、</p> <h5 id="プロキシが居るとき"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%8C%E5%B1%85%E3%82%8B%E3%81%A8%E3%81%8D">プロキシが居るとき</a></h5> <p><a href="https://crieit.now.sh/upload_images/19eb7c013188633f8a300785fc00457f60ab6643b1d18.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/19eb7c013188633f8a300785fc00457f60ab6643b1d18.png?mw=700" alt="image" /></a></p> <p>こんな感じに間に挟まってくれる。</p> <h2 id="プロキシの何が良いの?"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AE%E4%BD%95%E3%81%8C%E8%89%AF%E3%81%84%E3%81%AE%EF%BC%9F">プロキシの何が良いの?</a></h2> <p>アクセス元を隠せる、レスポンスが早い、などありますが、今回の脆弱性診断に関係ありそうなのは<br /> サーバに送ったリクエスト内容を見たり変更したりすることが出来る ということですかね。<br /> (厳密には使わなくても出来るけど、より簡単に出来るってことかも)</p> <h2 id="なるほど。で、つまりは?"><a href="#%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%80%82%E3%81%A7%E3%80%81%E3%81%A4%E3%81%BE%E3%82%8A%E3%81%AF%EF%BC%9F">なるほど。で、つまりは?</a></h2> <p>「OWASP ZAPをプロキシとして使用して、ブラウザさんとサーバくんの間に入ってもらおう。<br /> そして、プロキシちゃんを使ってリクエスト内容を変更してPOSTしまくることで、脆弱性を見つけていこうZE!」</p> <p>…めっちゃざっくりいうと、こういうことなんだろうなと、ひとまず理解。</p> <h1 id="次いってみよーーう"><a href="#%E6%AC%A1%E3%81%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%83%BC%E3%83%BC%E3%81%86">次いってみよーーう</a></h1> <p>よおし!プロキシちゃんのことが少しわかったことだし、設定に進むぞ!<br /> 手順によると…</p> <blockquote> <p>Address欄には「localhost」、ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p><a href="https://crieit.now.sh/upload_images/6aaea3e4da676ec504a2979c126fd92460ab7109ca9fd.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6aaea3e4da676ec504a2979c126fd92460ab7109ca9fd.jpg?mw=700" width="50%"></a></p> <h1 id="localhost(127.0.0.1)"><a href="#localhost%28127.0.0.1%29">localhost(127.0.0.1)</a></h1> <p>脆弱性診断とか関係なくよく見ますね。XAMPPでローカルサーバ立ち上げたときとか。<br /> けど説明しろって言われたら何なのかはわからないので調べてみます。</p> <h2 id="ズバリ、localhost=自分のPCのこと です!"><a href="#%E3%82%BA%E3%83%90%E3%83%AA%E3%80%81localhost%EF%BC%9D%E8%87%AA%E5%88%86%E3%81%AEPC%E3%81%AE%E3%81%93%E3%81%A8%E3%80%80%E3%81%A7%E3%81%99%EF%BC%81">ズバリ、localhost=自分のPCのこと です!</a></h2> <p>ってよく色んなところに書いてあるけどいまいちピンとこない。<br /> まずはIPアドレスについて理解していく必要がある!<br /> 頭が痛くなってきたぞぅ。</p> <h2 id="IPアドレス"><a href="#IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9">IPアドレス</a></h2> <p>「インターネット世界での住所」みたいによく説明されてますね。<br /> 前提として、すべてのwebサイトにはIPアドレスを持っています。<br /> 住所不定のホームレスwebサイトなんてものは存在しないわけですね。</p> <h3 id="じゃあURLってなんなのさ"><a href="#%E3%81%98%E3%82%83%E3%81%82URL%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%E3%81%95">じゃあURLってなんなのさ</a></h3> <p>脆弱性診断をやろうとしてる人なら既にわかってるとは思いますけども、<br /> webサイトってIPアドレスで開くこともできちゃいますよね。<br /> まさに開発環境なんかは、<code>192.168.0.15</code>みたいにIPアドレスを入力して開いていたりするわけで。</p> <p>つっても普段はIPアドレスじゃなくて<code>https://www.google.com</code>っていうURLでwebページを開きますよね。<br /> <code>google.com</code>の部分が所謂<code>ドメイン</code>なのですが、このドメインはIPアドレスと一対一の関係にあります。</p> <ul> <li>IPアドレス→コンピュータさん向けのもの</li> <li>ドメイン →人間様向けのもの</li> </ul> <p>と言った感じです。</p> <p>ちなみに<code>www</code>の部分は<code>ホスト名</code>というらしい。</p> <h2 id="グローバルIPとプライベートIP"><a href="#%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABIP%E3%81%A8%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88IP">グローバルIPとプライベートIP</a></h2> <p>IPアドレスには、さらにグローバルIPとプライベートIPの2つが存在するらしい。<br /> 更に頭が痛くなってきた!</p> <h3 id="グローバルIP"><a href="#%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABIP">グローバルIP</a></h3> <p>全世界のネットワーク上における住所みたいなもので、重複しないIPアドレスのことです。<br /> 自分の家の住所とすぐお隣の人の住所が全く同じ、みたいなわけのわからんことになったら困りますよね。<br /> UberもAmazonも届かなそう。そんなイメージ。</p> <p>世の中に公開されているwebページのIPアドレスは、全部このグローバルIPです。<br /> そりゃそうですよね、Googleと同じIPが複数あったらカオスなことになります。</p> <h3 id="プライベートIP"><a href="#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88IP">プライベートIP</a></h3> <p>組織内のネットワーク(ローカルネットワーク?)内で使用できる、自分で勝手に決めてOKなIPアドレスのこと。<br /> 同じネットワークの中にいる人達だけに意味が伝わる、仲間内のみに通用する住所的な感じだと思います。</p> <p>マンションAに住んでいる人に、「これ1階のエントランスホールの管理人に渡しといて~」というのは通じますが、<br /> そのへんにいたオッさんに同じことを言っても「は?」って言われますよね。1階のエントランスホールって、どこの1階やねんと。</p> <p>そもそも、「1階のエントランスホール」っていうのはマンションAだけにあるものではないですよね。<br /> マンションBにもCにもあるかもしれません。</p> <p>でもマンションA内に「1階のエントランスホール」が複数あったらちょっと変ですよね。<br /> (エントランスが2つある構造とか、そういう話じゃないよ)<br /> マンションAの中に「202号室の佐藤さん」が複数あったらおかしい、の方がわかりやすいか。</p> <p>そんな感じの理屈で、プライベートIPは<br /> 同じネットワーク内で重複して使うことは出来ないけど、世界規模で見たら重複はOKです。</p> <h3 id="じゃあlocalhost(127.0.0.1)はどっち?"><a href="#%E3%81%98%E3%82%83%E3%81%82localhost%28127.0.0.1%29%E3%81%AF%E3%81%A9%E3%81%A3%E3%81%A1%EF%BC%9F">じゃあlocalhost(127.0.0.1)はどっち?</a></h3> <p>もうおわかりかと思いますが、プライベートIPです。<br /> プライベートIPなので、皆同じ127.0.0.1っていうIPアドレスで自分のPCにアクセスすることが出来るというわけです。</p> <h2 id="localhostにアクセスしてみる"><a href="#localhost%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">localhostにアクセスしてみる</a></h2> <p>試しに、何もしないままでブラウザからlocalhostにアクセスしてみます。(URL部分にlocalhostって入れる)<br /> <a href="https://crieit.now.sh/upload_images/615a5561b95c310f92932d9da840c00260ac62c271d4e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/615a5561b95c310f92932d9da840c00260ac62c271d4e.png?mw=700" alt="image" /></a><br /> 当然こうなります。</p> <p>localhostというのは自分のPCを指している、ただそれだけであって、<br /> 何もしていないのであればwebサーバでもDBサーバでもなんでも無いんですよね。</p> <p>ここで、Apacheを起動した状態でlocalhostにアクセスしてみます。</p> <p><a href="https://crieit.now.sh/upload_images/058f853c1a17847b976120b7a1ac913560ac63ce316c6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058f853c1a17847b976120b7a1ac913560ac63ce316c6.png?mw=700" alt="image" /></a></p> <p>XAMPPを入れてるので、お馴染みのこの初期画面が出てきました。<br /> (なので厳密には、「localhost/dashboard/」になるんですけど)</p> <p>Apacheを起動したことで、PCさんはwebサーバとして機能し始めました。<br /> もちろん、DBサーバとして機能させることも可能なわけです。</p> <h2 id="なるほど。で、つまりは?"><a href="#%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%80%82%E3%81%A7%E3%80%81%E3%81%A4%E3%81%BE%E3%82%8A%E3%81%AF%EF%BC%9F">なるほど。で、つまりは?</a></h2> <p>ってことは、localhost(=自分のPC)を、プロキシサーバとして機能させることも出来るよね!!<br /> ということで、手順の</p> <blockquote> <p>Address欄には「localhost」</p> </blockquote> <p>は、「自分のPCをプロキシサーバちゃんとして間に挟んであげようね!」<br /> みたいな意味かな~?と。</p> <p>ふぅ~ここまで長かったぜ。</p> <h1 id="ポート番号"><a href="#%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7">ポート番号</a></h1> <p>お次は</p> <blockquote> <p>ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p>この部分です。<br /> こう考えると、自分何も知らねーんだな!<br /> 仕方ない、赤ちゃんだもの。<br /> 頑張って見ていきます。</p> <h2 id="まずポートとは"><a href="#%E3%81%BE%E3%81%9A%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%81%AF">まずポートとは</a></h2> <p>ネットワークからコンピュータ(サーバ)にデータを送受信するときのドアみたいなものです。</p> <p>インターネットさんは80番のドア、FTPは20番のドアですよー みたいに<br /> データによって既にどのドアを決まっているものもあれば、<br /> ここからここまでは自由に使っていいですよ~~ なドアもあります。</p> <p>80番、とか20番、っていう番号がポート番号です。</p> <h2 id="ウェルノウンポート"><a href="#%E3%82%A6%E3%82%A7%E3%83%AB%E3%83%8E%E3%82%A6%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88">ウェルノウンポート</a></h2> <p>ポート番号が0~1023までのポートのことで、基本誰が通るのか決められています。</p> <h2 id="登録済みポート"><a href="#%E7%99%BB%E9%8C%B2%E6%B8%88%E3%81%BF%E3%83%9D%E3%83%BC%E3%83%88">登録済みポート</a></h2> <p>ポート番号が1024~49512までのポートのことで、<br /> ウェルノウン程ではないけど、よく使うアプリなどに割り振られます。</p> <h2 id="ダイナミック/プライベートポート"><a href="#%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%2F%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%9D%E3%83%BC%E3%83%88">ダイナミック/プライベートポート</a></h2> <p>ポート番号が49513~65535までのポートのことで、基本的にこの間のポートが自由に使えるポートです。</p> <p>なので、</p> <blockquote> <p>ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p>ここには49513~65535のうち好きな番号を指定してあげればOKです。</p> <h1 id="一旦終わり"><a href="#%E4%B8%80%E6%97%A6%E7%B5%82%E3%82%8F%E3%82%8A">一旦終わり</a></h1> <p>モロ一番最初のところだけでも、だいぶ体力使いました…。<br /> 正直、ここの範囲は知らなくても脆弱性診断はできちゃいますけど、知ってて損する知識なんか無いよねってことでまとめてみました。<br /> まだ深く理解は出来てないので、ざっくりゆるーく、ですけど。<br /> 診断に関係なく、この業界にいる以上基礎中の基礎知識だったと思うので、これを期に勉強出来てよかったなと思います。</p> <p>余力があれば、次は脆弱性診断で実際に行われている攻撃なども調べられたらいいな!</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1752.html">プロキシ (proxy)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.yoheim.net/blog.php?q=20160702#:~:text=%E6%9C%80%E5%BE%8C%E3%81%AB-,%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%A8%E3%81%AF,%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82">[フロントエンド] ローカルプロキシを用いて、本番サイトで開発/デバッグを行う - YoheiM .NET</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.atmarkit.co.jp/ait/articles/0710/26/news131.html">リクエストをいじれば脆弱性の仕組みが見えるのだ!:もいちどイチから! HTTP基礎訓練中(2)(1/3 ページ) - @IT</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://codor.co.jp/django/localhost">localhostについて詳しく解説【具体的に解説します】 - code for Django</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1286.html">ドメイン名とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word11976.html">グローバルIPアドレスとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word11977.html">プライベートIPアドレスとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://kino-code.com/whta-is-port-number/#102449151">【3分解説】ポート番号ってなに? | キノコード</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://27bit.com/question-number.html">ポート番号は何番を使えばいいのか教えて下さい - ポート開放ナビ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1774.html">ポートとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> </ul> みみみみみ