您现在的位置是:首页 >技术教程 >CTFshow周末大挑战wp网站首页技术教程
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)。