二.外部網絡安全性分析
1.數據庫服務的探測
為了安全,可以讓mysql服務運行在內網,但是如果你的機器有外網的接口,MySQL也會自動被綁定在外網上面,暴露在internet中,而且系統會在TCP的3306端口監聽,非常容易被端口掃描工具發現,不能保證數據安全。如果默認,mssql則會打開TCP的1433端口監聽。雖然mssql可以人為的改變監聽端口,但是通過微軟未公開的1434端口的UDP探測可以很容易知道SQL Server使用的什麼TCP/IP端口了。往UDP1434端口
發送一個1個字節的內容為02的數據包,被探測的系統則會返回安裝的mssql服務信息,這些信息包括:主機名稱、實例名稱、版本、管道名稱以及使用的端口等。這個端口是微軟自己使用,而且不象默認的1433端口那樣可以改變,1434是不能改變的。一個典型的返回的信息如下:
ServerName;Sky;InstanceName;sky;IsClustered;No;Version;8.00.194;tcp;3341;np;\\sky\pipe\MSSQL$XHT310\sql\query; 可以發現mssql的tcp端口改成了3341,為攻擊者打開了方便之門!只要會一點socket編程知識,很容易就可以寫出掃描mssql服務的程序,而且,由於利用了udp端口,一般的過濾是很難防范的。 補天的awen寫了個探測程序,用的是c#語言,代碼如下:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
namespace ConsoleApplication3
{
class Class1
{
//創建一個UDPCLIENT實例
private static UdpClient m_ClIEnt;
//LISTEN用來獲取返回的信息
public static string Listen(string hostip)
{
string HostIP = hostip;
IPAddress thisIP = IPAddress.Parse(HostIP);
IPEndPoint host = new IPEndPoint(thisIP,1434);
byte [] data = m_ClIEnt.Receive(ref host);
Encoding ASCII = Encoding.ASCII;
String strData = ASCII.GetString(data);
return strData;
}
//SEND
public static void Send(string hostip)
{
string HostIP = hostip;
byte [] buffer = {02};
//02為要發送的數據,只有02、03、04有回應
int ecode = m_ClIEnt.Send(buffer,1,HostIP,1434);
//ecode用來返回是否成功發送
if(ecode <= 0)
{
Console.WriteLine("發送時出錯:" + ecode);
}
}
//對返回的信息的簡單的處理
public static void OutputInfo(string strdata)
{
string str = strdata;
//str.le
char [] that = {‘;‘,‘;‘};
string [] strofthis =str.Split(that);
//int i= 0
for(int i=0;i{
Console.Write(strofthis);
Console.Write(‘
‘);
}
}
//輸入IP
public static string InputHostIP()
{
Console.Write("enter the ip you want to scan:
");
string hostip =Console.ReadLine();
Console.Write(‘
‘);
return hostip;
}
//EXIT
public static void Exit()
{
Console.WriteLine("if you want to exit ,just input 1
");
int a = Console.Read();
if(a!= 1)
{
Console.WriteLine("if you want to exit ,just input 1
");
Console.Read();
}
else
{
}
}
[STAThread]
static void Main(string[] args)
{
string HostIP;
HostIP = InputHostIP();
Console.WriteLine("Begin to send udp to the host");
m_Client = new UdpClIEnt();
Send(HostIP);
string strData=Listen(HostIP);
OutputInfo(strData);
Exit();
}
}
}