文章总结: 文章详细介绍了国外大学网络安全作业中获取5个flag的过程,涉及信息搜集、文件上传漏洞、权限配置不当、内网端口转发、程序逆向、可预测随机数漏洞、任意文件读取、JWT伪造和SSH私钥泄漏等多种安全技术。作者通过docker-compose搭建漏洞环境,逐步演示了每种漏洞的利用方法,适合网络安全进阶学习。
综合评分: 90
文章分类: 实战经验,渗透测试,漏洞分析,CTF,内网渗透
记某国外大学网络安全作业及课件(下)
原创
网安布道师
格格巫和蓝精灵
2025年12月5日 12:31
河北
在上篇记某国外大学网络安全作业及课件(上)中我们介绍到了5个flag的获取,涉及到社工、IDOR、sqli、信息泄漏、xss等技术点,这篇文章依然是根据提供的docker-compose文件去搭建本地漏洞环境找到flag1-5.
本篇文章涉及的技术点有信息搜集、文件上传漏洞、权限配置不当、内网端口转发、程序逆向、可预测随机数漏洞(PRNG)、任意文件读取、JWT伪造、凭据(ssh 私钥)泄漏导致的认证绕过等。较上一个靶场的难度要高些,考查点也更多点。
题目描述如下:
docker-compose.yml内容如下
version: "3.8"services: uploader: platform: linux/amd64 image: conradob8/4178-ctf2-uploader:2025 networks: - internal expose: - 80 ports: - 5001-5005:5001-5005 - 8888:80 codehubwebsite: image: conradob8/4178-ctf2-codehub:2025 logging: driver: "none" environment: - LOG_LEVEL=ERROR networks: - internalnetworks: internal: name: internal
flag1
漏洞信息:信息搜集、信息泄漏
首先启动环境之后,首先看这个expose和ports,这表明容器内部可以访问80端口,对外发布的端口为8888(对应容器内部的80)以及5001-5005.
所以进行invade的时候只能以127.0.0.1的8888端口为入口。 可以使用nmap识别一下8888端口的服务,一般为http协议的web服务。之后使用dirb扫描一下敏感文件和目录。
发现web根目录下有flag,访问得到flag1
flag2
漏洞信息:文件上传漏洞、权限配置不当
很明显的文件上传,测试一下上传漏洞,未做任何过滤直接上传一句话目录getshell,使用蚁剑连上去。当前用户权限比较低,一些文件和目录读取不到。
根目录下发现提示信息
大意是有权限不对的文件可能可以用来提权。
当前是www-data用户,其中所属的组中有个shadow组引起了我们注意,在系统中查找一下shadow组可以访问或者修改的文件
发现可以读取/etc/shadow文件
可能看到有david账户,且其加密方式是md5,可以使用john或者hashcat爆破一下,直接使用默认的字典(/usr/share/john/password.lst)没有爆破出来,试一下rockyou,可以爆破出来密码是sjg0102
反弹shell,读取/home/david/flag.txt 获取到flag2.
flag3
漏洞信息:程序逆向
在系统的/secret目录下发现有flag但还是权限问题读取不到,这里存在一个二进制程序secret_check ,需要进行密码验证,下载下来逆向分析一下,但无法直接下载,可以通过echo重定向到文件的方式进行下载
下载之后使用ida进行逆向分析。
逻辑不是很复杂,大致判断逻辑是
!strncmp(s, "letmein-", 8uLL) &&v5 + v6 == 100 &&v7 - v8 == -65 &&v5 + v7 == 100 &&v7 + v6 + v5 + v8 == 267
根据线性约束条件解方程得到 v5 = 49 → 字符 '1'v6 = 51 → 字符 '3'v7 = 51 → 字符 '3'v8 = 116 → 字符 't'
也就是后 4 个字符是:”133t”。所以密码应该是letmein-133t
flag4
漏洞信息:可预测随机数漏洞(PRNG)
在upload的页面发现有聊天日志信息,大致是使用socat搭建隧道相关。
在第一台拿下的机器上进行主机扫描,发现有内网中还存在172.27.0.3,开放3000端口
使用socat进行端口转发到本地的5001端口 ,这样本地就可以访问了
socat tcp-listen:5001,fork tcp:172.27.0.3:3000
通过页面的提示信息猜测这个验证码和时间相关以及burpsuite抓包 这个时间参数且可控。
验证码每隔60秒刷新,猜测后台的算法大致是用时间戳作为随机数种子,且一分钟内的验证码相同生成固定4位数的伪随机验证码。这里去尝试构造并猜解一下这个验证码
import randomt = 1764776379t = t - (t % 60)random.seed(t)print("%04d" % random.randint(0, 9999))
改包之后发送发现验证成功获取到flag4
flag5
漏洞信息:任意文件读取、JWT伪造、凭据(ssh 私钥)泄漏导致的认证绕过
在后台页面发现有admin超链接,点击访问发现没有权限
抓包发现通过JWT方式进行验证。(https://www.jwt.io/)
尝试修改is_admin 越权来绕过验证,但是没有secret,验证无法通过
后台页面根据参数特点测试发现存在任意文件读取漏洞,读取main.py的源码信息。
在源码中得到了secret_key
利用这个secret_key重新伪造JWT绕过认证。
成功绕过认证之后页面赫然挂了个ssh的私钥。
接下来就是ssh私钥登录服务器的基操,首先通过socat把ssh的端口转发出去。
然后通过私钥登录服务器,在admin用户的主目录下发现flag5.
至此5个flag均已找到。整套题目环境相对综合,难度略偏高,适合进阶学习。
另外在公众号回复20251205即可获取题目环境和更新后的课件。
部分课件内容截图(新增)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:格格巫和蓝精灵 网安布道师《记某国外大学网络安全作业及课件(下)》