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总结 - 知乎 (zhihu.com)

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了。

 

第二周轻松拿下~~~

 

posted @ 2023-10-09 17:30  Eddie_Murphy  阅读(49)  评论(0编辑  收藏  举报