实验四恶意代码实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四恶意代码攻防实验
【实验目的】
通过本实验初步了解远程控制软件的编写方法,了解黑客利用流行的木马软件进行远程监控和攻击的方法,掌握常见工具的基本应用,包括如下几个方面:
✓掌握基于Socket的网络编程。
✓了解缓冲区溢出攻击的基本实现方法。
✓了解恶意脚本攻击的基本实现方法。
✓了解网络病毒的基本特性。
实验过程中,学生需要将实验的结果记录下来,并回答相关思考题,填写到实验报告中。【实验类型】综合型实验
【实验内容】
以下实验内容可根据实验室的具体情况和课时安排的变化进行适当的调整,实验内容中的思考题以书面形式解答并附在实验报告的后面。
需要注意的是,学生在实验过程中要严格按实验指导书的操作步骤和要求操作,且小组成员应紧密配合,以保证实验过程能够顺利完成。
本次实验的主要项目包括以下几个方面:
☑溢出攻击模拟程序的编写、调试;
☑跨站恶意脚本的运用;
☑网页脚本攻击。
具体的实验内容和步骤如下:
【实验环境】
实验设备:Windows XP系统,VMWare系统,Windows 2000/XP虚拟机。
一、缓冲区溢出攻击
编写简单的溢出攻击程序,编译后分别在实验主机和虚拟机中运行。
1.简单原理示例
VC环境下编译以下代码:
#include
#include
char name[]="abcdefghijklmnopqrstuvwxyz";
int main() {
char buffer[8];
strcpy(buffer,name);
return 0;
}
运行编译后的程序,会出现系统下图警告,点击“调试”按钮,根据返回的偏移值可推断出溢出的部位。
2.溢出攻击模拟示例
实验需要使用以下工具:
●OllyDB
●Uedit
首先写一个C++程序2.c,源码:
#include "iostream.h"
int main ( )
{
char name[8];
cout<<"Please type your name: ";
cin>>name;
cout<<"Hello, ";
cout<< name;
cout<<"\n";
return 0;
}
赋值一个名为name的字符类型数组(字符串),其内容空间为8个字节,运行程序时首先提示使用者输入你的名字,当输入后将该值吸入给name,然后以“Hello,你的名字\n”的方式输出。使用VC的lc编译该程序(编译后的程序为2.exe)后,运行…此时若“你的名字”小于或等于8个字节时程序当然能正常运行了,但若超过8个字节时将出现:
这次我们要做的实验就是让该程序溢出,并能跳转到程序的开头重新运行该程序。首先我们运行 2.exe,当程序进行至提示用户输入字符串时,输入一个特殊定制的字符串“aaabbbcccdddeeefff”,在弹出的对话框中按“调试”按钮(这里我是用OllyDB作为系统的主调试器的)进入OllyDB调试模式:
这里我们发现负责下一跳的EIP寄存器的值被覆盖了,其值为66656565,对照ascii 表后发现其值为“feee”,由于寄存器是‘倒转’的,因此其实是“eeef”覆盖了EIP,现在我们可以确认这个输入的字符串中是从第13个字节开始覆盖EIP的,共4个字节。
用OllyDB重新加载2.exe:
我们可以看到该程序起始地址为004041B0,根据字符与地址的对照关系是‘倒转’的原理:
00 40 41 B0
等于
B0 41 40 00
此时打开UltraEdit,输入1,然后按Ctrl+H切换到HEX显示模式,然后在HEX输出界面中输入B0414000:
此时再按Ctrl+H切换回原来的输入模式就可以得到相应的字符了:
按Ctrl+A选中该输出的字符串,将其放在第12个字节之后,如:“aaabbbcccddd癆”,现在我们重新启动2.exe,在输入字符串时输入该段字符串:
如图,无论输入多少次都还是“循环”,溢出成功。
【思考题】溢出攻击提升权限是如何实现的?
二、跨站脚本攻击
假设某站点网站网页文件为index.asp,代码如下:
<% Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
MyNiceSite.
<% End If %>
上述代码执行后,调用page2.asp,回显输入的字符。page2.asp代码如下:
<% Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" Then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName")
End If %>
Hello: <%= strUserName %>
如果,在index.asp中输入,点击提交,观察运行结果。