先声明一下,这只能算是一篇实录,并非教学性质文章,因为我并不是个懂ASP或PHP代码的“黑客”,所以如果你抱着学“黑骇”技术看这篇文章的同时又是一个懂些技术的人才,那你什么也得不到,仅是浪费了一些时间;如果你是个对电脑有兴趣有时又得做些办公室里的网络维护或网络信息发布的行政人员,那么也许这篇原创的文章对你有些用处。
事情的起缘
系里的网站是架在学校的服务器上的,并没有给数据库等高级一些的权限,因此要使用动态元素最简单的办法就是利用一些无数据库支持技术的代码,比如ASP或PHP等。在系的BBS上架了雪人论坛,然后通过首页调用将最新的文章标题引用到首页上完成一种动态的显示:这样有些消息或内容就不用网站维护人员天天或时时更新,只要秘书在后台加一个消息贴就告成。
现在,团支部也要架这样的一个网站,某班级同学拿着在本机IIS下做好的整站要求上传到学校的服务器上(后来才明白这不是一个网站,而是个CMS系统,即内容管理系统,脱胎于一个新闻发布系统)。本以为它是靠数据库驱动,但不料传上之后即可以使用。目前这类CMS系统有不少是架于PHP代码语言的,MANBO就是一个曼妙的开源代码程序,由于使用过,因此在试用了同学交来的程序后觉得比较粗糙,不过下面我要处理的部分可能也正由于其粗糙而显得容易些。
要完成整站的设定,必须要有管理员帐号,而他们并没有给我。对于外人修改过的这类东西,危险性是比较大的,因为其中可能含有不良代码,作为网站维护人员来说,起码要拥有管理员帐号/权限。
一个CMS网站“修理”实录
-
- Advanced Member
- Posts: 982
- Joined: Thu May 13, 2004 11:10 am
整个网站包的结构比较乱,或者说并没有整理到位。我新注册了一个帐号,是归于用户级的,当然进不了管理面板。但这个代码程序的粗糙之处在于管理帐号登录后台的链接是不受保护的,任何级别的用户都可以在任一页面下看到。
由于所有的ASP源代码都在FTP中,所以开始找管理员登录代码页。
根目录下有admin_login.asp文件,通过查看代码
可知此文件另连两个重要文件是
const.asp
和admin_chklogin.asp
由于所有的ASP源代码都在FTP中,所以开始找管理员登录代码页。
根目录下有admin_login.asp文件,通过查看代码
Code: Select all
<!--#include file="conn.asp"-->
<!--#include file="const.asp"-->
<!--#include file="top.asp"-->
......省略
<form method="post" action="admin_chklogin.asp">
const.asp
Code: Select all
<%
On Error Resume Next
set rs=server.createobject("adodb.recordset")
set conn=server.createobject("adodb.connection")
DBPath = Server.MapPath("newsxp.asa")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
Code: Select all
<!--#include file="conn.asp"-->
'<!--#include file="session.asp"-->
<%
username=checkin(trim(Request.form("username")))
password=checkin(trim(Request.form("password")))
if username="" or password="" then Response.Redirect ("admin_login.asp")
sql="select * from user where username='"&username&"'and password='"&password&"'"
rs.open sql,conn,1,3
if not rs.EOF then
rs("LoginTimes")=rs("LoginTimes")+1
rs("LoginTime")=now()
rs("LoginIP")=Request.ServerVariables("REMOTE_ADDR")
rs.Update
session("xpUser")=UserName
session("xpPwd")=PassWord
'Session("AdminID")=rs("id")
'Session("username")=rs("username")
Session("IsAdmin")=true
'Session("KEY")=rs("oskey")
Session("KEY")="super"
Session("LoginIP")=rs("LoginIP")
Response.Redirect ("admin.asp")
else
errmsg="<li>请输入正确的管理员名字和密码!</li>"
-
- Advanced Member
- Posts: 982
- Joined: Thu May 13, 2004 11:10 am
通过第一段代码可知没用数据库的另一个解决方案是用了一个newsxp.asa的文件,这个文件只要将后缀改掉,即可以用ACCESS打开进行修改,这样可轻易获得得管理员的信息,从而进入后台管理面板,但手头没有安装ACCESS,只好用另一个办法了。看第二段代码,这是为验证身份用的,如果符合管理员的注册登录信息那么就通过并显示后台管理面板,而这正是我想要做的(把自己的普通帐号加为管理员的并修改整站当然得上管理员帐号了)。
第一部分两句
以下这句是句标准的SQL查询,即从admin的表中找出记录并与在登录页面上输入的信息对比,如果符合就进入下一步。可问题是我的注册帐号只是普通会员级别,怎么办?于是找到另外的普通会员登录代码(在userchklogin.asp这个文件中找),查到普通会员的表名是user,因此将下面的原句中admin改为user。
意思获取你登录的IP地址(干坏事的话你的IP就被记录了,所以可以用'把它注掉)!一来我有FTP的上传权限,是光明正大的修改并获取管理员帐号(虽然我当时谁也没告诉),二来除了程序这里有记录外,服务器日志及防火墙等处也应该有记录,所以我也不当小人了就不消迹灭尸了。 :qqb023:
第一部分两句
是从登录页面获取用户名和密码的username=checkin(trim(Request.form("username")))
password=checkin(trim(Request.form("password")))
以下这句是句标准的SQL查询,即从admin的表中找出记录并与在登录页面上输入的信息对比,如果符合就进入下一步。可问题是我的注册帐号只是普通会员级别,怎么办?于是找到另外的普通会员登录代码(在userchklogin.asp这个文件中找),查到普通会员的表名是user,因此将下面的原句中admin改为user。
注意到这个文件接下去有一句sql="select * from <span style='color:red'>Admin</span> where username='"&username&"'and password='"&password
Code: Select all
rs("LoginIP")=Request.ServerVariables("REMOTE_ADDR")
-
- Advanced Member
- Posts: 982
- Joined: Thu May 13, 2004 11:10 am
Code: Select all
session("xpUser")=UserName
session("xpPwd")=PassWord
'Session("AdminID")=rs("id")
'Session("username")=rs("username")
Session("IsAdmin")=true
'Session("KEY")=rs("oskey")
Session("KEY")="super"
Session("LoginIP")=rs("LoginIP")
原来的代码是
Code: Select all
Session("AdminID")=rs("id")
Session("username")=rs("username")
Session("IsAdmin")=true
Session("KEY")="oskey"
Session("LoginIP")=rs("LoginIP")
这时根据admin_chklogin.asp文件头部的信息知道还有一个session.asp文件,找到它并打开,其中的部分相关代码是
Code: Select all
'---------------------检查初级和中级管理员-------------------------------
function checkAdmin1
if Session("IsAdmin")<>true then response.redirect "admin_login.asp"
end function
'---------------------检查高级级管理员-------------------------------
function checkAdmin2
if Session("IsAdmin")<>true or (session("KEY")<>"senior" and session("KEY")<>"super") then response.redirect "admin_login.asp"
end function
'---------------------检查超级级管理员-------------------------------
function checkAdmin3
if Session("IsAdmin")<>true or session("KEY")<>"super" then response.redirect "admin_login.asp"
end function
-
- Advanced Member
- Posts: 982
- Joined: Thu May 13, 2004 11:10 am
开始自己改的地方不全,因此登录进了面板可却看不到真正的管理选项,无法管理和修改,现在全部改完了,顺利登录进入(其实还不算完,因为还有一个logout的管理员项,但我的目的是把自己加到管理员帐号中,所以登录出时出错已经不要紧了)。
后来的对模板、CSS、版块内容等的设置相对来说就简单多了,虽然也折腾了许久,但都是手力活了。
对很多办公室人员来说,往往中小企业不会找个全能的网络管理员,更不可能配一套网络宣传部队,因此在这个时代中,老板往往会要你以一当十的去做好多事,总是会将你榨干到最后一滴血----如果你有的话。人并不是全能的,能把信息化的工作做到多好有时还是看你对电脑技术熟悉多少,而不是精通多少,因为许多人并不是吃这碗饭的,不是这个专业的。那么我们需要的就是技巧而暂时非技术。
其实,架立一个内容管理系统,你也可以做得到,但拿到各类源代码后总要修改一些东西,这篇贴子希望给大家一些启示。
后来的对模板、CSS、版块内容等的设置相对来说就简单多了,虽然也折腾了许久,但都是手力活了。
对很多办公室人员来说,往往中小企业不会找个全能的网络管理员,更不可能配一套网络宣传部队,因此在这个时代中,老板往往会要你以一当十的去做好多事,总是会将你榨干到最后一滴血----如果你有的话。人并不是全能的,能把信息化的工作做到多好有时还是看你对电脑技术熟悉多少,而不是精通多少,因为许多人并不是吃这碗饭的,不是这个专业的。那么我们需要的就是技巧而暂时非技术。
其实,架立一个内容管理系统,你也可以做得到,但拿到各类源代码后总要修改一些东西,这篇贴子希望给大家一些启示。
Who is online
Users browsing this forum: ClaudeBot [Bot] and 0 guests