操作系统实验

2016-11-28  本文已影响116人  yingtaomj

Attack1

1. 汇编分析
push %ebp
mov %esp,%ebp
sub $0x48,%esp

其作用是建立栈结构。

之后,

mov $0x80486b9,%eax ; $0x80486b9 contains "%s"
mov 0x8(%ebp),%edx
mov %edx,0xc(%esp)
mov %eax,0x8(%esp)
movl $0x30,0x4(%esp)

其作用是在esp上4字节处赋值0x30,8字节处添加含有%s的内容,在12字节处添加argv[2]即我们输入的第二个内容。

lea -0x38(%ebp),%eax
mov %eax,(%esp)
call 80483fc <snprintf@plt>
movb $0x0,-0x9(%ebp)
lea -0x38(%ebp),%eax
mov %eax,(%esp)
call 80483cc <printf@plt>

其作用是,将esp指向栈上方16个字节处,ebp下方9个字节处赋0,最后打印。

栈结构.png
2. 攻击代码分析
攻击代码截图.png

Attack2

1. 汇编分析
push %ebp
mov %esp,%ebp 
sub $0x38,%esp  %56个字节

其作用是建立栈结构。

movl $0x20,0x8(%esp)  % 将0x20赋给esp上八个字节处
movl $0x0,0x4(%esp)   % 将0x0赋给esp上四个字节处
lea -0x28(%ebp),%eax   
mov %eax,(%esp)  %  将esp指向ebp下方40字节处
call 804839c <memset@plt>  % 对内容进行填充
mov 0x8(%ebp),%eax  % 将argv[2]即我们输入的第二个内容赋给eax
栈结构2.png
movzbl (%eax),%eax % 负责拷贝一个字节,并用0填充其目的操作数的其余各位(0扩展)
and $0x1,%eax 
test %al,%al % 判断是否跳转
jne 8048568 <vuln2+0x56>  % 判断结果是会跳转
mov $0x80486d9,%eax 
mov 0x8(%ebp),%edx  
mov %edx,0x4(%esp)  %  将argv[2]即我们输入的第二个内容赋给esp上方4字节处
mov %eax,(%esp)  % 将$0x80486d9赋给esp
call 80483cc <printf@plt>  % 调用打印函数

2. 攻击代码分析

攻击代码2.png
上一篇 下一篇

猜你喜欢

热点阅读