NewStar2023 web-week2-wp
游戏高手
打开是个飞机大战,还是js写的。
那就很好操作了,直接改源码。
搜那个100000分的相关函数,会找到一个判断函数。
我在firefox上改不了源码,换到Google上做的,直接改成score>1再去随便打两架飞机送了,回显了个什么too low,继续在这个判断函数改。
我直接一不做二不休相关判定和赋值的全改了,然后随便打两架飞机送了出了:
include 0。0
打开就是源码:
文件包含思路一般就是base64转:
?file=php://filter/read=convert.base64-encode/resource=flag.php
或者用rot13转:
?file=php://filter/string.rot13/resource=flag.php
但是这道都给ban了。
去网上搜一下还是能搜到,推荐两篇伪协议文件包含好文:
https://blog.csdn.net/qq_44657899/article/details/109300335
https://baijiahao.baidu.com/s?id=1710140843184029370&wfr=spider&for=pc
这里我用的是把flag.php的内容从UCS-2LE
编码转换为UCS-2BE
编码:
php://filter/read=convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
回显了一个问号,估计解释不出来,直接查看源码:
删去开头的p//(我也不知道为啥梭不出来)直接php脚本梭出来:
ez_sql
打开就是是几个栏,随便点开一个:
url栏上有个id,显然这就是注入点。
首先试试是双引号还是单引号:
单引号:
双引号:
那就是单引号字符型注入。
随便输了个全真语句1' or 1=1 #,直接出了个no:
那就用脚本跑一下看看fuzz了哪些:
推个博客:SQL注入一些过滤及绕过总结_sql注入过滤-CSDN博客
难蚌,全给ban了,我前段时间学的什么异或注入、时间盲注、布尔盲注都用不了,这不应该是新生赛难度啊....
后来转念一想,union都没过滤,估计还是联合注入,非函数关键字试试大写能不能绕过,结果能。
这里我一开始闭合用的是#,但是没回显,我开始差点都以为是时间盲注了,找了半天....
结果最后找到个博客说 # 可能被转义,闭合不了,那我就试试 --+ 闭合:
(提一嘴这里其实or也可以用||。and也可以用&&)
回显正常,游戏结束。
注意到回显五个字段,我选的第二个class_name作为回显点。
联合注入一条龙梭了:
#爆库 ?id=-1' union SELECT 1,database(),3,4,5 --+ #爆表 ?id=-1' union SELECT 1,(SELECT group_concat(table_name) from INFORMATION_SCHEMA.tables WHERE table_schema="ctf"),3,4,5 --+ #爆字段 ?id=-1' union SELECT 1,(SELECT group_concat(column_name) from INFORMATION_SCHEMA.columns WHERE table_schema="ctf" AND table_name="here_is_flag"),3,4,5 --+ #爆数据 ?id=-1' union SELECT 1,(SELECT flag from here_is_flag),3,4,5 --+
Unserialize?
甚至不需要构造pop链。
看到过滤了cat,这里推一个RCE文章:
https://blog.csdn.net/qq_51295677/article/details/122629200
下面直接system()触发,没过滤ls,那我们直接用ls看目录。
直接传payload:
果然啥也没有,直接看根目录。
但是这里提一嘴,我直接运行ls /的空格出来是被替换为加号+的,传参的时候寄了,这里需要人为改成%20(空格的url编码),在我前面有个RCE随笔就遇到过。
看到有个flag文件,这里我采用ca``t的方式绕过:
记得加号改空格:
Upload again!
说是加了点过滤。
还是老样子,本来我想用我在TSCTF-J招新赛用的伪协议姿势,结果不行。
那看来是我想太多了....
那就直接传script版本的,加上截包改包.htacess.png去掉后缀.png,注意script版本的内容里面要加GIF89A绕过文件检测。
然后蚁剑连就出了:
R!!C!!E!!
考点是无参数RCE。
可以看看这三篇文章,对我启发很大:
RCE篇之无参数rce - 学安全的小白 - 博客园 (cnblogs.com)
PHP的无参数RCE - 先知社区 (aliyun.com)
这里一打开是个泄露信息的提示,用dirsearch一扫:
应该是git泄露,直接githack梭:
查看源码:
典型的无参数RCE并且加上了过滤。
借用上面一个博客的解释:
所以正则的含义就是匹配无参数的函数,内部可以无限嵌套相同的模式(无参数函数),将匹配的替换为空,判断剩下的是否只有;
举个例子:
a(b(c()));
可以使用,但是a('b')
或者a('b','c')
这种含有参数的都不能使用
所以我们要使用无参数的函数进行文件读取或者命令执行。
一般有四个思路:
其一为apache服务器下的getallheaders,用标识头进行RCE(本题用的就是这个);
其二为get_define_vars(),思路类似(本题给ban了);
其三为直接利用php特性读文件,scandir是核心(本题给ban了);
其四为利用session_id进行RCE(本题没用session,所以也不行)。
闲话少叙:
var_dump()被ban了,可以用print_r();
current()被ban了,可以用pos();//就是current()函数的别名
end()被ban了不能从最后读,那就用next()一个个试。
(额..这里提一个我做的时候犯的一个低级错误,以为直接在url后面传star,结果传了半天啥也没有,后来才意识到应该访问到这个php文件开始传.......绷不住了....)
这里第一个payload测试能不能有回显:
测试成功,思路对了。
因为我用bp做的,所以最后另写一个参数好像转半天转不出来,我就直接用UA头RCE了:
这是回显失败了,我心急用了两个next,结果梭到下一个头去了执行不出来....
只用一个next试:
回显成功,接下来就是完全无压力的RCE了。
第二周轻松拿下~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通