首页 > 其他分享 >20222322 2024-2025-1 《网络与系统攻防技术》实验一实验报告

20222322 2024-2025-1 《网络与系统攻防技术》实验一实验报告

时间:2024-10-11 09:49:32浏览次数:7  
标签:getShell execstack 虚拟机 2024 2025 地址 20222322 shellcode 输入

1.实验内容
1.1本周学习内容
本周学习主要围绕缓冲区溢出漏洞(攻击)展开

1.2实验内容简述
“pwn1”是一个 Linux 可执行文件正常运行时会调用“foo”函数。“foo”函数的功能是对用户输入的字符串进行简单回显。此程序中还包含另一个代码片段“getShell”,具有返回一个可用 Shell 的功能。正常运行时,“getShell”代码不会运行。本次实验就是通过三种不同方法来调用“getShell”函数。

①修改可执行文件内容 
  改变程序中的一个函数调用指令,使其直接跳转到“getShell”函数。通过这种方式在程序执行流程上进行干预,让程序能够执行到“getShell”函数的代码部分。
②利用缓冲区溢出漏洞 
  利用“foo”函数存在的缓冲区溢出漏洞来实现调用“getShell”函数。首先构造一个攻击输入字符串,然后利用这个字符串覆盖返回地址。当程序执行到被覆盖的返回地址时,就会触发“getShell”函数的运行。这种方法是通过改变程序的执行路径。
③注入并运行 shellcode 
  注入一段自己制作的 shellcode,这段 shellcode 是专门用于获取一个交互式的 shell 的机器指令。在注入后,需要运行这段 shellcode,从而实现调用“getShell”函数的目的。这种方法是通过向程序中注入特定的指令序列来达到获取 Shell 的效果。

2.实验过程
2.1修改程序机器指令
下载并将pwn1文件改名,运行可执行文件./pwn20222322,运行正常。

反汇编文件objdump -d pwn20222211 | more
找到main、getshell和foo

将call 8048491中的地址8048491修改为getShell的地址804847d
即:将0xd7ffffff修改为0xc3ffffff。

  • 原因:偏移量=8048491-80484ba=-41。补码表示为0xffffffd7,与第二列机器指令中的0xd7ffffff相吻合。
    要想调用getShell,偏移量为0804847d(getShell函数的首地址)-80484ba=-61=0xffffff3c颠倒为计算机存储内容,为0xc3ffffff

vi pwn20222322 打开文件后为乱码

按esc键,输入:%!xxd并使用/e8 d7快速找到需要修改的地址,将d7改成c3,使用:%!xxd -r转回乱码格式,并使用:wq命令保存退出;
反汇编objdump -d pwn20222322 | more查看机器指令,修改成功。

./pwn20222322运行结果 

 成功获取shell,即成功调用了getShell函数

2.2BOF攻击的方法
用gdb pwn20222322-2调试程序,确认哪几个字符会覆盖到返回地址,输入字符串“11111111222222223333333344444444200408100024”

输入命令 info r查看寄存器eip的值,发现2004(十六进制0x34303032)覆盖到返回地址。

把2004换成getShell的地址0x0804847d,构造字符串“11111111222222223333333344444444\x7d\x84\x04\x08”,
输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input>

输入指令xxd input查看input内容

输入(cat input;cat) | ./pwn20222322-2将input中的字符串作为文件输入。

可以发现程序调用了getShell函数,获取shell。
2.3注入shellcode
使用命令 sudo apt-get install execstack安装设置堆栈可执行,关闭地址随机化,并进行确认。

  • 下载execstack时可能会下载失败,有以下两种办法:
  • 通过以下命令修改设置
    execstack -s pwn20222322-3 //设置堆栈可执行
    execstack -q pwn20222322-3 //查询文件的堆栈是否可执行
    more /proc/sys/kernel/randomize_va_space //查看地址随机化的状态
    echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化

缓冲区28字节,采用nop+shellcode+retaddr构造结构。
构造输入(“\x1\x2\x3\x4”是“shellcode”的占位符,即foo函数返回地址位置,先通过占位符找到返回地址再进行注入),并将其放入“input_shellcode”中,作为pwn的输入。

打开一个新的终端,找到pwn的进程号,并且用gdb调试进程。

  • 输入命令attach 51608
    输入命令disassemble foo,反编译foo函数。

    ret的地址为0x080484ae,输入命令break *0x080484ae,在此设置断点。
    输入c,表示continue,在原终端按下enter。

    输入info r esp查看栈顶指针所在位置。
    使用x/16x 0xffffd39c命令查看该地址处的存放内容。

    再输入(cat input_shellcode; cat) | ./pwn20222322-3,将“input_shellcode”作为pwn20222322-3的输入。

    成功注入shellcode,获取shell。

3.问题及解决方案

  • 问题1:在实验前准备不够充分,对虚拟机配置不够熟悉,下载kali时间较长且忘记虚拟机安装时设置的密码。

    • 问题1解决方案:重新配置虚拟机,实验过程中遇见一些问题也导致需要重新配置虚拟机,现在此次实验的虚拟机配置我可以直接流畅进行。
  • 问题2:实验过程中过程中发现未安装gdb
    使用sudo apt updatesudo apt install gdb命令安装gdb

    此处显示下载失败,

    • 问题2解决方案:是网络设置问题,将虚拟机网络从桥接模式设置为NET模式,再次下载。下载成功后输入gdb检查确认。
  • 问题3:实验过程中发现未下载execstack

    • 问题3解决方案:
      ①使用命令 sudo apt-get install execstack安装,提示无法找到这个execstack工具包
      根据提示使用 sudo apt-get updatesudo apt-get upgrade命令更新后再进行安装execstack
      ②显示仍然安装不成功,最终决定,浏览器外部官网安装,官网链接为:http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb。
      安装好后使用sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb命令进行解压,最终安装成功。
  • 问题4:在注入shellcode过程中,ls找到了文件pwn3(出现这个问题的那次实验文件名没改,实验截图为全部重做截的),但是命令又显示not found。

    • 问题4解决方案:
      是在进行实验时pwn3文件是由pwn1文件复制的,此时的pwn1文件已经在前面的实验中被修改过了。重新传输pwn1文件即可。
  • 问题5:在解决问题4,重新传输pwn1文件过程中,发现不能将文件拖拽进kali,使用WinSCP传输也不行,显示连接被拒绝。

    • 问题5解决方案:
      在尝试切换root用户进行拖拽操作后,虚拟机卡死,最后飞速重新配置虚拟机,重新进行实验。

4.学习感悟
在学习的过程中,对堆栈的认识以及对汇编语言mov、push、pop、call 等常见指令的了解,逐渐令我理解计算机底层运作。通过它们,我仿佛能触摸到计算机内部数据的流动和程序流程的脉络。这不仅让我对计算机硬件与软件的交互有了更深刻的认识,更使我在面对复杂的程序逻辑时,能够从底层原理的角度去分析和解决问题。
通过实验我对虚拟机的操作更加熟练,自己感觉有了质的提升,同时感受到了虚拟机的妙用。缓冲区溢出攻击的实践操作是本次实验的核心亮点。通过实验,我真切地理解了缓冲区溢出的原理。
当向缓冲区写入的数据超过其容量时,这种看似简单的 “越界” 行为,却能引发一系列意想不到的后果。在手工修改可执行文件、构造攻击输入字符串以及注入 shellcode 的过程中,我亲眼目睹了数据是如何突破缓冲区的限制,进而覆盖相邻内存区域的。这让我深刻认识到,程序在运行时,内存的管理是如此关键而又脆弱。每一个字节的写入都需要谨慎对待,稍有不慎,就可能导致程序的异常行为,甚至为攻击者创造可乘之机。例如,在构造 BOF 攻击的输入字符串时,需要精确地计算字符串的长度和覆盖的内存位置,以确保能够成功覆盖函数的返回地址,触发我们期望的 getShell 函数。
成功实现缓冲区攻击的那刻,既让我感受到了成就感,同时也让我对缓冲区溢出的危险性有了更为直观的认识。

5.参考资料

  • 《kali Linux 安装教程(保姆级)》
  • 《逆向及Bof基础实践说明》
  • 《关于找不到execstack的问题》

标签:getShell,execstack,虚拟机,2024,2025,地址,20222322,shellcode,输入
From: https://www.cnblogs.com/lulu-20222322/p/18456587

相关文章

  • 网络安全(黑客技术)2024年三个月自学手册
    ......
  • 网络安全(黑客技术)2024年三个月自学手册
    ......
  • 2024最新免费申请一年期HTTPS证书方法!
    2023年11月中旬,阿里云和华为云首先宣布不再提供一年期免费SSL证书,改为提供三个月有效期的证书。腾讯云也在2024年3月中旬跟进,取消了免费一年期SSL证书的供应。目前,虽然免费一年期SSL证书已经不多见,但还有一些平台如JoySSL提供无限制的免费一年期SSL证书申请,包括单域名证书、......
  • rocky9 修改网卡ip地址的方法2024
    2024-10-11 rocky9修改网卡ip地址的方法#修改配置文件vim/etc/NetworkManager/system-connections/ens160.nmconnection[connection]id=ens160uuid=ebc91b5b-ef24-37ca-8cc8-c0f6e43172fatype=ethernetautoconnect-priority=-999interface-name=ens160timestam......
  • 手把手教|2024最新互联网算法备案办理指南(建议收藏)
    一、什么是互联网算法备案根据《互联网信息服务算法推荐管理规定》《互联网信息服务深度合成管理规定》和《生成式人工只能服务管理暂行办法》相关规定,需要进行互联网算法备案的主体包含具有舆论属性或者社会动员能力的算法推荐服务提供者、深度合成服务提供者、深度合成服务......
  • SketchUp Pro 2024 for Mac 3D建模 草图设计大师软件安装【保姆级教程,简单小白轻松上
    Mac分享吧文章目录SketchUpPro3D建模草图设计大师软件安装完成,软件打开效果一、Mac中安装SketchUpPro3D建模草图设计大师软件——v241️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中3️⃣:应用程序,打开安装的应用软件文件夹,运行SketchUp.app4️⃣:任选示例模型,......
  • 第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)
    能源互联网是实现新一代电力系统智能互动、开放共享的重要支撑技术之一,也是提升能源调度效率,利于我国能源全国联网的重要行业。然而其整体发展仍处于起步阶段,随着ICEIPS2023的成功举办,第三届能源互联网及电力系统国际学术会议(ICEIPS2024)将于2024年10月25-27日在中国广州举行......
  • windowns11更新关闭(2024.10.11最新方法)(通过修改暂停更新参数)
    目前无副作用,原理是使得win11系统更新设置处的暂停更新时间延长来达到暂停更新。方法:win+r,输入regedit打开注册表(如不知道,可以打开“此电脑”访问如下路径:C:\Windows\regedit.exe)2.打开注册表的这个路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settin......
  • C#/.NET/.NET Core优秀项目和框架2024年9月简报
    前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码......
  • Brave编译指南2024 Linux篇-项目结构(二)
    引言在上一部分中,我们介绍了Brave浏览器的基本概念和本指南的目标。现在,我们将深入探讨Brave项目的结构,并开始为编译过程做准备。理解项目结构对于后续的编译过程至关重要,它能帮助我们更好地理解各个组件的作用。同时,充分的准备工作将确保我们的编译过程顺利进行。让我们一起......