嗨,你好啊,想挑战一下自己么?
我会发布一个有漏洞的PHP脚本,你要做的就是找到这些漏洞。为了增添趣味,你每找到1个漏洞并说明它的风险(最少说一个风险)就会得1分,每提交1个针对相应漏洞的补丁也会得1分(当然,你的补丁要经得起攻击),总共10分。快来看看你能得几分吧!
提示:此脚本中总共有5个漏洞。
挑战场景:
想象一下,你是一家公司的安全专家,现在,公司需要你检查一段PHP脚本是否存在安全隐患。你需要报告漏洞的内容和风险,并提交你的补丁。
注意,要用通俗易懂的语言来报告哦,公司的决策人可能并不是技术专家。
挑战规则:
1、请不要团队合作。虽然这是一个合作的时代,但黑客是孤独的。
2、请不要使用代码分析工具 。难道你高考可以带老师么?相信自己,捷径会害了你的!
挑战要点:
1、1个漏洞+风险评估=1分。
2、1个补丁=1分。
3、不准合作、不准走捷径。
4、一共5个漏洞
PHP代码
if (isset( $_GET["archive"] ))
{
$archive = str_replace(array(";", "|", "&"), "", $_GET["archive"]);
echo "Evaluating $archive...";
if (strpos($_GET["archive"], "..") !== False)
{
$archive = str_replace("..", "", $archive);
$archive = new DOMDocument();
$archive->loadXML(file_get_contents("php://input"), LIBXML_NOENT | LIBXML_DTDLOAD);
echo simplexml_import_dom($archive)->stuff . "\n";
}
$null = "/dev/null";
$create = "-cf " . $null;
$cmd = "tar";
if (isset($_GET["cmd"]))
{
$cmd = $_GET["cmd"];
}
// $sanitized = '$cmd $create $null $_GET["archive"]';
$sanitized = escapeshellcmd("$cmd $create $null " . escapeshellarg($archive));
echo $sanitized;
exec($sanitized, $err);
if (!$err)
{
//echo "Archive unzipped";
if (isset($_GET["file"]))
{
$file = str_replace(array(";", "|", "&"), "", $_GET["file"]);
echo "writing: $file";
// $fileName = $cmd;
$fileName = $cmd . "_" . uniqid();
file_put_contents($fileName, $file);
}
}
}
领取专属 10元无门槛券
私享最新 技术干货