您现在的位置是:首页 >技术教程 >CTFshow周末大挑战wp网站首页技术教程

CTFshow周末大挑战wp

My4n 2024-06-17 10:43:07
简介CTFshow周末大挑战wp

前言

本来要看政治的(卑微的周末考期末人),群主突然说有比赛就来玩玩看了。没想到ak了。这里就讲一下我的解题思路。

第一关

这里的parse_url可以查一下文档

看host处,可以在上面执行命令。因为path是通过/来判断的。因此host处不能出现/。我这里是用base64编码绕过的。因为比较懒,这里直接从php文档中抓示例来用了。

?u=//system('`echo dGFjIC9mbGFnX2lzX2hlcmUudHh0 | base64 -d`');/path?googleguy=googley

第二关

变成了文件包含了,一开始我想到的先是日志文件包含,后面发现一直不成功,不太懂是为什么。后面想到用伪协议了。这里因为host处还是不能有/,因此我便用了data伪协议。因为data伪协议可以写成不需要/的写法

 

试了一下发现data没有包括进去,试了一下发现在前面在写一次data:即可写入(:前写什么都行),具体原因是因为冒号前面是属于schema部分的,如下图

 这样我们就可以用data伪协议写入我们想要的php命令了。

 之后就可以getshell了。

?u=data:data:;base64,PD9waHAgc3lzdGVtKCdscyAvJyk7Pz4=

第三关

我这里第三关用到的payload发现改一点点可以直接用到第四关,感觉换汤不换药。

 默认取的是path

那就可以用下面这个payload

?u=data::;base64,PD9waHAgc3lzdGVtKCdscyAvJyk7Pz4=

第一个冒号取scheme部分,第二个冒号往后都属于path部分。 

第四关

这次取的是host部分,并且直接就是系统命令执行。还是老规矩,不能出现/,那也使用base64编码执行系统命令即可。

?u=http://echo dGFjIC8xX2YxYWdfMXNfaDNyZQ== | base64 -d | sh

 第五关

可以发现是变量覆盖。这题最好自己本地复现一下,这样比较好理解其中的内容。更好的观察

 首先extract变量覆盖,不太明白的可以翻一下php文档,这里就不过多叙述了。

可以发现覆盖了很多次,刚好parse_url函数有一种样例是符合这样的

这里面的数组有很多个,完全是够用的,我们host=>user,user=>pass,pass=>query以此类推便可以实现变量覆盖了。我们在本地试验一下。直接把别人的样例带入

发现第一个host里面是hostname,我们只用把hostname改成user,便可以覆盖变量了。我们接着试一下。

 可以看到$$host不再是NULL,变成了username,依次类推,我们把username改成pass继续覆盖。

发现也改变了,因此可以得到这样的构造

 #因为在url中有特殊含义,所以不能直接用。要用%23来代替。

可以发现后面的内容可控了,那我们就直接伪协议来写入命令吧。

成功执行命令 。

payload

?u=fragment://pass:query@user/path?scheme%23data:;base64,PD9waHAgc3lzdGVtKCd0YWMgL19mMWFnXzFzX2gzcmVlJyk7Pz4=

第六关

这道题相比上一道就没有那么绕了。而且也很明显就是写入shell,但是这里有一个问题,就是在host部分不能出现? 因为?后面的内容是query了。不属于host,那么我们可以想一些不用?的开启php标签的方法。很容易可以想到用<script language="php">

我们试一下。

 

前面保留//表示后面的内容才是host部分,我们打开shell.php看看

可以发现执行了php代码,直接写入一句话木马,在用蚁剑连接拿flag

在根目录找到flag

 小结一下

这一次做题做了有点久,做了2个小时,果然还是不太熟练,还需要继续努力。ctfshow都是好玩的题目,能学到很多。(不说了,要复习期末了o(╥﹏╥)o)。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。