Linux 渗透:曲折渗透之路
环境搭建
web 服务(ubuntu):
web 有三个服务:st2,Tomcat,phpmyadmin。分别为 2001,2002,2003 端口,为 3 个 docker。
ip1:192.168.1.108 ip2:192.168.183.141
内网主机(win7):
ip:192.168.183.140
DC(win2008):
ip:192.168.183.130
攻击机器(kali):
ip:192.168.1.128
phpmyadmin Getshell
访问对应端口,发现都不需要输入密码直接进去了,那么这里方式就比较多了,提供的思路为使用 CVE-2018-12613,漏洞网上已经有师傅分析了,这里就复现一波
2021最新整理网络安全/渗透测试/安全学习/100份src技术文档(全套视频、CTF、大厂面经、精品手册、必备工具包、路线)一>获取<一这时一个远程文件包含漏洞,验证 payload 为:
可以看到读取了 passwd 的内容,证明漏洞存在。
这里 getshell 就可以通过包含 session 临时文件来实现命令执行 执行一个SELECT '<?php phpinfo(); ?>'
命令然后查看 session 值来访问临时文件。
执行成功后,查看自己的 sessionid,phpMyadmin 的值。
复制该值,把值带到 sess_,直接访问:
既然可以 RCE,那么这里如何上传 webshell 呢。构造 sql 语句如下:
同样的方法找到 sessionid,phpMyadmin 的值。
访问:
再访问 cmd.php,发现成功写入了。
成功连接。
Struts2
访问 2001 端口,发现为 Structs2 框架。
由于是框架,先可以直接用一些写好的工具去扫一波。发现存在 S2-045,S2-046 漏洞。
使用 S2-046 漏洞可直接远程执行命令。
并且可以直接上传 shell,这里 shell 的路径是可以改的。
访问后发现返回 500,只能说他这个马应该有点问题,利用漏洞应该是没问题的。
Tomcat
可以看到这里是 8.5.19 的 Tomcat,一般看到这种都是找一找版本漏洞。这里 kali 中已经有了相关版本的 poc。
直接利用:
可以看到利用成功,并写入了一个 shell。访问 shell,证实存在漏洞:
当我想用这个脚本执行一些命令时,出现了一些问题,于是准备自己手动构造一波:
使用 bp 抓包,改用 PUT,这里使用的是冰蝎 2.0 的马,3.0 的马上传了之后是连不上的。
exp 为:
返回 201 的状态码说明上传成功
内网渗透
回到 phpmyadmin 这个 shell。想上线 cs 方便操作,发现他是 liunx:
cs 是不自带 Linux 的上线方式的,但这里还是想上线,使用 CrossC2 插件上线。
这里如何配置网上的教程已经有很多了,生成一个命令行式的一句话,curl 上线。
但是这里出现了小插曲,可能由于是 docker 的原因,这里并没有成功上线,更换了 webshell 工具也是不行的,测试本机都是可以的。
那么这里只好试试 msf,生成 elf 文件:
生成 elf 文件后上传到 web 根目录下,并 chmod 命令修改权限为 777。
msf 准备接受会话
然后执行shell.elf
,成功接收到会话。
docker 逃逸
这里的逃逸方法为 privileged 特权。特权模式于版本 0.6 时被引入 Docker,允许容器内的 root 拥有外部物理机 root 权限,而此前容器内 root 用户仅拥有外部物理机普通用户权限。使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged
时,Docker 容器将被允许访问主机上的所有设备,并可以执行 mount 命令进行挂载。
此外还可以通过写入计划任务等方式在宿主机执行命令。那么这里就可以尝试使用特权模式写入 ssh 私钥,使用 ssh 登录。
查看磁盘文件:fdisk -l
可以看到是在/dev 目录下:ls /dev
创建一个目录 test,将/dev/sda1 挂载到新建的目录下
已经可以访问宿主机上的目录内容了。
然后使用 ssh 生成一个私钥,用 chmod 命令赋予权限。
这里桌面会生成一个test.pub
ls /test/home
即可查看目标机器的用户都有哪些
进入到 ubuntu 用户,里面会存在.ssh 目录,我们需要将密钥写入.ssh 目录并将文件命名为 authorized_keys(目标机.ssh 目录权限必须为 700)。依次执行以下两条命令写入密钥文件。
再使用 ssh 去连接ssh -i test ubuntu@192.168.1.108
这里有个隐藏 buff 就是历史命令未删除问题,跟接下来拿 win7 有关系。使用命令history
liunx 系统上线 cs
这下应该可以上线 cs 了吧,还是刚刚的套路,通过 curl 无文件上线,成功上线。
查看网卡信息时发现除了刚刚的一些混淆的 docker ip 外,有另外一张网卡。
这里就准备扫一下。因为没有自带的端口扫描,上传一个 fscan 去扫一下:
发现有同网段主机一台 win7,并且有永恒之蓝的漏洞。这里就想要利用永恒之蓝,cs 在 Linux 上的功能还是比较缺失的,这里还是先用 msf 打一波。
通过上传 elf 文件再执行,得到 shell 反弹回 msf,然后添加路由:
修改 proxychains4.conf
使用永恒之蓝模块去打:
这里直接上线了,执行命令后发现是有域的。
通过 nslookup 查询迅速确定域控 ip:192.168.183.130
域控出来了,思路就明确了。这里还是想先上线 cs 方便操作。由于 CrossC2 提供的功能较少,选择做代理,将 cs 带入到内网。
使用 Venom+Proxifier,上传 agent 到边缘机器。
边缘机器执行命令:
配置 Proxifier.conf 文件
启动 Proxifier 后发现已经可以通向内网机器 win7。
这里可以中继或者使用 tcp beacon。但是两个我都没有成功,cross c2 在高版本的 cs 下的功能还是弱了点,就放弃了。
win7 信息收集
拿到内网一台主机,首先就想抓他的密码,加上这台主机是 win7,是可以直接抓取到明文密码的。这里已经上传了一个 mimikatz,直接利用。
win7 抓取密码就比较轻松了,这里也是直接抓到明文。也跟上面历史命令相呼应。
浏览器密码等也是可以翻一下的,比较该主机已经在域内了,很多信息可能对我们拿下域控很有帮助。补丁还是打了不少,不过由于操作系统有点老了,总都会有些洞,经过对比发现 ms14-068 的补丁并没有安装,是可以利用的。
通过 mimikatz 抓取,获得了域内用户 douser 的 sid 和明文密码,并且知道域名称等信息,使用工具直接利用。
注入票据,注入后通过 klist 查看已经有了票据。
通过 ipc 连接或者 dir 可以直接访问域控机器,抓取密码的信息中已经有了域控机器名。
访问拿下域控
有了 ipc 连接就可以计划任务上线了。同样生成一个正向的马。上传到 DC 机器。查看时间,并设置计划任务执行。
获取到 shell,getsystem 竟然可以直接提权。抓密码省略。。图太多了。
后记
本来是想在 cs 上进行后渗透,由于开头一个 linux,cs 上线进行后渗透还是困难了一点,msf 和 cs 搭配使用要好一些。。
评论