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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM