漏洞实验1—计算器弹出shellcode
实验1:计算器弹出shellcode
1. 实验条件
- 虚拟机Winxp系统
- shell code调试工具
SCer.exe
- 计算器的shell code代码
shellcode2020.mybin
windbg
和OllyDbg
逆向分析软件
2. 实验原理
- shellcode:一段具有某种功能的可执行的汇编代码,是溢出程序和蠕虫病毒的核心。由攻击端发送到被攻击端一方,以获取被攻击端交互式shell的权限。
- shellcode常见功能
- 获取远程shell类
- 修改系统配置类
- 中转类
- 验证类
- 其他
3. 实验要求
根据实验软件
SCer.exe
和shell code代码shellcode2020.mybin
,通过windbg
逆向分析弹出计算器的漏洞利用详细过程。首先,需要在
shellcode.txt
的开头中加入\xcc
,意为设置断点,运行到shellcode前中断。将
shellcode.txt
拖入SCer.exe
程序中,并将其转成Bin文件。打开
windbg
,并运行SCer.exe
。windbg->File->Attach to a Process
选取SCer.exe
。之后在Command
窗口输入g
,意为继续执行。之后,利用
SCer.exe
执行shellcode功能执行刚生成的shellcode.txt.mybin
,从而可以看到shellcode中断在执行开始前。输入
t
进行步入操作,观察到00e10008
处为动态链接库kernel32.dll
跳转入口,00e10012
为出口。所以在00e10008
处采用p
指令步过,之后发现计算器被调用,即完成了一次shellcode。重新开始,在shellcode开始前的中断处输入
db
查看数据。可以发现00e1001e
开始位置表示的为计算器的命名calc.exe
,其存储形式为16进制ASCII。继续运行步入
00e10001->00e10019->call 00e10003
,之后会将其语句的下一行的数据放入栈中(call+标号的语句含义),所以在走过00e10003
后,ebx被存入00e1001e
,其为存储calc.exe
的地址。之后调用
kernel32.dll
,从而调用计算器。根据实验软件
shellcode2020.exe
通过OllyDbg
逆向分析弹出计算器的漏洞利用详细过程。将
shellcode.exe
拖入到OllyICE
运行调试,定位到主函数。根据数据信息定位
00402000
,而设置断点进行动态调试。步入后发现会将
00402000
地址存入指针,指针再赋值给eax寄存器,eax再传参给ebx,从而同windbg
中相同,传参调用kernel32.dll
动态链接库,继而调用calc.exe
。
针对上述要求形成实验报告提交,并比较两种方法的区别。
通过实验和资料,
Windbg
为指令集操作,属于内核级别调试器,可以调试内核级的代码;Ollydbg
具有窗口化操作界面,具有一定的智能分析能力,为用户态调试器。