具體緣由烏云說的很清楚了
簡單來說,就是portalcp_diy.php中,在進(jìn)行上傳模板文件的處理時(shí)窝爪,調(diào)用了import_diy進(jìn)行操作,在import_diy把上傳的xml文件進(jìn)行一定的處理后齐媒,將blockdata這個(gè)xml標(biāo)簽中的內(nèi)容傳給block_import蒲每,block_import檢測了一些xml標(biāo)簽后,將其中style標(biāo)簽下的hash標(biāo)簽作為id喻括,將其中的值插入數(shù)據(jù)庫邀杏。于是注入一個(gè)特定的xml就可以修改任意模板。
在上述漏洞上的補(bǔ)充:
? ? block_import的xml處理有點(diǎn)暈唬血,審計(jì)的時(shí)候應(yīng)該記錄一下每個(gè)變量的聲明和值望蜡,
? ?一開始其中的C::t('common_block_style')->fetch_all_by_hash($hashes)?不理解,發(fā)現(xiàn)C就是core類拷恨,core中的t方法return self::_make_obj($name, 'table', DISCUZ_TABLE_EXTENDABLE);? ?在_make_obj中脖律,在本次調(diào)用中是用來生成表名的,在insert部分腕侄,傳了一個(gè)common_block_style進(jìn)去小泉,然后再_make_obj中進(jìn)行拼接成為table_common_block_style,并返回這個(gè)表名,在數(shù)據(jù)庫中也能查得到冕杠,其中的值也確實(shí)是正確的微姊。