[代碼審計]DM企業建站系統v201710 sql注入漏洞分析 | 新版v201712依舊存在sql注入

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真的這麼簡單嗎?!

相關文章
相關標籤/搜索