分析DEDECMS 5.5 datalistcp.class.php包含
This entry was posted on Apr 03 2010
作者:st0p
轉載請註明出處http://www.st0p.org
老早就看到有人發的洞,一直想過寫分析來著,最近一直呆在UBUNTU下安裝東西。 。 老忘。 。 。
有時有些朋友加我,教他找洞。 。 。 這個好似是個累活,而且運氣佔很大一部分。 。 。 所以我還是盡量幫分析過程發出來吧,也方便我自己學習。
具體的EXP,請看: http://www.st0p.org/blog/archives/dedecms-5-5-datalistcp-class-php-contains-exp.html
以前呢,DEDECMS會把出錯的SQL信息,寫進mysql_error_trace.php,後來被大牛們爆出來了。 就改名為mysql_error_trace.inc了。 。 。
沒想到這次又被包含了。 。 。 看來記錄SQL信息也不是啥好事。 。 。
這個EXP的原理呢,是通過構造特殊的請求給plus/digg_ajax.php來達到寫入我們的語句到mysql_error_trace.inc,當然可以滿足我們這一步寫入到mysql_error_trace.inc的文件還有不少。 。 不過想要執行他就不可能了。 。 然後這次報出的洞呢就是運氣很好才能碰到的。 。
關鍵代碼存在於
/include/datalistcp.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ... ( isset ( $needCode ) ? $needCode : $cfg_soft_lang ) ; $codefile = ( isset ( $needCode ) ? $needCode : $cfg_soft_lang ) ; //通過isset函數檢查$needCode是否已配置,如已配置則結果為$needCode,否則結果為$cfg_soft_lang //當我們偽造結果為aa/../../../data/mysql_error_trace時 file_exists ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ) if ( file_exists ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ) { DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ; require_once ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ; //後綴是.inc } //檢查文件是否存在,存在則包含。 我們通過../成功跳轉到到data目錄,包含我們剛才構造過的mysql_error_trace.inc //成功運行我們mysql_error_trace.inc在構造的語句。 。 。 ... |
鬱悶,前幾次想寫分析的時候官方還沒補呢。 。 剛去官方看了下通過正則進行了修補
1 2 3 4 5 6 7 8 9 10 11 | ( isset ( $needCode ) ? $needCode : $cfg_soft_lang ) ; $codefile = ( isset ( $needCode ) ? $needCode : $cfg_soft_lang ) ; preg_replace ( "/[\w-]/" , '' , $codefile ) ; $codefile = preg_replace ( "/[\w-]/" , '' , $codefile ) ; //通過正則過濾了。 。 。 file_exists ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ) if ( file_exists ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ) { DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ; require_once ( DEDEINC . '/code/datalist.' . $codefile . '.inc' ) ; } |










































106 Trackback(s)
You must be logged in to post a comment.