渗透实战之内网渗透流程
0x00 前言
一个完整的内网渗透过程。
0x01 案例分析
实验环境:
目标环境:10.0.0.0/24, 10.0.1.0/24
攻击主机:10.0.0.5 (Kali), 10.0.0.7 (Windows)
渗透过程:
基本的主机探测:
任意选取其中的一个 online 的 IP(如:10.0.0.9)进一步探测:
从以上探测结果可以发现该主机是 Windows 2008 R2 且开放了 SMB 和 RDP,继续探测.
此时,我们发现该主机存在一个可读写的 share folder \10.0.0.9share
:
为了进一步了解,登录我们用于渗透的另一台 Windows 主机(10.0.0.7)。
![](https://static001.geekbang.org/infoq/78/788d3a22d007f1b9f16dc03249fd9e64.png)
【一>所有资源获取<一】1、很多已经买不到的绝版电子书 2、安全大厂内部的培训资料 3、全套工具包 4、100 份 src 源码技术文档 5、网络安全基础入门、Linux、web 安全、攻防方面的视频 6、应急响应笔记 7、 网络安全学习路线 8、ctf 夺旗赛解析 9、WEB 安全入门笔记
发现,这个共享文件夹里包含了一个定期监控运行进程的 python 脚本。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tz51vlui-1651236284775)(https://upload-images.jianshu.io/upload_images/26472780-f21373da4281a975.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
由于该文件夹可读写,我们可以生成并放置一个 meterpreter 的 payload,然后修改该 python 脚本来执行它,这样我们就可以得到一个 meterpreter session 了。
修改 python 脚本如下:
![](https://static001.geekbang.org/infoq/f5/f5b284618913f6623f67637f5fe1cc6e.png)
几分钟后,我们顺利地获得了一个 meterpreter session 了。
![](https://static001.geekbang.org/infoq/4d/4dd04d83486dabcfc9f91c77bdde623a.png)
同时,可以看出这个机器具有多个网卡且横跨在 2 个网段中(10.0.0.9/24 和 10.0.1.9/24)。因此,我们也可以利用这个机器做跳板继续渗透 10.0.1.0/24 这段里的机器。
![](https://static001.geekbang.org/infoq/dc/dc6c38eea598190799d4d51eb5f73511.png)
利用auxiliary/scanner/portscan/tcp
去扫描10.0.1.0/24
段,如下:
![](https://static001.geekbang.org/infoq/6b/6bcf1c2e6281e66ed70146719c2e9515.png)
我们任意选取其中的一台机器(如:10.0.1.11),我们发现其开放了 80 和 22 端口。接下来,我们可以在session 2
里设置端口转发,将攻击机(10.0.0.5)上的 8080 端口转发到目标机(10.0.1.7)上的 80 端口,方便我们后续的测试。
![](https://static001.geekbang.org/infoq/48/4805869df285db2386ed50cff462b86f.png)
这时,我们再次登录我们的 Windows 渗透机器(10.0.0.7)来查看一下这是个什么网站。
![](https://static001.geekbang.org/infoq/2b/2ba97b9c28faf08799c841f14a63a582.png)
经过测试发现,这个登录功能存在 SQL Injection,可以通过以下的用户名和密码登录:
username: admin
password: ' or '1'='1
![](https://static001.geekbang.org/infoq/62/6237876248ee85faf001ae317c34315e.png)
经过观察发现,这个网站应该直接本地文件包含了 web 服务器的 access_log,因此我们可以想到利用文件包含漏洞来生成一个 webshell,具体步骤如下:
1. 发送一个包含 webshell 代码的 HTTP 请求使其被写入到 access_log 里, 如一个仅包含上传功能的 php 小马
![](https://static001.geekbang.org/infoq/54/547224121bb2af443b3c43df0b155151.png)
2. 访问http://10.0.0.5:8080/admin.php
来文件包含 access_log 使其中的 php 代码被执行,从获取一个具备上传功能的 php 小马
![](https://static001.geekbang.org/infoq/52/5285428d7c9db9fc63106e25cf2d38c1.png)
3. 访问http://10.0.0.5:8080/upload.php
并上传一个功能齐全的 PHP webshell
![](https://static001.geekbang.org/infoq/3c/3ce4e9f47531f59516b72c622dc3d3f0.png)
4. 访问http://10.0.0.5:8080/shell.php
并输入密码qwer
,则成功地获取了一个 webshell
![](https://static001.geekbang.org/infoq/4c/4c17b92bc88021b665a29085d44592d4.png)
利用 webshell 提供的功能我们发现这只是一个用于运行 web service 的低权限的用户(daemon),那么接下来我们需要解决的问题就是本地提权到 root 权限。
![](https://static001.geekbang.org/infoq/60/60c34518ad582ba78b2414692d197ed8.png)
![](https://static001.geekbang.org/infoq/64/64ad29bceb43f25c2aae07b06cce18b2.png)
如上图,我们找到了一个777
权限的 root 用户所拥有的 cronjob 文件/etc/cron.hourly/clean_up_access_log
。看起来这个脚本似乎是用于定期清理access_log
的。因此,我们似乎可以利用它来获得一个 root 权限的 meterpreter shell。
首先,生成一个 Linux 的 meterpreter payload 并通过 webshell 上传到目标主机上并添加执行权限;
root@kali:~# msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf > root.elf
system('chmod +x /opt/lampp/htdocs/root.elf');
接着,修改/etc/cron.hourly/clean_up_access_log
使其可以执行我们上传的 payload 并等待 cronjob 的下次执行;
![](https://static001.geekbang.org/infoq/73/731937176c02bbd820265624c51cdfcf.png)
利用上面获得的 root 权限的 meterpreter session,我意外的发现了一个有趣的文件/root/readme.txt
,其中包含了一个远程 FTP(10.0.1.26)的口令和密码。
cat /root/readme.txtCredentials for FTP:
IP: 10.0.1.26
User: ftpadmin
Password: nKG6aqwvveFutn$@
既然拿到了这个信息,我们不妨再次探测一下我们的下一个目标(10.0.1.26)。
![](https://static001.geekbang.org/infoq/9d/9d608b9f1056b85796ed8dc7367876d1.png)
果不其然,目标机(10.0.1.26)确实存在一个 FTP 站点。进入上面获得的session 2
,在目标机 10.0.0.9(10.0.1.9)上添加一个管理员账号:
![](https://static001.geekbang.org/infoq/99/99148b6fba5fa21f9fc4c3f6dc41b08f.png)
接着 RDP 到目标主机 10.0.0.9(10.0.1.9)上,并尝试使用已经获取的口令登录。
![](https://static001.geekbang.org/infoq/04/04cb857f46f77a94910bf4c0da1cd727.png)
结果显示,我们成功地登录了该 FTP 站点,且具备读写权限。另外,我们还发现该 FTP 为目标机 10.0.1.26 上的一个 web 站点的根目录。因此,我们可以通过该 FTP 轻松地上传一个webshell.php
文件,如下:
![](https://static001.geekbang.org/infoq/59/59a578138835f9bc0211cff2048a9d18.png)
有了 webshell 我们便可以上传一个 meterpreter payload 来获取一个功能强大的 meterpreter session 了。
那么接下来,我们的下一个目标就是 IP 为10.0.1.7
的域控服务器了。
经过一系列测试,发现目标机似乎只接受来自 IP10.0.1.26
(Session 5)的流量,因此我们需要先添加一个专门的路由使我们的攻击机(10.0.0.5)流量可以抵达目标主机(10.0.1.7)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r8nazMWD-1651236284840)(https://upload-images.jianshu.io/upload_images/26472780-d240f683a1317cea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
首先,搜集利用 hashdump 命令收集一下主机10.0.1.26
的所有密码 Hash:
![](https://static001.geekbang.org/infoq/20/20b31fde56c0d55d4e69b04c8187212c.png)
接着,我们可以尝试使用 Pass The Hash 来测试一下我们的目标机(10.0.1.7),并成功地拿下了该域控服务器。
至此,我们已经成功地拿下了所有实验环境下的主机控制权限。
0x02 小结
本文重点介绍了一个相对完整的内网渗透过程(即:外网主机-内网主机-内网域内主机-内网域控服务器)。基本思路和方法都是类似和想通的。
评论