Maccms8.x 命令執行分析
阿新 • • 發佈:2018-12-18
在很多地方看到有這個漏洞,自己學著分析一下。看到的poc如下
Url: http://127.0.0.1/index.php?m=vod-search
POST: wd={{page:lang}if-:p{page:lang}hpinfo()}a{endif-}}
在index.php這裡主要是進行模板的路由規則替換,vod-search就會拆分成vod和search,然後載入vod.php
下面動態除錯可以看更清晰的結果,箭頭指向的為載入那個vod檔案:
去到inc\module\vod.php檔案下面,提交的wd首先會經過sql的檢測:
Chksql檢查是否存在sql注入,不礙事,往下看這幾行:可看到wd就是我們傳進來的poc,在這裡wd進行了賦值:
再賦值給$valarr,然後進行str_replace直接替換了{page:lang},然後寫入模板檔案:
經過replace,$tpl->H有些內容變成了{if-:phpinfo()}a{endif-}}
然後我們回到index.php檔案那裡,往下走,可以看到ifex()方法:
在inc\common\template.php 裡面可以看到 ifex() 方法,可以看到進行了一個正則匹配,然後再進行正則內容的迴圈獲取:
從下面的圖中可以看到,$strif已經變成phpinfo():
經過兩次if,else判斷,去到1041行,由於上面的$strif沒有進行過濾,直接就eval了,所以造成了傳入的php程式碼執行了:
寫得囉嗦了點,主要是學著用phpstorm進行程式碼的除錯。
參考:
https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=23026