探測遠端主機上防火牆允許開放的埠

2021-03-31 08:57:00 字數 2631 閱讀 8910

上次拿到乙個webshell,可是接著遇到麻煩——主機裝了硬體防火牆。雖然發現主機的mssql存在hello溢位漏洞,但是由於防火牆的阻撓始終拿不到shell(反向連線時發現僅僅能夠連線,沒有資料過來),另外又試了n種本地提公升許可權的方法但以失敗告終。鬱悶!後來又想到如果在webshell裡用sqlhello溢位繫結乙個防火牆允許開的埠,那不就ok了。當然這個埠必須是現在關閉著的。

大家都知道如果能夠連線遠端主機的某個埠,那麼這個埠自然是防火牆允許開放的。現在的問題是,現在埠關閉著,如何判斷呢?

這裡我想到有大蝦說過tel***遠端主機埠時,如果很快返回連線失敗就說明埠關閉;如果等了十多秒才返回多半是對方裝有防火牆。這個方法是對的,可是一共有65535個埠,不會讓我慢慢去tel***吧,所以就寫個程式自動去掃。

同埠掃瞄程式類似,這個程式也呼叫winsock的connect函式,但由於埠是關閉的,所以connect會返回乙個錯誤碼10061(連線被拒。由於被目標機器拒絕,連線無法建立);但如果是對方的防火牆攔截了連線請求的話,過段時間就會返回10060錯誤(連線超時)。利用返回的錯誤型別我們就可以判斷該埠是否為遠端主機防火牆允許開放的了。不過這裡注意,如果目標ip不存在主機的話也會超時的哦。

原理搞懂了寫程式也就很簡單了,就是呼叫winsock的connect。關於winsock程式設計參考《windows網路程式設計技術》吧;嗯,另外注意用多執行緒,不然的話,呵呵,一整天都掃不完。多執行緒要使用createthread這個api函式,看看msdn吧。隨便在網上找了個掃瞄器**參考,寫了這個程式,**如下:

#include

#include

#include

#include

#include

#pragma ***ment(lib,"ws2_32.lib")

#define maxthreadcount 100//設定最大執行緒數

#define sumscancount 65535//設定掃瞄埠總數

struct sockaddr_in server;

int threadcount=0;

int dwthrdparam = 1; //createthread的引數,提到前面好計算

unsigned int resolve(char *name)

memcpy(&ip,he->h_addr,4);

}return ip;}

dword winapi scan(lpvoid lpparam )

server.sin_port = htons(port);

if(connect(mysock,(struct sockaddr *) & server,sizeof(server))!=0)

else

closesocket(mysock);

threadcount--;

return 0;

} void thread(int port)

hthread = createthread(

null,                        // no security attributes

0,                           // use default stack size 

scan,                  // thread function

(lpvoid)port,                // argument to thread function

0,                           // use default creation flags

&dwthreadid);                // returns the thread identifier

if (hthread == null)

printf( "createthread failed." );

dwthrdparam++;

threadcount++;

sleep(200);     //延時,否則cpu會用滿……

closehandle(hthread);}

void main(int argc, char* argv)

server.sin_family = af_i***;

server.sin_addr.s_addr = resolve( argv[1] );

printf("starting and waiting............../n");

while( dwthrdparam <= sumscancount )

}while( threadcount!=0 )

wsacleanup();

printf("done!");}

執行程式,填上ip它就會自動探測所有埠,由於那些被過濾的埠大概都差不多要等二十秒,速度比較慢,可以自己設個超時值加快速度;另外也可以修改一下讓使用者自定義掃瞄範圍等等,現在不管了,用得起就行。編譯好的程式這裡可以找到:http://.**nb.***.**/lake2/

soft/portscan.exe

程式做好了當然要拿來用啦,經過漫長的3小時多的掃瞄之後,得到結果:目標主機防火牆只開放80埠。當場暈死!唉,「路漫漫其修遠兮,吾將上下而求索」……

lake2

2005-1-18

探測遠端主機上防火牆允許開放埠

上次拿到乙個webshell,可是接著遇到麻煩 主機裝了硬體防火牆。雖然發現主機的mssql存在hello溢位漏洞,但是由於防火牆的阻撓始終拿不到shell 反向連線時發現僅僅能夠連線,沒有資料過來 另外又試了n種本地提公升許可權的方法但以失敗告終。鬱悶!後來又想到如果在webshell裡用sqlh...

linux開放埠防火牆的命令

1.檢視已開啟的埠 netstat anp 2.檢視想開的埠是否已開 firewall cmd query port 666 tcp 若此提示 firewalld is not running 表示為不可知的防火牆 需要檢視狀態並開啟防火牆 3.檢視防火牆狀態 systemctl status fi...

centOs防火牆關閉,及埠的開放

檢視 firewalld 狀態 systemctl status firewalld開啟 firewalld systemctl start firewalld關閉 firewalld systemctl stop firewalld設定開啟啟用或禁用 firewalld 開機禁用 systemct...