0x00 前言php
原本呢,這套CMS都不想審的了。下載下來打開一看,各類debug註釋,排版爛的不行。html
貼幾個頁面看看sql
感受像是新手練手的,沒有審下去的慾望了。數據庫
但想了想,我tm就是新手啊,而後就繼續看了下去。cookie
隨便點了一下seay工具自動審出來的幾個關鍵點。發現有注入,既然有注入,就好好看看了。phpstorm
phpstorm,seay源代碼審計,本地demo搭起來~xss
看完以後,想寫篇文章總結一下,標題都寫好了:函數
DM企業建站系統v201710 存在sql注入工具
多是由於代碼格式不想寫了,又或者其餘緣由post
。。。
不知多少分鐘以後,無心在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真的這麼簡單嗎?!