0x00 前言
本來呢,這套CMS都不想審的了。下載下來打開一看,各種debug注釋,排版爛的不行。
貼幾個頁面看看
感覺像是新手練手的,沒有審下去的欲望了。
但想了想,我tm就是新手啊,然后就繼續看了下去。
隨便點了一下seay工具自動審出來的幾個關鍵點。發現有注入,既然有注入,就好好看看了。
phpstorm,seay源代碼審計,本地demo搭起來~
看完之后,想寫篇文章總結一下,標題都寫好了:
DM企業建站系統v201710 存在sql注入
可能是因為代碼格式不想寫了,又或者其他原因
。。。
不知多少分鍾之后,無意在cnvd上看到有人提交了這個系統的相關報告,而且還是兩個?!
這才下定決心想捋一捋這個系統。
0x01 CNVD 的報告和廠商的補丁
先看看 CNVD 上的報告是怎么寫的吧?
報送時間 10-23 號,挺早的呀。。。
get 到一個點,后台登錄處存在sql注入~
在看看另外一份怎么寫的?
哎呀,24 號,你兩真有緣。
這份報告應該是系統的審了,發現了多個參數。怕是日穿了,廠商也出了補丁。
最新版是 12.1 號的。
0x03 新舊版本對比
因為我之前已經看過了舊版本的代碼,也知道舊版本多參數存在注入的問題所在。
舊版本的參數過濾都是使用了這么個函數
這個函數是作者自定義的,跟進去
global.common.php
會發現用的是 htmlentities來過濾,注意函數后面第二個參數用得是 ENT_NOQUOTES。這意味着什么呢?
用函數 htmlentitiesdm 過濾的都是只將<,>編碼為實體字符而已。而單雙引號完美被忽視了。
那么這個過濾有何意義啊?或許作者是想着來防xss的?!
也就是說用這個函數過濾的輸入,只要帶到數據庫前沒有做過濾的都是存在注入的。。
比如CNVD第一份報告說的,后台登陸存在注入??
看到代碼login.php
只是用 htmlentitiesdm 過濾了一下就不再過濾了,直接帶進數據庫,注入杠杠的。
還有第二份報告所說的多個參數注入,怕就是用了這個函數進行過濾的各個參數吧,這里就不再一一去找了。
讓我們把目光放到新版本上。
打開神器beyond compare,加載新舊兩個版本。
會發現做了很多更改。
我們單刀直入直接看看 global.common.php,看看函數 htmlentitiesdm 有沒有做修改?
會發現從 ENT_NOQUOTES 變成了 ENT_QUOTES。
也就是從不編碼任何引號變成了編碼所有引號。
也就是說這一改變把CNVD上面的兩個洞都修復了。
login.php 后台登陸注入的
以及其他的輸入參數,都是換成了用 htmlentitdm 來過濾了。
不一一舉例。
0x04 新版依舊存在sql注入
在對比完新舊版本之后,我就開始笑了。因為我找的幾個sql注入漏洞,都沒有修復。
哈哈,我也有手握0day的時候了!
1,常見的getip()函數過濾不全或者沒有過濾,導致sql注入
先看舊版的 global.common.php , 很明顯沒有任何過濾
看看哪里用了這個函數?在前台找到兩個地方
其中 file_formpost_concat 是用來留言的,file_order_post.php是用來下單的。‘
在我測試發現,只有留言這個功能可以用。
看代碼,舊版是content和tokenhour參數都有注入的
新版的過濾掉了。
但獲取ip這里是沒有變的。
那么這里是可以拿到一個布爾類型的注入。(因為這里沒有回現位)
直接 sqlmap 跑了
2,后台認證判斷存在注入,可直接繞過登陸
看最新版本后台認證處 admindm-yourname/config-a/common.inc2010.php
左新右舊,可以看到是沒有什么改變的。
而我們仔細分析一下這段代碼:
因為這里的cookie是可控的,我們可以直接進行注入,甚至不用注出密碼,直接進行繞過登陸了。
我們分析代碼,可以得出這樣的結論。
為什么userps 也是可控的呢?因為這里存在注入啊。
通過注入,我們可以讓返回的密碼為我們自己輸入的。
那么就可以直接構造cookie,以管理員的身份登陸進去了。
比如,我們用ps 為1 ,id 為 注入語句的cookie。
根據公式
usercookiecompare = userid-md5(userps,cookiesecet)
先構造md5部分:
那么我們的usercookie就是
7' and 1=2 union select null,null,null,null,null,1,null,null,null,null,null,null,null #-7b0bbade54ef65e2a830c034d0d14e61
把三個cookie搬上,訪問一下/admindm-yourname/mod_common/index-welcome.php?lang=cn 便可直接進入后台
時間原因,就不再看其他問題了。
肯定還有其他很多問題,代碼這么亂,出錯的幾率也增高了不少。
0x05 總結
總的來說,這是一套比較簡單的cms,適合我們這種新手。
不知道為什么這么簡單的CMS,還可以刷CNVD,CNVD真的這么簡單嗎?!