level 9
文章作者: 伤心的鱼[SST]www.web67.cnwww.hack521.cn前言:文章内所叙述的漏洞危害很大。 任何人都可以利用此来挂马 我在文章中已经隐去了真实地址 但是也可能从图片中也能获得真实地址。 在这要把话说清楚 若有人访问文章中的地址中马 跟我没任何 关系 别说我有钓鱼 的嫌疑 本人从不挂马不然也不会将此漏洞公布出来 前天发现的漏洞今天我就发出来了 愿意玩的朋友自己玩去吧 目前任何使用此论坛的网站全部可以挂马正文:我们都知道跨站其实是个很被动也很鸡肋的一个东西 往往属于钓鱼之类的 只能等着别人上钩.. 但是今天俺们就化被动为主动让跨站真正的牛X一把 我们都知道国内现在的论坛以ASP跟PHP为主 很少看见有JSP的论坛. 但是并不代表JSP的论坛就没有人再用 今天闲的没事下了套cwbbs论坛来看。 多少看出了点东西 这里简单说下 首先这套系统是基于jsp+javabean+servelt+mysql架构 很多代码分析起来非常麻烦。这里我就简单说下代码。主要还是说下利用方式这套系统对注射漏洞要求很严格 很多参数 进行了整数转换 防止了注射漏洞 但是有的地方并没有进行转换。,出现了脚本跨站漏洞。 其实并不是注射漏洞危害大。 XSS一样是非常严重的漏洞。 而且这套系统种多个地方出现跨站漏洞。 而且一个跨站竟然能插到主页里。 也就是说我们只需要注册一个普通用户就可以直接在主页里挂马首先第一个漏洞出先在了send_do.jsp 是短消息文件 如图0首先第一个漏洞出先在了send_do.jsp 是短消息文件 如图0我们看到作者只是用了 javascript来判断是否有输入数据 如果没有输入就会提示标题跟内容不能为空如果不是空的话就使用javabean来吊调用com.redmoon.forum.message.MessageMgr来处理消息代码如下
因为他只判断了是否为空 并没有判断输入的数据 所以理所当然的发生了跨站漏洞这个漏洞不是今天的主角 因为一年前曾云好大哥就提到过这个漏洞 我只不过在这里又提一下 事隔一年竟然漏洞还存在我们来看事例首先使用powered by cwbbs搜索使用这个论坛的站点 如图1我们就以第一个站点为例http://xxxxxxxxxxxxxxxxxx/forum/index.jsp首先我们注册两个用户。 为什么要注册两个用户呢? 因为跨站是在短消息那里发生的 我们注册两个用户一个用来发送短消息一个用来接收短消息 注册好以后登陆上去 我注册的帐号一个a123456一个是X123456 我们先登陆a123456进到短消息界面 点撰写短消息在接收者那里添写我们另一个帐号x123456 标题和内容那里都写入我们跨站代码
然后点发送 看见了吧 发送成功如图2 图3我们在登陆x123456点接收短消息 看看我们看到了什么图4看到了吧 我们成功了。 因为标题那里并没有限制字符数 所以我们可以任意挂马 然后将短消息传给管理员 这样不知不觉就能让对方中马呵呵。这个估计是利用最大的吧。因为管理员会经常查看自己的短消息另一个跨站的地方发生在投票那里 我们点发起投票 如图5然后在标题跟投票选项那里输入
alert("跨站测试") 然后点发送当返回的时候我们只要点击查看投票就发生了跨站 这样一样可以用来欺骗管理员 如图6但是另我想不到的是这个投票跨站竟然跨到了主页里 原来我们发起投票知道我们的跨站代码直接插入了数据库里。这样我们一访问http://www.xxxxxxx.cn/ 站点的主页就会弹出我们的跨站测试对话框如图7跨站竟然跨到了主页了 简直是不可思意 如果我们将跨站代码换成我们的挂马代码 试试如图8简直不可思意 成功的在主页里显示出了百度 这样我们即使拿不到WEBSHELL 也不要管理员权限只要注册一个普通用户就可以随意在主页挂马看来管理员真的太疏忽了。 后来我又仔细看了一下代码。 发现作者没有过滤语句就插入到了数据库 而且直接就在首页进行显示... 跨站竟然跨到主页。 汗了。 第一次遇见 这个页面的文件代码太多了 我就不做解释了 有兴趣的朋友可以自己去下套云网论坛来瞧瞧另外一个地方能跨站的就是博客那里。 想必到了现在我也就不用再去写了 没意义了 主页都能挂马还什么不能呢??在创建博客的时候我们要写入配置信息。 一样我们写入跨站代码。这里依然是没有限制的。 如图9这样不管是任何人访问我们的博客或者查看文章都会发生跨站。 一样 我们要是挂马的话。。嘿嘿另外这套程序还有一个致命的上传漏洞。 我会在下次的文章里给大家发出来。我们知道上传漏洞是直接可以拿到SHELL 而JSP马默认的就是root权限 也就是说我们拿到了SHELL也就相当于拿到了服务器 至于注射漏洞。 我是没看出来作者对参数都进行了强制转换一个getint()函数将所有数字型都给杜绝了 不过还有字符型 本人菜鸟 实在看不出来怎么突破 比如在注册用户的那里代码如下<%String op = ParamUtil.get(request, "op");if (op.equals("chkRegName")) {boolean re = false;try{ String regName = ParamUtil.get(request, "RegName"); re = userservice.isRegNameExist(request, regName);}catch(cn.js.fan.util.ErrMsgException e) { out.print(e.getMessage());%>
window.parent.showCheckResult("span_RegName", "<%=e.getMessage()%>"); <% return;}if (!re) {%>可以看到我们输入的数据并没有经过过滤就进行了查询 但是具体的因为作者用javabean给封包了 所以看不到查询内容这个漏洞曾云好大哥也提到过 说是比较的鸡肋 但是我觉的这里算是唯一的突破点了。 我也在测试 争取下次跟上传漏洞一块发出来论坛后台能拿SHELL的方法很多 最简单的就是添加一个JSP的上传类型 直接over
2007年10月02日 13点10分