第十届南京邮电大学网络攻防大赛(NCTF 2021)writeup Web X1cT34m_API_System Author:wh1sper 题目描述: 在API安全的新时代,安全圈迎来风云变幻。 掀起巨浪的你?只手遮天的你?选择保护还是放弃你的曾经的伙伴? target: http://129.211.173.64:58082/ 附件链接: https://wwn.lanzoui.com/iUoDwwyfdxc hint1: the hidden API to bypass 403 hint2: jolokia readfile 考点:Springboot actuator配置不当导致的API安全问题 访问,可以看到有(限制了本地IP,直接访问返回)和一个隐藏的API接口。 或者可以直接拿APIKit扫到:
POST访问,返回XML格式的数据
那么自然而然地想到了XXE;加了waf,不让直接读文件; (这里有俩师傅做了非预期,XXE的waf没写好,可以直接盲打外带flag,我在v2限制了靶机出网无法外带了) 但是众所周知,XXE是可以SSRF的; 那么SSRF配合可以完成一次利用 因为是docker代理的端口,我们需要先访问本地服务端口:
然后构造SSRF:
因为返回的数据太长了,而且里面有一些特殊符号会报。 于是后面给了附件pom.xml,可以本地起起来看一下有什么Mbean。
有一个可以读写文件的Mbean: com.sun.management:type=DiagnosticCommand 判断远程环境是否存在这个Mbean:
如果不存在返回的是上图,如果存在返回的是下图两种情况
exp: flag: ezjava 出题人ID:Pupi1 题目描述: 戴教授才开放了2天的文件管理系统,还没完成就被黑客拿下了,并往里面藏了一点东西 http://129.211.173.64:8080/html/index.html http://129.211.173.64:8081/html/index.html 附件链接: 链接:https://sigusoft.com/s/1jB6Kcy478ashRtxEFJP1bQ 提取码:nctf https://wwn.lanzoui.com/iamSDwyi0pe https://attachment.h4ck.fun:9000/web/ezjava/nctf.war flag: 这个题其实也是一个在不支持jsp的情况下任意文件写的rce利用 前面部分先对代码进行审计,我们可以上传zip,然后在解压这里发现
他没有对压缩包文件内的文件进行检查,这里就可以导致解压目录穿越。这里可以通过一个脚本去生成这样的zip: 那么我们现在就相当与可以写入任意文件了。那么就是在spring boot运行时并且不支持jsp没有热部署的情况下要如何去rce的问题了(好像这里题目在重启的过程中jsp支持被打开了,X__X) 其实这里给了一个后门是用来反序列化,这里的提示其实很明显了,我们就可以把恶意类文件写入到classpath,如何通过反序列化去加载我们恶意类中重新的readObject方法,就可以达成rce。 题目给的附件是war,然后也有tomcat的路径可以很轻松的得到classpath,然后通过unzip把恶意类解压到classpath下,再通过后门的反序列化去触发即可。(这里一开始没给tomcat路径是因为tomcat的路径是默认的而且可以通过zip路由去确认是否存在该路径,但是一直没有解就当hint去提示师傅们了:) exp: 反弹shell就可以了! prettyjs 出题人ID:byc_404 题目描述: A useless website that gives you express template… link: https://prettyjs.bycsec404.top 附件链接: 链接:https://sigusoft.com/s/174wSQKQH08l-UtniPR0UVA 提取码:1txc https://attachment.h4ck.fun:9000/web/prettyjs/prettyjs.zip https://nctf.slight-wind.com/web/prettyjs/prettyjs.zip flag: prettyjs这题主要的目的是考察选手们如何在服务端不存在+cookie的属性为none的情况下,不用xss拿到下的敏感信息。不过部署题目时因为我的疏忽,导致默认的为,可以直接做到csrf=>xss orz , 而预期此处的应该是的。 下面是预期的思路流程: 审计代码后可知我们需要构造cookie,而cookie所需的ADMIN_USERNAME与COOKIE_SECRET来自admin bot在路由下的template内容。 然而理论上站内并没有xss的地方,因此出发点只能是:让bot访问我们自己服务器,并向题目网站进行跨域请求。 而跨域就要面对SOP(Same Origin Policy)的限制。虽然题目的cookie samesite 属性被设置为,使得cookie在我们服务器的域仍然有效,但通过,等等手段都会受到SOP的限制,请求发出去了,但是response返回后不会让javascript到。
同时服务端还存在一个referer的检查。
此处referer的检查其实也是目前很多主流web服务/中间件在jsonp,视频地址等等接口检查referer的手段:如果存在referer头,判断下是否是从我们自己站过来的。但这样的检查手段绕过也很简单,只需要不带referer即可。 那么现在关键是需要跨域加载且拿到返回值。而我们知道script在进行跨域加载js时是不会受到SOP的限制的,其返回内容也在控制范围内。但是此处script有两个问题需要解决/api/template 内容并不是单纯js/api/template 是post路由 我们依次来解决这两个问题。 第一个问题,首先的内容是由可控的userame+以及一份expressjs 的简单代码组成的。后面一部分代码自然是合法的js代码。那前一部分呢?是不是只要注释掉第一行,整个页面的内容就是合法js了? 答案是肯定的。只不过此处username被限制了,不能使用。那或都不能使用。不过我们完全可以用前端下js的另一种注释方式:来注释掉第一行。这样就让整个的内容成为合法js了。
第二个问题,如何让script用post的方式加载内容?这里我的方法是,利用service worker来更改其对的请求。我们知道service worker 相当于浏览器端的代理,自然能将get改为post.那么最后的解法就水落石出了。 因为要注册service worker,所以这里我本地起一个node server提供http 服务,然后用ngrok 为我们一个临时的https域名。其中sw.js将发往的请求方式由get换成post. server.js solve.html.用于注册service worker exp.html。加载并通过hook的手段拿到ADMIN_USERNAME与COOKIE_SECRET。这里主要是重写与增加了一些函数使得nodejs下的代码放到前端js仍然合法。同时我们要的内容语句是:。我们可以使用来hook 每次访问属性或调用方法的操作。
利用cookie_secret 以及admin_username 就可以计算出flag所需的cookie了。由于服务端使用的是express的signedCookie,我们可以选择替换配置本地起一个一样的server,或者直接计算hmac-sha256签名,带上cookie访问即可。 所以,的存在还是很有必要的,同时也要尽量避免设置samesite属性为。 ps: 这种属于合法javascript的场景,不知道有没有让大家联想到 jsonwebtoken 呢
prettynote 出题人ID:byc_404 题目描述: you see, we do care about security of notes. site link: https://prettynote.bycsec404.top bot link: http://149.28.131.9:8000/ 附件链接: 链接:https://sigusoft.com/s/1hEN3tePC-lLwAaPZq1PpRw 提取码:9gyi https://attachment.h4ck.fun:9000/web/prettynote/prettynote.zip https://nctf.slight-wind.com/web/prettynote/prettynote.zip flag: prettynote 的预期解题流程其实已经在给出的第二个hint里了: 第一步: json csrf. 这个考点貌似是某厂安全岗面试时经常会问到的一个问题XD。关于它其实stackoverflow上早就有解释了:
只有服务端限制了请求必须是之类才能限制此类攻击。 这类csrf攻击的常见场景包括但不限于: php使用post body 并使用解析;go直接用json.unMarshal解析req.Body的数据。本题就可以基于后者这样的场景发起的csrf攻击。
能够csrf后,我们可以就能让bot增加可控的note内容了。 第二步,绕过csp 进行xss.这里注意的CSP 不难发现允许了主站 的src资源 主站唯一有可控返回值的地方在,自然是可以利用的。不过的内容在store站也会作为innerHTML插入。因此这里我们需要稍微构造下内容,让js payload与html 内容在一起,就能在站达成xss。
最后也是最重要的考点。我们拿到了store站的xss,而flag在主站的localStorage中,而localStorage 也是受到跨域保护的
所以我们需要让两个站 same origin。而最后一个hint是 https://developer.mozilla.org/en-US/docs/Web/API/Document/domain ,所以不难想到,我在store站利用xss,设置,两者的domain一致不就可以访问了么。 然而事实是,即使设置了document.domain我们依然访问不到。这也是我自己踩过的一次坑。 假如注意到上面文档中的这样的一个语句
你可能会顺藤摸瓜,google,从而找到MDN 上关于SOP的文档。https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#changing_origin
所以,我们必须要在主站和从站都设置一遍document.domain才能让他们真正同源 知道这点之后其实就好办了。我们留意到主站与store站存在一个互相postMessage的通信 store: main: 可以看到每次store站都会反过来向主站postMessage,主站接收到内容后,则会经过set操作,设置userNote 的属性。而这里的set可以做到任意设置window下的属性
所以最后的方法就是,我们用store站的xss反过来向主站postMessage从而设置主站的document.domain,一致后即可访问localStorage,利用跳转bypass CSP 带出flag exp: 摆就完事了 出题人ID:m1saka 题目描述: 啊对对对 太对辣太对辣 target 1: http://129.211.173.64:8085/public/index.php/index/index/index target 2: http://47.101.160.205:8085/public/index.php/index/index/index flag: nctf{m1saka_wanna_kaibai} 备注: if you get no idea about the problem,there is no harm in diffing the source code with the official one. 摆就完事了2.0 出题人ID:m1saka 题目描述: 卷起来 不准摆! target:http://129.211.173.64:8086/public/index.php/index/index/index flag: nctf{m1saka_wanna_marryliyuu} 构建题目的时候打了tp5未开启强制路由导致rce的补丁代码,结果上题的时候上的时候用了另一个文件夹下的备用题目,导致很多队伍开始直接非预期rce,我还在想是不是waf给的简单导致有的师傅利用mysql写任意文件rce,直到跑去问了一位师傅的payload。。我先是修复了非预期,部署2.0并且修改原题权限要花费一些时间,给做题师傅们带来的不便还请谅解。考点:thinkPHP5.0 sql盲注 www.zip给出源码 原本漏洞的影响范围是5.0.13<=ThinkPHP<=5.0.15,题目环境给的是thinkPHP5.0.16,因为在5.0.16中官方修复了insert 方法注入需要传入的参数判定
大家查看源码可以发现,在这个case下还有一个’exp’可以利用,但是此字符串被thinkPHP过滤掉了,不能利用。本题删除了对exp的过滤,所以exp可以作为触发点触发sql注入。 M1sakaM1yuu.php控制器定义如下: 有很多师傅在《摆就完事了2.0》中使用如下url访问控制器函数失败: 但在《摆就完事了》中这样访问能成功访问,于是觉得题目环境有问题来找我私聊,在此给出统一sigusoft: 出题的时候特意定义了一个使用驼峰命名法的控制器M1sakaM1yuu,在thinkPHP官方文档中,访问的正确方式应该是index/m1saka_m1yuu/index,中间使用下划线隔开,但是兼容了index/M1sakaM1yuu/index这样的访问方式,这也是在《摆就完事了》中此访问方式能访问到的原因。但是在《摆就完事了2.0》中我加上了官方补丁取消非预期解法,官方补丁不允许路由中存在大写字母,所以会返回404。希望大家以后在开发和代码审计时能注意到这个细节。 这个漏洞很多师傅应该都复现过,复现过程中会将config.php做如下设置:
这样能够看到回显,更加直观也方便调试。但是实战环境中这种理想环境极少出现,大部分情况下我们是得不到回显的,所以盲注更加贴合实战,这也是出题时考虑到的因素。 定义了一个waf函数,主要是ban了mysql可以写文件的函数,防止rce。要想实现mysql读取文件,需要给mysql很高的权限,并且知道所在文件的绝对路径。给出exp: 在字段名的时候得知flag的绝对路径,直接load_file()函数加载就行。非预期: tp5全版本未开启强制路由导致rce,直接cat /flag就行 ezsql 出题人ID:N1k0la 题目描述: 这还能注入吗 http://129.211.173.64:3080/login.php 附件链接: http://129.211.173.64:3080/www.zip flag: NCTF{3v3ryth1ng_notfantast1c:)} 另一种解法是用$1 Pwn login 出题人ID: 影二つ 题目描述: 附件链接: flag: writeup: vmstack 出题人ID: 影二つ 题目描述: 附件链接: flag: ezheap 出题人ID: 影二つ 题目描述: 附件链接: flag: mmmmmmmap 出题人ID: 影二つ 题目描述: 附件链接: flag: house_of_fmyyass 出题人ID: 影二つ 题目描述: 附件链接: flag: Crypto signin flag: 附件链接:https://upyun.clq0.top/signin.py dsa flag: 附件链接:https://upyun.clq0.top/dsa.py rsa 附件链接: flag: nctf{5a4aec0a-bbd6-4c5b-9d9b-d5f4c49f6ab0} dlp 附件链接: flag: nctf{a88c3430-0548-4443-9280-e962c3d6b74e} Reverse Hello せかい 出题人ID: aiQG_ 题目描述: 附件链接: flag: wp: 丢到ida里, 找到main函数, 按F5, 应该就能看到flag了. 动态调试也可以在打印出的地址处找到flag字符串. Shadowbringer 出题人ID: Xv37h10 题目描述: 附件链接: flag: 本题来源于自己程序设计周的作业,要求是完成一个包含几种简单加解密功能的加解密系统。当时为了整点花活用bitset改写了一遍base64.然后拿了一份网上的代码过来对比凸显自己的加解密代码量小,但老师好像没太看懂bitset 后来变动了一下加密流程,就出成了这道题。作为除了即送的Hello せかい之外第一道题,考虑到有很多本校学弟学妹在打,为了不太劝退新人,打算是只卡静态不卡动态,由于用了bitset,静态可能不是特别容易一眼看出base64,但是动调很显然,就是一个改表改padding的古代双重base64,第二遍的表是第一遍的逆序。可以dump出表,也可以静态看init阶段表的构建过程。 放一个加密源代码在这里: 本来是想加密1-解密1-加密2的,但想想没啥意思,就算了。 鲨鲨的秘密 出题人ID: Cynosure 题目描述: 附件链接: flag: 程序一开始存在一处简单的反调试,如果是使用 IDA 等调试器在 main 函数中直接下断点,然后开始运行就会发现会直接退出调试,因为程序在到达断点处已经 exit(0) 了。所以程序直接结束,如果想痛快调试程序,需要对程序做一个 patch 修改程序中原本的指令。 patch 的地址如下:
程序开始申请了一个大小为 0x20 的堆,修改堆的属性为可读可写可执行 这样我们就可以将代码放在这个堆中执行 对于数组,直接下断点动调,dump 下来即可发现是一个 CRC32 table 现在对这一处代码做出解释 首先将 unk_ 处数据,根据 dword_ 中的后 4 个 bit 位确定的数组长度,复制数据到之前申请的堆中 sub_ 函数又对堆中的部分字节做了一定的替换,得到的才是最终执行的代码 由循环可以轻易知道将输入的字符串每两个字母做一次计算进行比较,每次计算的的代码量为33条指令
现在可以直接动态调试观察执行了哪些指令,不必去关心 sub_ 函数中对堆上做了什么数据更改,只需要动态调试观察执行了哪些指令即可,就是做了一个 CRC32 的计算 dump 出 crc32 后的对比的数组,用 python 爆破一下即可,脚本如下 对于每一次指令的执行,除了通过动态调试去观察汇编代码之外,我们也可以通过 trace 功能,跟踪到每一条指令的执行,这里以 ollydbg 的 trace 功能为例。图中右列部分红色指令的位置即是在堆上执行的指令。trace 之后可以直接阅读汇编代码看到每一次循环中执行了什么代码
狗狗的秘密 出题人ID: Cynosure 题目描述: 附件链接: flag IDA 载入,查看程序段,容易发现一个存在名为 SMC 的段,知道是考点是代码自解密
有几处简单的反调试,需要 patch 一下可执行文件,便于我们去调试文件 回调函数中同样存在调试检测,和堆代码进行解密部分,同样需要patch一下,回调函数在创建新线程之前执行对应代码 函数解密使用了一个xtea如果不关系解密过程的话,可以直接动态调试下一个断点,直接跳转到函数被解密完成之后,f5查看伪代码得到真实的执行代码 具体断点只要下在创建线程的函数执行完毕之后函数刚开始执行时或者,执行前就行 伪代码如下 逆向来解决对于这样的地方的一处代码,通过爆破以后可以得到有些v10中数组的取值存在多解的情况,具体解的取值情况如下 如果使用爆破来解决大概会有1.8亿种组合结果,可能会耗费比较久的时间,但是这里v10这个数组实际上就是通过将输入做了一个base47转换的来的 那么原输入的范围应该是在之间,并且对于v10数组,如果给改动其中某一位的话,只会对解密出来的flag的后面部分有影响,前面部分没有任何影响,也就是说,密⽂后部的正确与否不会影响前部的解密。从前到后,手动对密文进行一个个尝试,通过观察解密结果,我们可以最终得到正确的密文,然后解密明文即可。 easy_mobile 前半部分 方程求解 后半部分tea flag Misc Hex酱的秘密花园 题目描述: 附件: flag: 这个题应该有很多做法 因为使用的是exec所以可以玩的花样很多 主要思路其实就是去到类加载器,去加载,然后去执行命令(但是忘ban其他关键词了,直接import也可以 这里不能用括号和引号,所以用然后用列表去我们想要的字符。 主要还是匿名函数的使用和这个符号在python中的用法,以及创建对象时调用的构造函数去绕过小括号的过滤去执行函数 所以这里就给出一种解法,更多解法还请感兴趣的师傅们自己去研究一下 做题做累了来玩玩游戏吧 题目描述: 附件链接: Writeup: 看没有misc题,就把女朋友入门时写的unity项目拿过来做了个游戏题,题目娱乐为主,没啥考点,怎么做都行,本来是出的WebAssembly,考虑到难度换成了本地,分数也是本来是设置了1000,但是觉得失去了游戏乐趣改成了300,可以本地调试改分、逆向拿url或者直接打游戏通关,C#逆向和看源码没区别有手就行,直接查找字符串也可以。 Hello File Format 题目描述: 附件链接: flag: hint: wp: //此题考查数据分析能力 渲染一帧得到的GPU数据, 猜测是图片; 打开看没有任何可识别的文件格式, 文件大小为6,220,800 字节 正好是, 可以猜测是每三个字节表示Red、Green、Blue三种颜色. // 到这里已经可以写个脚本去解析图片, 拿flag了, 但是本题是需要去找到一种表示此类文件的文件格式 百度搜索“图片格式”, 给出了以下几种 图片格式是计算机存储图片的格式,常见的存储的格式有bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp,avif,apng 等. 其中tga格式: 链接 The format can store image data with 8, 15, 16, 24, or 32 bits of precision per pixel – the maximum 24 bits of RGB and an extra 8-bit alpha channel. … Uncompressed 24-bit TGA images are relatively simple compared to several other prominent 24-bit storage formats: A 24-bit TGA contains only an 18-byte header followed by the image data as packed RGB data. … Thirty-two-bit TGA images contain an alpha channel, or key signal, and are often used in character generator programs such as Avid Deko. “文件头之后是RGB图像数据”符合我们的猜测, “24位”为3字节, 符合文件特征. tga文件头只有18字节, 修复起来很简单.(链接内给出了文件头包含的信息, 这里就不列出了) 这里给出一个修复脚本参考. //macOS上可以直接打开.tga格式的图片
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/70526.html