前言
近期也是很幸运的接触到了网安领域,大一的时候就听说那时网安方向就业还比较不错,而且很有趣,但一直没有深入了解更别提学习了,正好前段时间九月底学校突然推了个网络安全技术大赛,一开始还以为就是那种写写选择题的,心想着去混混看,结果开赛前一周主办方发来文件的时候一看一个不吱声,30%理论考试70%靠CTF,直接就是一个懵逼 😭 但毕竟都报名了这不是打退堂鼓的时候,寻思着就硬着头皮上吧,从来没接触过这些东西的小小白也是比赛前两天开始跟着一众师傅的足迹摸爬滚打学了点基础功,发现其实还蛮有意思的。但网安学习可不是一两天的事情,太多基础功和基础中的基础需要补了,无奈还有主业在身,只能靠时间慢慢沉淀一些了。
前些阵子正好瞥见NSSCTF平台开了个新生赛,难得碰上(NSSCTF真的很棒,不黑不吹,至少VIP真的很划算,工坊内容真的也很精细 😁 顺带一提我临时抱佛脚就是追着NSSCTF里的一众师傅的WP学习的)就参加了一下打了一天(师傅们别骂啦,我是菜鸡 😱 ),但是有一说一,我来写这个WP并不是因为我厉害,至是顺带记录一下我的 解题 摸鱼过程,一定还有很多优秀师傅的解题WP更加精细完美de! 😘
概况介绍
本篇WP记录的是一部分WEB题(较简单)的解题,还有很多我做不出来呜呜呜 😭 有一些题目甚至是“投机取巧”靠运气得来,另外杂项部分也有几题WP可能考虑后期再发一篇,总之各位师傅就当个乐子看就好啦,当然如果有师傅原意指导一下didi真的感激不尽!!! 😘
部分WEB解题WriteUp
接下来就是正片了,请各位师傅看乐子:
题目1:The future
开启环境后进入页面,直接就是看源代码了:
一看一个不吱声,总感觉有诈,但是看代码确实没啥明显猫腻,而且分值不高所以直接传个flie参数试试?那就直接根目录下flag吧,结果直接就出来了,这运气哈哈哈哈,一般flag都会出现在根目录下,而且一般是“flag”、“f1ag”这样的命名,不过感觉实际思路应该不是这样的,但是运气嘛,就是这样,此题完结 😉
题目2:ez_sql
随便丢个参数提交看看结果,因为看题目名字是个sql相关的猜测是sql注入,但是参数提交的时候感觉有点不对味,变字符串了,而且没特殊符号,应该是加密了,分析一下,可以看到是16进制加密,本来想着用sqlmap梭哈但是玩不来(纯小丑了哈哈哈),还是人工尝试吧
直接手动构造payload检查是否存在SQL注入:
查询框输入2' order 2#虽然少输入了一个by但是弄巧成拙发现直接暴露了sql语句,那现在就好办了,直接手动构造
确定四列,直接构造联合查询payload:
99' union select version(),@@version_compile_os,database(),user()#
为了让我们的联合查询值正确显示出来不被前面的正常数据覆盖,我们选择直接查询一个不存在的id,例如99,成功返回我们需要的目标:
此方案可行,并且是root权限用户,先看看数据库还有哪些表,因此我们直接将其他参数改成需要的内容比如查询数据表等,构造联合查询查看ctf内的数据表:
99' union select null,null,table_name,table_schema from information_schema.tables where table_schema= 'ctf'#
发现flag表,猜解数据表: 成功拿到了数据表内的两个字段:
直接查询id和data:
99' union select 1,2,id,data from flag#
拿下!:
还算是很常规的SQL注入漏洞了,基础功打好就可以套公式做出来咯 😁
题目3:PHP躲猫猫
开启环境进入页面就看到一条提示语让我们传NSS参数值:
开局就是让我们随便传NSS
尝试使用GET传任意值NSS,发现还不够,再加上POST传NSS,这下可以了,让我们看geifile.php,直接打开发现是一部分源代码,根据源代码逻辑分别构造ATM和CTF参数
真不愧是躲猫猫
打开hello.php空页面
既然都说在f1ag.php里面我们就直接打开看看,结果发现404页面,淦!被逗了!!!
这里因为是直接include NSS值,所以不需要管下面那个if NSS=I love CTF了,还记得上面那个hello.php访问是空的吗?直接用PHP伪协议试试:
NSS=php://filter/read=convert.base64-encode/resource=hello.php
成功拿到一段Base64加密字符串表示的源码内容:
PD9waHAgDQokZjFhZ2ZpbGU9J2YxYWflnKguL2YxYWcucGhw6YeM6Z2i77yM5b+r5Y67SW5jbHVkZeeci+eci+WQp++8jOWlh+aAqu+8jOS4uuS7gOS5iOi/mOimgeWGjeivtOS4gOmBje+8jOiOq+S4jeaYr+iXj+S6huS7gOS5iCc7DQovL0luIHRoZSBmdXR1cmUsQ1ZFLTIwMjQtMjk2MSBmaWxlX2dldF9jb250ZW50cygpOiBsZmkgdG8gUkNFLiBEb250IGtvbncgPyBZIHdpbGwga29udy5Hb29kIGx1Y2t5LCBzbWFydCBsaXR0bGUgaGFja2VyDQo=
直接拿去解密看看是什么
<?php
$f1agfile='f1ag在./f1ag.php里面,快去Include看看吧,奇怪,为什么还要再说一遍,莫不是藏了什么';
//In the future,CVE-2024-2961 file_get_contents(): lfi to RCE. Dont konw ? Y will konw.Good lucky, smart little hacker
好像还是没有什么很特别的信息,就只告诉我们是文件包含漏洞,我们试着使用data协议执行ls命令:
NSS=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
无回显,这下是真gg,现在唯一的线索就是从hello.php中的注释:CVE-2024-2961,看起来还是个很新的漏洞,直接去查一下这个漏洞相关信息:
以下内容来自【FreeBUF@知道创宇404实验室】
原文地址:CVE-2024-2961 漏洞分析 - FreeBuf网络安全行业门户
近期,Linux GLIBC的库函数iconv缓冲区溢出漏洞(CVE-2024-2961)的细节/PoC被公开,目前已知的利用方式是可以让PHP的任意文件读取漏洞升级的远程命令执行漏洞。本文将对公开的漏洞细节和PHP利用思路进行分析研究。
1 ICONV漏洞详情
CVE-2024-2961本质上是GLIBC中iconv库的漏洞,我认为该漏洞的发现巧合性很大。该漏洞的发现者是通过fuzz php发现该漏洞的,如果单纯的fuzz iconv库是无法导致crash,就算是fuzz php,一般情况下就算触发了该漏洞也很难导致crash。
补充(PWN佬狂喜):
缓冲区溢出是二进制安全研究领域里很常见的漏洞.所谓缓冲区溢出是指当一段程序尝试把更多的数据放入一个缓冲区,数据超出了缓冲区本身的容量,导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据.攻击者可以利用缓冲区溢出修改计算机的内存,破坏或控制程序的执行,导致数据损坏、程序崩溃,甚至是恶意代码的执行。缓冲区溢出攻击又分为栈溢出、堆溢出、格式字符串溢出、整数溢出、Unicode溢出.
基本原理就是 iconv 在转换 ISO-2022-CN-EXT 时出现越界写入,iconv
是 php://filter/
使用过滤器时会使用的函数.
据原作者描述该漏洞影响PHP 7.0.0 (2015) 到 8.3.7 (2024)近十年php版本的任何php应用程序(Wordpress、Laravel 等)。PHP的所有标准文件读取操作都受到了影响:file_get_contents()、file()、readfile()、fgets()、getimagesize()、SplFileObject->read()等。文件写入操作同样受到影响(如file_put_contents()及其同类函数).
关于该漏洞的其他利用场景:原作者提出了PHP-MySQL注入到RCE,XXE到RCE,phar的替代品,new $_GET'cls';,文件读取反序列化(unserialize())也可以利用CVE-2024-2961这个漏洞将其升级为远程代码执行。总之,只要能控制文件读取或写入端点的前缀,就可能实现远程代码执行(RCE),具体可以看原作者博客。国内师傅还提出了可以用来绕过disable_functions。
不是哥们,这...是不是有点太变态了,140分的web题都这样玩是吧?
直接摆烂做法,既然名字叫f1ag,那就直接伪协议碰碰运气,直接查根目录下的/f1ag.php,没有输出,再试试/f1ag,得到一串字符串:
TlNTQ1RGezI1ZmJmODkzLWIxMWEtNDEyNi05YjM0LTRkMGU2NGRmM2MwMX0K
Base64解码:
NSSCTF{25fbf893-b11a-4126-9b34-4d0e64df3c01}
行了,这辈子真是有了,咳咳,都说运气是实力的一部分,此题完结. 😆
题目4:UploadBaby
为数不多的即经典又简单的文件上传题:
可恶的前端不让我传world马
很经典的前端验证绕过上传题,直接无脑BP抓包修改就行,随便点个文件上传,发现限JPG文件:
写好一句话🐎,这里用剑蚁经典一句话,写好后改名后缀jpg并在BP浏览器内开启拦截执行上传操作:
拦截后改后缀为PHP放行:
观察页面,很明显上传成功:
直接拿到地址连接剑蚁或者直接post传参,接着就是经典ls+cat组合拳了:
毫不费力拿下分数 😋
题目5:怎么多了个没用的PHP文件
描述:notion.php 是一个没啥用的php文件,不知道被设计出来是干什么的,出题人傻啦?
(这个题目当时解题没截图,抱歉了只能暂时文字说明了)
咋一看页面和上面一个前端验证一模一样,难道是出题人真傻了?显然不是,同样的套路不会出现两次,既然上一个是前端验证,那这一个很可能就是后端验证了,尝试上传一些常见/不常见php文件后缀,都被拦截了,很明显不是这样。
出题人特意提醒了有个“没用的php文件”显然不是真的没用,我们访问一下这个页面发现是空白页,肯定也不是直接从这个文件上上手,这个时候我突然想到一个问题,就是所有上传文件都是直链,而且至是限制了一些可执行文件的上传,那么我们思考一下web服务器机制,当我们上传了一个站点的完整文件的时候这个upload目录岂不是就成了一个站点目录?再想想出题人虽然不让我们上传一个php文件但是允许我们上传其他文件,我们试试ini文件是否被ban,结果意料之中上传成功。
那这个时候我们就可以利用站点配置文件的特性了 “当站点任意php被执行时都会检查当前站点的 .user.ini
内的配置并应用” ,那我们就可以通过在 .user.ini
里写入一项包含配置让所有php被执行时都会插入我们的目标内容:
auto_prepend_file=abc.txt
我们在abc.txt内写入PHP一句话木马,分别上传txt文件和这个ini文件,再访问notion.php,尝试使用ls指令:
成功!!!直接cat flag!:
此题完结!(说实话这题确实是考的有点刁了哈哈哈一开始差点没想出来 😂 )
剩下几题要么是没做出来要么是没截图就没发啦!后期有机会再写wp吧。感谢各位师傅观看,不足之处还请批评指正呐 😜 祝各位师傅遇啥啥会,蒙都全对!
评论 (0)