ctfshow-周末大挑战-parse_url
看了wp之后,学到了一个新技巧
就是在/
用不了的时候,我们可以使用先进行编码,然后在进行解码的方式来进行绕过
例如 eval(base64_decode('c3lzdGVtKCJscyAvIik7'));
这里的话先介绍一下这个parse_url
函数
这里话在ctfshow的web入门里也有
1 |
|
第一关
1 |
|
这里的host的话就是http://xxxx/
里面的xxx,那么这里可控,于是就尝试看能不能进行命令执行
能成功进行命令执行,于是尝试文件读取
这是其中一种解法
这里的 /
用不了是因为在/的后面会被parse_url
解析成path
这是第二种解法
第二关
题目
1 |
|
做这里的时候可以使用bp来做,hackbar可能识别不成功
这里的想法是构造php://input
这里的host是php:
path是//input
然后就可以拼接成include php://input
、
然后在post执行代码就能够成功执行了
第三关
题目
1 |
|
还是考察的拼接方法
本地尝试了一下
可以成功命令执行了
第四关
题目
1 |
|
还是先本地构造来进行尝试
这里发现成功后,这里不能用/
的原因是因为会被识别成path
这里的话使用${PWD::1}
来替代/
也行
不过这里的话要在这个${PWD::1}
的后面加上一个:
,不然不会执行成功
第五关
题目
1 |
|
这里话extract
,考察的是个变量覆盖的题目
1 |
|
这就是这个函数的用法
就是把数组里的key
作为变量名,把数组里的value
作为变量的值
就是一个套娃的过程
1 | $host=scheme |
这里的话传入参数的时候要会#
进行url编码
第六关
题目
1 |
|
这里的话直接写php代码到文件里是不行的,因为存在的?
会被识别成query
我们就是用html文件中的< script language=‘php’>标签来实现php的代码。这里记住,只需写一个< script>,不需要写< /scirpt>,因为/还会被parse_url函数当作path中的内容。
最终paylaod
1 | ?u=http://<script+language="php">system('cd+..;cd+..;cd+..;cat+_f1a_g_1s_h3re');:/var/www/html/1.php |
这里的话用之前的${PWD::1}
来替代/
也是可以的