记一次对Discuz官方论坛的渗透检测

2012-10-31 15:52:50 118 23045 6
前言: 此次检测纯属偶然, 源于Errorera同学一直想拿下腾讯, 然后找腾讯换ipad玩, 结果搞着搞着就把目标对准Discuz了, 反正Discuz也属于腾讯业务,
估计搞下也能换ipad, Errorera同学怀着这样的美好愿望就开搞了!
此文所有图片均由Errorera同学提供, 本来我想等我把文章写了他再提交的, 可丫太着急要ipad了, 所以瞒着我直接提交了!! 所以现在所有漏洞都已经修补,
导致我想截图都截不了了… 还好他已经写了一篇文章, 我就将就直接修改下拿上来吧~

过程Top1: Dev.Discuz.Org注射: (此过程前几日已在土司发了部分内容, 之后自己删除, 原因后面会提到)

下午我正在卖衣服, 突然Errorera就在群里说找到突破口了, 原来Dev.Discuz.Org这个站是Discuz的开发者论坛, 但是却很二逼的直接把”X-Forwarded-For”直接带入了数据库, 且无任何过滤, so..注射就这样产生了~ 首先直接打开是显示登录页面:



然后再修改下X-Forwarded-For的值为111′, 再刷新下页面Mysql就报错了:




既然存在注射, 那首先想的肯定是怎么获取到我们想要的信息了, 用户数据库? 亦或是ROOT密码? 还是直接into_Outfile呢 = =? 不过这都是废话, 要是这么简单搞定的话也就没后话了~
首先看这Mysql信息肯定是使用的DISCUZ来构建的, 但是具体是什么版本就不知道了, 所以我就先猜了下字段数, 想用常规方法爆出东西, 最后确定字段数为5, 然后就顺手union了, 殊不知过滤了逗号, 顿时傻逼…..
以上图没截到, 所以就一笔带过吧~ 随后多次测试, 使用了网上提到的JOIN方法成功突破:
127' UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d JOIN (SELECT 5)e)#

UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b实际上也就相当于UNION SELECT 1,2
正当我以为会出现熟悉的1 2 3 4 5的时候, 却直接登录进去了….




这dz是什么版本也不知道, 更不知道他的具体写法, 目测的话应该是在判断登录与未登录的时候出现的问题, 可能在判断的时候用到了mysql查询, 然后把登陆成功用户状态的登录状态写入数据库, 当然以上只是猜想, 具体是咋回事暂且不清楚o(∩_∩)o~ 不过这里只是看上去登录进去了, 提示不欢迎我 = =.. 于是我又刷新了下, 就立马笑了~~


既然他都这么客气的就把md5给我爆出来了, 那我也就不用再客气了, 测试了几遍发现这里我把X-Forwarded-For改为空的话还是会提示不欢迎我, 然后我就按照注射经典步骤, 祭出了传说中的Order By~ 直接把X-Forwarded-For的值改为
127' order by 4#

之后刷新, 然后我又笑了….




真不知道这奇葩的dz是怎么写的, 一个注射沦陷全站啊~~ 可能这里细心的基友会发现怎么这个登录进去的用户名和之前的用户名不一样啊, 待我细细到来, 在开头union的时候我就想过既然直接登录进去了, 会不会直接把我union出来的值直接当成用户的uid查询了呢, 于是经过测试, 才发现原来
127' UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d JOIN (SELECT 5)e)#

里面的
JOIN (SELECT 2)b

就可以定义成用户的uid, 这里我改为2, 就是李国德这个用户, 改为1的话, 自然就是admin了o(∩_∩)o~
既然登录了, 那自然就是拿shell了, 拿到shell好进一步搞, 但是这次, 我哭了~~




既然后台进不去, 那先去前台转转来, 转就转到了一个屌丝板块”Discuz 安全问题”, 然后点进去, 就各种0day了~~~



好吧, 既然到这份上我也不卖啥关子了, 自从上次在土司发了以后就很多人找我要0day, 其实这板块里的漏洞都是以前的老洞, 有别人提交的, 也有内部人员自己审计的, 所以基本上都修复了, 也可以算是Xday吧~
然后继续渗透, 发现此站目录下有一个名为wiki的二级目录, 是用的MeadiWiki搭建的, 通过论坛爆了几个用户的密码, 进去都不是管理员, 也没拿到shell~ MeadiWiki的管理员用户是Sup, 用admin的密码也没搞进去, 并且之前那个注入点也不是root权限 = =
一直到这里, 还没进行到下一步, 这个站主页就变空白了, 估计是被管理员发现了, 然后Errorera就把这个注射提交给腾讯了, 结果lake2却说这是dz的站, 希望我们别欺负dz…. 结果某同学很窝火, ipad没拿到, 还被泼了冷水, 当时Errorera同学就立誓要拿到ipad….



过程Top2: Dev.Discuz.Org再次注射脱出用户数据库:

几日过后, 我卖完衣服上qq, Errorera给我说那个站恢复了, 竟然还没补洞.. 既然还有机会那我就把土司的那个帖子先删了, 要是有别的大黑客去捣乱那就不好搞了..
既然他赤果果的挑衅我, 既然这样也就没必要客气了, 继续我们的计划, 我立马就用易语言写了个程序批量把所有用户的密码给跑出来了:





跑完以后一共有200多个用户, 我们就打算用这些用户进一步社工Discuz的其他网站, 这时候我发现跑出来的用户密码里面有一个名为test的用户, 我在想这论坛其他用户都是直接用中文姓名注册的用户名, 这个test很可能是管理员测试用的, 立马上cmd5解密出其密码为”xi***********6″, 然后尝试了下用这个密码登录MeadiWiki的Sup用户, 成功登录之.. 但是依然没拿到shell, 对MeadiWiki也不熟, google了下也没找到方法, 于是只好放弃了~


过程Top3: U.Discuz.Net沦陷:

上一步中已经基本确认了管理员的常用密码, 而这个站又是dz的开发者用的, 那么很有可能这么密码也是Discuz主站的管理员或者维护员或者服务器运维员的密码, 于是用这个密码通杀进了几个Discuz的分站, 比如Demo.Discuz.Net等, 不过安全性都做的比较好, 后台都是清一色的403, 而后又去试了试5d6d等Didcuz的旗下业务, 都是毫无收获, 随后索性直接开搞www.discuz.net的旁站~
因为我知道主服务器的安全肯定不会亚于哪些分站, 所以暂时没有尝试通过WEB方式来拿shell, 直接扫出了ftp端口2121, 然后各种组合, 各种爆破都无果, 这时才瞄准了旁站U.Discuz.Net, 直接用帐号Sup, 密码xi***********6登录了进去, 由于使用的是UCHome, 且后台也没有403. 那么你懂我懂相信大家也都懂了..





成功拿到shell:http://u.discuz.net/home/data/a.php, 密码cmd



主站近在眼前, 但是目录权限分配了, 跨不过去也是浮云, Linux内核是2.6.18, 没打补丁, 但是也没反弹出来, 要是能反弹出来的话提权应该没什么大问题, 然后翻了下翻到了PureFTP等也没啥大的收货, 最终在根目录config.php文件里翻到了主站的UC通讯配置信息:



接下来数据库神马的就都是浮云了:





一共200万左右的用户数据, 我估摸着里面90%都是网站站长吧.. 如果数据库被脱危害性可想而知, 不过我可是良民, 借此郑重声明下: 此数据库我丝毫未动, 更未脱裤, 管理员可查Mysql查询记录!
咱可是良民不是, 脱裤这种事情还是留给Helen或者TH4ck等大牛来完成吧, 最后update了戴志康老板的密码, 不过结果我也想到了, 后台是403~

End:
至此, 这次检测也就结束了, 这是遇上我等菜鸟, 要是遇上Helen之流, 相信大家都懂的..
这次也看出一个密码多个地方使用尤其是网站管理员的话这样是非常危险的, 暴露密码就等于你的站也就是完了!
关于什么修复方法啥的我也就不装逼啰嗦了, 我相信腾讯和康盛的大牛比我有办法的多了!
最终腾讯答应了给Errorera童鞋发放ipad一部, 那丫估计现在睡觉都要乐醒了 o(∩_∩)o ~

最后著名下: 此文为Rices&Errorera共同撰写, 并且以上内容纯属我中枢神经错乱一时胡思乱想所胡编乱造, 所以跨省啥的别来! 另外本文同发我博客和3hack 转载请带版权!
免跨省声明:
1. 以上所有言语非本人所写 也非本人所想 如果用于非法更与本人无关!
2. 以上所有工具非本人所写 也非本人所想 如果用于非法更与本人无关!
3. 本人由于被不明外星物种控制所以被迫”发表以上内容” 其内容并非本人本意!

本文所有图片原链接:

关于作者

Rices154篇文章2132篇回复

评论118次

要评论?请先  登录  或  注册