20145325张梓靖 《网络对抗技术》 第2周学习总结

本文介绍网络对抗技术中的MAL_逆向与缓冲区溢出基础,包括如何利用缓冲区溢出进行攻击,通过修改可执行文件运行不应被执行的代码,以及使用gdb等工具测试和定位覆盖返回地址的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20145325张梓靖 《网络对抗技术》 MAL_逆向与Bof基础

学习目的

  • 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用:
    • 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行、却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件)
    • 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行、却本不应该执行的代码部分首地址)
    • ......

基础知识

  • objdump -d test :反汇编test
  • more : more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能
  • nop : 空操作指令,执行指令使程序计数器PC加1,占用一个机器周期
  • ebp esp : 寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低址地)
  • bp : 16位 ebp :32位 rbp :64位
  • info r :info registers , 查看寄存器的情况
  • 缓冲区溢出攻击:是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,当覆盖到堆栈中的返回地址时,将会引起程序错误或运行其他程序
  • call : call指令的机器代码表示为4字节(IA32的ATT格式),0x80 ** ** **,后3个字节为跳转到的指令地址到目前下一条指令的地址的偏移量,即 :
    • 后3个字节的值 + eip(目前所运行的call指令的下一条指令的地址) = 新eip(要跳转到的指令的地址)

直接修改机器指令

  • 可执行文件作用:输入什么字符串就返现相同的字符串
    885266-20170227185053188-1795789371.png

  • 修改机器指令后,希望能够运行可执行文件里的另一部分代码(getshell)

  • 使用vi修改机器指令:
    • 找到call指令对应机器代码处:
      885266-20170227185838126-1495756021.png

    • 通过机器指令修改call后的目的地址,使其运转到getshell代码处:
      885266-20170227190137095-1492789600.png

  • 保存关闭vi后,测试可执行代码是否成功跳转运行getshell:(是的)
    885266-20170227190257485-659293561.png

缓冲区溢出

  • 使用gdb测试出覆盖住返回地址的字符是在输入字符串中的第几位到第几位:
    885266-20170227190620079-932258976.png

885266-20170227190639360-1015202277.png

  • 通过上2张图可以比较得知覆盖返回地址的字符位数,并且在后一张中,可以清楚输入字符的顺序在堆栈中存储是反着来的(也就是在eip中是反着顺序的),所以在后面的输入特定字符串时,需要将覆盖返回地址的那几位字符顺序,与实际中机器代码里的getshell首地址反着来,即\x7d\x84\x04\x0a:
    885266-20170227191414673-1735815811.png

测试可执行代码,发现成功运行了getshell代码

转载于:https://www.cnblogs.com/zzjzzjzzj/p/6475879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值