20155316 Exp1 PC平台逆向破解(5)M

前绪

实验收获与感想

  • 初步从三个途径了解了什么是缓冲区溢出以及如何简单实现它,对汇编与反汇编有更直观的了解。

什么是漏洞?漏洞有什么危害?

  • 漏洞是指机器体制设计时所没有顾及到的、可以被利用的bug,放任漏洞可能会被他人利用、入侵系统。

NOP, JNE, JE, JMP, CMP汇编指令的机器码

指令 解释
NOP 空指令;运行该指令时单片机什么都不做,但是会占用一个指令的时间;当指令间需要有延时(给外部设备足够的响应时间;或是软件的延时等),可以插入“NOP”指令
JNE 条件转移指令;ZF标志位为0时跳转
JE 条件转移指令;ZF标志位为1时跳转
JMP 无条件跳转指令;可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出
CMP 该指令用于(通过两数相减的方法)比较两个数的大小,同时会更新标志寄存器

改机器指令

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

操作思路

总思路

  • 通过反汇编查找含有跳转指令的汇编行,修改该部分的机器代码使之跳转至getShell函数(其中getShell等函数地址也通过反汇编查询)

分布思路

反汇编查询相关指令行
  • EIP:80484ba +d7ffffff= 80484ba-0x29正好是8048491(foo首地址)这个值

通过vi编辑器修改相应部分代码
  • 退出编辑前记得将16进制转换为原格式 :%!xxd -r

执行程序,比较修改前后效果

简单BOF注入

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

操作思路

总思路

  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

分布思路

手动测试缓冲区长度
  • 找到1234覆盖了返回地址

用getshell的地址覆盖返回地址
  • 通过构造一个含16进制getshell地址的字符串文件,将字符串注入缓冲区
  • (地址由反汇编查看)

注入shellcode

操作思路

总思路

  • 注入一个shellcode并运行这段shellcode。

分布思路

准备一个shellcode

x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80

修改设置
构造payload
  • 结构:anything+retaddr+nops+shellcode

  • 首先输入攻击命令

  • 找到进程号32549

  • 用gdb进行调试,找到注入buf的内存地址

  • 地址为0xffffd2f0

  • 将地址改为0xffffd2f0

  • 攻击成功

原文地址:https://www.cnblogs.com/protectmonarch/p/8604327.html