就出了两道web 太菜了 总排名44 eur1ka yyds
web1
Google 搜了一下 是前几天爆出的一个洞 直接打就出来了
web2
<?php
if (isset($_GET['cmd'])) {
$cmd = $_GET['cmd'];
if (!preg_match('/flag/i',$cmd))
{
$cmd = escapeshellarg($cmd);
system('cat ' . $cmd);
}
} else {
highlight_file(__FILE__);
}
?>
这狗题我绕了一天 终于在晚上绕出来了
最开始Google了一下 有很多利用这个函数的方法 比如p牛的
看了好几篇这样的文章 导致思路给我带歪了 一直想用参数注入去执行命令 但是cat参数不太容易产生注入 而且这个题考察的不是执行命令 而是把flag去绕过 后来翻php手册时候去翻到了一个点
猜想如果混入其他不可见字符的话 escapeshellarg() 是不是可以把他转成空白的 整了一个脚本去fuzzy
<?php
for($i=1;$i<=200;$i++){
$cmd = 'fla'.chr($i).'g';
if (!preg_match('/flag/i',$cmd))
{
echo 'nono';
$cmd = escapeshellarg($cmd);
echo $cmd;
echo $i;
echo "<br>";
}
}
放在linux下去跑 发现自128以后 转义之后就真的是转义没了
于是 就打印出128以后的随便一个字符 去传参 就getflag
另外还有一个点 真正的flag路径需要在日志里找
另外还有一个点 真正的flag路径需要在日志里找
这个绕过方法属实牛逼 安恒的题质量还是很高的