CTFshow 反序列化入门 web259

web259

# 题目前给出的源代码
flag.php

$xff = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
array_pop($xff);
$ip = array_pop($xff);

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

参考:ctfshow web259-CSDN博客

  1. 通关要求大概是发送一个HTTP包,数据包XFF信息为127.0.0.1,但是flag.php会将XFF的数据按照逗分割再传递到数组中,然后又使用两次array_pop 对数组末尾去除两次,再进行判断,所以我们XFF值是127.0.0.1,127.0.0.1,127.0.0.1

  2. 如何把数据包传递到flag.php中,使用PHP原生类SoapClient,是专门用于访问web服务的,SoapClient是Soap的内置类,该内置类有一个 __call 方法,当 __call 方法被触发后,它可以发送 HTTP 和 HTTPS 请求(调用不存在的方法会触发__call,题目中的不存在的方法就是index.php里面的getFlag() ,触发__call 后,发送HTTP请求去访问flag.php

    参考:PHP原生类在安全方面的利用总结-安全客 - 安全资讯平台

  3. 构造数据包

    windows使用nc开启本地监听

    PS D:\All\Study\security\tools\netcat-1.11> .\nc64.exe -lvp 9999

    • 构造第一次

      # req
      $client = new SoapClient(null,array('location'=>"http://127.0.0.1:9999",'uri'=>"127.0.0.1")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值