通过FTP服务的winsockes录制脚本.docx

上传人:b****8 文档编号:11513071 上传时间:2023-03-02 格式:DOCX 页数:16 大小:59.65KB
下载 相关 举报
通过FTP服务的winsockes录制脚本.docx_第1页
第1页 / 共16页
通过FTP服务的winsockes录制脚本.docx_第2页
第2页 / 共16页
通过FTP服务的winsockes录制脚本.docx_第3页
第3页 / 共16页
通过FTP服务的winsockes录制脚本.docx_第4页
第4页 / 共16页
通过FTP服务的winsockes录制脚本.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

通过FTP服务的winsockes录制脚本.docx

《通过FTP服务的winsockes录制脚本.docx》由会员分享,可在线阅读,更多相关《通过FTP服务的winsockes录制脚本.docx(16页珍藏版)》请在冰豆网上搜索。

通过FTP服务的winsockes录制脚本.docx

通过FTP服务的winsockes录制脚本

通过FTP服务的winsockes录制脚本

测试对象:

网闸

什么是网闸呢?

网闸在GB/T20279-2006《信息安全技术网络和终端设备隔离部件安全技术要求》中的定义是这样的:

“网闸(GAP)”该信息安全部件位于两个不同的安全域之间,通过协议转换手段,以信息摆渡方式实现数据交换,且只有被系统明确要求传输的信息可以通过。

其信息流一般是通用应用服务。

上面提到两个概念协议转换和信息摆渡,下面解释两个概念,此概念出自GB/T20279-2006《信息安全技术网络和终端设备隔离部件安全技术要求》

1)协议转换

在隔离部件中,协议转换的定义是协议的剥离和重建。

在所属某一安全域的隔离部件一端,把基于网络的公共协议中的应用数据剥离出来,封装为系统专用协议传递至所属其他安全域的隔离部件的另一端,在将专用协议剥离,并封装成需要的格式。

2)信息摆渡

信息交换的一种方式,物理传输信道只在传输进行时存在。

信息传输时,信息先由信息源所在安全域的一端传输至中间缓存区域,同是断开中间缓存区域与信息目的所在安全区域的链接;随后接通中间缓存区域与信息目的所在安全区域的传输信道,将信息传输至信息目的所在安全域,同时在信道上物理断开信息源所在安全域与中间缓存区的连接。

在任一时刻,中间缓存区域只与一端安全区域连接。

测试环境

测试环境说明:

1)上述测试环境中内网的客户端PC通过交换机链接到网闸的内网口,外网服务器通过交换机链接到外网口;

2)内网客户端可以通过网闸的代理访问外网应用服务器;

3)访问过程中内网客户端需要设置代理指向网闸内网IP。

4)在这个测试中假设A安装FTP客户端CuteFTP7.0,D安装FTP服务serV-U6.2.3。

测试工具

1)LoadRunner8.1.0.4开发脚本生成负载;

2)CuteFTP7.0FTP客户端,生成FTP业务流;

3)SerV-U6.2设置FTP服务器破解版(没有并发用户限制),仿真FTP服务;

脚本设计

1)客户端通过Socks代理访问FTP服务器,正常流程需要在客户端设置socks代理,然后就可以访问外网的FTP服务器;

2)情况1录制脚本的时候选择FTP协议,直接录制脚本;

3)情况2选择Winsocks协议,录制脚本;

4)在情况2时录制脚本后回放确认是否成功。

录制脚本

1.FTP协议录制

1)打开LRVUG,选择FTP协议开始录制脚本,程序选择CuteFTP7.0;

2)开始录制,执行用户登录,下载文件,退出;

3)停止录制,查看脚本;

结果:

在录制完成后,查看脚本,VUG中看到没有录制到脚本,当时茫然,但具体分析一下应该是有问题的,首先客户端发出去的请求是发向socks代理服务器的,而不是直接发给FTP服务器,所以交互的信息都是socket信息;这样当然不能生成FTP协议的脚本,因为VUG不能捕捉到正常的FTP交互信息,而这写信息都被封装在socks协议中;经过分析我放弃了这种方法;

2.Winsocks协议录制

1)重新选择winsocks协议,程序选择CuteFTP7.0;

2)开始录制,执行用户登录,下载文件,退出;

3)停止录制,查看脚本,

结果:

脚本录制成功,脚本回放失败;分析一般情况下winsocks脚本录制完成后都不能直接回放,需要经过关联和调试后才能通过;脚本如下:

Action()

{

lrs_create_socket("socket0","TCP","RemoteHost=192.168.2.195:

1080",LrsLastArg);

lrs_send("socket0","buf0",LrsLastArg);sendbuf03"\x05\x01\x00"

lrs_receive("socket0","buf1",LrsLastArg);recvbuf12"\x05\x00"

lrs_send("socket0","buf2",LrsLastArg);

sendbuf210

"\x05\x01\x00\x01"

"括"

"\x05\xbb\x00\x15"

lrs_receive("socket0","buf3",LrsLastArg);

recvbuf359

"\x05\x00\x00\x01"

"括"

"\x02"

"纮"

"\x9e"

"220Serv-UFTPServerv6.3forWinSockready...\r\n"

lrs_send("socket0","buf4",LrsLastArg);

sendbuf411

"USERroot\r\n"

lrs_receive("socket0","buf5",LrsLastArg);

recvbuf536

"331Usernameokay,needpassword.\r\n"

lrs_send("socket0","buf6",LrsLastArg);

sendbuf613

"PASS111111\r\n"

lrs_receive("socket0","buf7",LrsLastArg);

recvbuf730

"230Userloggedin,proceed.\r\n"

lrs_send("socket0","buf8",LrsLastArg);

sendbuf85

"PWD\r\n"

lrs_receive("socket0","buf9",LrsLastArg);

recvbuf938

"257\"/d:

/FTP1\"iscurrentdirectory.\r\n"

lrs_send("socket0","buf10",LrsLastArg);

sendbuf106

"FEAT\r\n"

lrs_receive("socket0","buf11",LrsLastArg);

recvbuf11228

"211-Extensionsupported\r\n"

"CLNT\r\n"

"MDTM\r\n"

"MDTMYYYYMMDDHHMMSS[+-TZ];filename\r\n"

"SIZE\r\n"

"SITEPSWD;EXEC;SET;INDEX;ZONE;CHMOD;MSG\r\n"

"RESTSTREAM\r\n"

"XCRCfilename;start;end\r\n"

"MODEZ\r\n"

"MLSTType*;Size*;Create;Modify*;Win32.ea*;\r\n"

"211End\r\n"

lrs_send("socket0","buf12",LrsLastArg);

sendbuf128

"MODEZ\r\n"

lrs_receive("socket0","buf13",LrsLastArg);

recvbuf1316

"200MODEZok.\r\n"

lrs_send("socket0","buf14",LrsLastArg);

sendbuf148

"REST0\r\n"

lrs_receive("socket0","buf15",LrsLastArg);

recvbuf1546

"350Restartingat0.SendSTOREorRETRIEVE.\r\n"

lrs_send("socket0","buf16",LrsLastArg);

sendbuf166

"PASV\r\n"

lrs_receive("socket0","buf17",LrsLastArg);

recvbuf1749

"227EnteringPassiveMode(192,168,5,187,5,125)\r\n"

lrs_send("socket0","buf18",LrsLastArg);

sendbuf186

"LIST\r\n"

lrs_create_socket("socket1","TCP","RemoteHost=192.168.2.195:

1080",LrsLastArg);

lrs_send("socket1","buf19",LrsLastArg);

sendbuf193

"\x05\x01\x00"

lrs_receive("socket1","buf20",LrsLastArg);

recvbuf202

"\x05\x00"

lrs_send("socket1","buf21",LrsLastArg);

sendbuf2110

"\x05\x01\x00\x01"

"括"

"\x05\xbb\x05"

"}"

lrs_receive("socket1","buf22",LrsLastArg);

recvbuf2210

"\x05\x00\x00\x01"

"括"

"\x02"

"纮"

"\x9f"

lrs_receive("socket0","buf23",LrsLastArg);

recvbuf2353

"150OpeningASCIImodedataconnectionfor/bin/ls.\r\n"

lrs_receive("socket1","buf24",LrsLastArg);

recvbuf24137

"x湞"

"\xce"

"1"

"\x0e\xc2"

"0\f"

"\x05\xd0\x1d\x89"

";"

"\xfc"

"\v4层:

M硄"

"\x00\x0e"

"Q㏄1Q橵斲搾"

"\x01"

"盓|y}"

"\xfe\x7f"

"磄S"

"\x0e\x00"

"c}\\\f{&化3"

"\xbe"

"!

渿"

"\x17"

"嗔!

"

"\x11\xc3\x1d\x0f"

"銦2应倆跻钊M穔峠j絇膇6p鰵磪竐[*磒"

"\x88"

"1鲚G"

"\xfb\x1e"

",I\tB"

"\xce\x06\xab\x1b"

"匡"

"\x0f"

"e兼殶桍7h"

"\x1f"

"Y"

"\xfc"

lrs_disable_socket("socket1",DISABLE_SEND);

lrs_close_socket("socket1");

lrs_receive("socket0","buf25",LrsLastArg);

recvbuf2524

"226Transfercomplete.\r\n"

lrs_send("socket0","buf26",LrsLastArg);

sendbuf266

"PASV\r\n"

lrs_receive("socket0","buf27",LrsLastArg);

recvbuf2749

"227EnteringPassiveMode(192,168,5,187,5,126)\r\n"

lrs_send("socket0","buf28",LrsLastArg);

sendbuf2813

"RETR31.txt\r\n"

lrs_create_socket("socket2","TCP","RemoteHost=192.168.2.195:

1080",LrsLastArg);

lrs_send("socket2","buf29",LrsLastArg);

sendbuf293

"\x05\x01\x00"

lrs_receive("socket2","buf30",LrsLastArg);

recvbuf302

"\x05\x00"

lrs_send("socket2","buf31",LrsLastArg);

sendbuf3110

"\x05\x01\x00\x01"

"括"

"\x05\xbb\x05"

"~"

lrs_receive("socket2","buf32",LrsLastArg);

recvbuf3210

"\x05\x00\x00\x01"

"括"

"\x02"

"纮"

"\xa0"

lrs_receive("socket0","buf33",LrsLastArg);

recvbuf3363

"150OpeningASCIImodedataconnectionfor31.txt(26Bytes).\r\n"

lrs_receive("socket2","buf34",LrsLastArg);

recvbuf3422

"x"

"\x9c"

"+扇,V"

"\x00"

"遭"

"\x12\x85\x12"

"d"

"\x0e\x00"

"佋\ti"

lrs_disable_socket("socket2",DISABLE_SEND);

lrs_close_socket("socket2");

lrs_receive("socket0","buf35",LrsLastArg);

recvbuf3524

"226Transfercomplete.\r\n"

return0;

}

脚本分析

1)在上述脚本中建立了三个Socket,分别是Socket0;socket1和socket2,其中Socket0负责FTP命名链的交互,Socket1和Socket2完成了两次数据链的交互;

2)Buf0到Buf7完成了FTP用户的登录过程;Buf8-Buf18完成了FTP的一些命令:

PWD、PEAT等命令;

3)然后创建Socket1,完成数据的下载;

4)数据下载完成后Socket1关闭:

lrs_disable_socket("socket1",DISABLE_SEND);

lrs_close_socket("socket1");

5)下面有重新建立了一个Socket2下载另外的数据完成后关闭

lrs_disable_socket("socket2",DISABLE_SEND);

lrs_close_socket("socket2");

6)看到脚本的尾部,没有发现Socket0的关闭语句,这种情况在VUG中调试脚本的时候是没有问题的,但是,如果都用户并发运行就会出现Socket冲突的问题,所以我们首先加上Socket0关闭的语句;参考Socket1的关闭语句就可以:

lrs_disable_socket("socket0",DISABLE_SEND);

lrs_close_socket("socket0");

7)回放一下脚本,发现出错了,不要着急,中心按照录制脚本的步骤,录制一个相同操作的脚本;

8)比较原来的脚本和新录制的脚本,看看有什么不同,哈哈发现了几处不同,但是很多都是Rec的,这个应该不是关键的地方,因为收到的信息一般影响不是很大,所以继续寻找,被我找到了吧,在看看下面的比较结果:

从上图中我看到SendBuf21的值不同,并且好像是有一位不同,但是我还是茫然,为什么会不同呢,这个值又是从什么地方来的内,在看看上边那个RecvBuf17,小样原来问题在这里,这个BUF21中的这个"\x05\xbb\x0e\xd7"串,是由Buf17中的数据变化而来的,Buf17"227EnteringPassiveMode(192,168,5,187,14,215)\r\n"看看215的16进制是不是d7,14的16进制是不是0e,终于被我找到了,那就把它动态的替换了吧(学名关联);

9)关联

intlrs_save_param(char*s_desc,char*buf_desc,char*param_name,intoffset,intparam_len);

这个函数的意思是,在Buf中查找一个字符串,然后保存到一个LR变量中;

有了他我们就好办了,看看下面的语句:

lrs_receive("socket0","buf17","Flags=MSG_PEEK",LrsLastArg);

lrs_save_param("socket0",NULL,"param2",41,3);

lrs_save_param("socket0",NULL,"param1",44,3);

10)变量变换

但是又遇到一个问题,通过这两个函数取出来的值是两个10进制的数,比如上面的例子取出来的值,param2=14,param1=215;但是我们需要的值是16进制的,所以还需要变化一下,看下面的函数;

n=atoi(lr_eval_string(""));//将LR变量变化为整型付给C语言变量n;

m=atoi(lr_eval_string(""));//将LR变量变化为整型付给C语言变量m;

sprintf(pam,"\\x05\\xbb\\x0%x\\x%x",m,n);//将得到的字符串保存到字符串变量pam中;

lr_save_string(pam,"param");//将字符串C语言变量转换为LR变量Param

11)增加一个标志

经过上面的操作这个脚本可以成功回放了,但是还是会出现一些recvBuf时等待的问题,这是因为每次返回的值的字节数肯能不同;怎么解决这个问题呢,查找帮助后,需要在函数中增加一个标志:

"Flags=MSG_PEEK";这个标志表示不对Buf大小进行检查,如下所示:

lrs_receive("socket0","buf17","Flags=MSG_PEEK",LrsLastArg);

最终脚本

Action()

{

/*通过Sockes代理运行Ftp协议

作者:

质量检测部李刚*/

intn,m;

charpam[20];

lrs_create_socket("socket0","TCP","RemoteHost=192.168.2.195:

1080",LrsLastArg);

lrs_send("socket0","buf0",LrsLastArg);

lrs_receive("socket0","buf1",LrsLastArg);

lrs_send("socket0","buf2",LrsLastArg);

lrs_receive("socket0","buf3",LrsLastArg);

lrs_send("socket0","buf4",LrsLastArg);

lrs_receive("socket0","buf5",LrsLastArg);

lrs_send("socket0","buf6",LrsLastArg);

lrs_receive("socket0","buf7",LrsLastArg);

lrs_send("socket0","buf8",LrsLastArg);

lrs_receive("socket0","buf9",LrsLastArg);

lrs_send("socket0","buf10",LrsLastArg);

lrs_receive("socket0","buf11",LrsLastArg);

lrs_send("socket0","buf12",LrsLastArg);

lrs_receive("socket0","buf13",LrsLastArg);

lrs_send("socket0","buf14",LrsLastArg);

lrs_receive("socket0","buf15",LrsLastArg);

lrs_send("socket0","buf16",LrsLastArg);

lrs_receive("socket0","buf17","Flags=MSG_PEEK",LrsLastArg);

lrs_save_param("socket0",NULL,"param2",41,3);

lrs_save_param("socket0",NULL,"param1",44,3);

n=atoi(lr_eval_string(""));

m=atoi(lr_eval_string(""));

sprintf(pam,"\\x05\\xbb\\x0%x\\x%x",m,n);

lr_save_string(pam,"param");

lrs_send("socket0","buf18",LrsLastArg);

lrs_create_socket("socket1","TCP","RemoteHost=192.168.2.195:

1080",rsLastArg);

lrs_send("socket1","buf19",LrsLastArg);

lrs_receive("socket1","buf20",LrsLastArg);

lrs_send("socket1","buf21",LrsLastArg);

lrs_receive("socket1","buf22","Flags=MSG_PEEK",LrsLastArg);

lrs_receive("socket0","buf23","Flags=MSG_PEEK",LrsLastArg);

lrs_receive("socket1","buf24",LrsLastArg);

lrs_disable_socket("socket1",DISABLE_SEND);

lrs_close_socket("socket1");

lrs_receive("socket0","buf25","Flags=MSG_PEEK",LrsLastArg);

lrs_send("socket0","buf26",LrsLastArg);

lrs_receive("socket0","buf27","Flags=MSG_PEEK",LrsLastArg);

lrs_save_param("socket0",NULL,"param2",41,3);

lrs_save_param("socket0",NULL,"param1",44,3);

n=atoi(lr_eval_string(""));

m=atoi(lr_eval_string(""));

sprintf(pam,"\\x05\\xbb\\x0%x\\x%x",m,n);

lr_save_string(pam,"param");

lrs_send("socket0","buf28",LrsLa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1