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

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

时间:2024-10-09 17:49:05浏览次数:11  
标签:x90 x68 getShell 需要 x2f 地址 2024 2025 20222327

一.实验内容

1.了解Linux系统下的基本操作命令,能够处理一些命令出现的error。
2.掌握了栈与堆的概念以及在进程内存管理中的应用。
3.了解基本的汇编语言指令及其功能。
4.能够深刻理解BoF的原理以及如何运用payload完成BoF的攻击

二.实验过程

任务一 直接修改程序机器指令,改变程序执行流程!

1.通过wincp将文件上传到虚拟机中,将文件改名为pwn20222327后运行objdump -d pwn20222327 | more

2.查找getShell、foo、main函数,图中标注为main函数中需要更改的机器指令

3.由于需要修改到getShell函数的返回地址,同时此处机器指令为补码,所以应该用该条指令的下一地址减去getShell的返回地址即用
4ba-47d,结果为ffffffc3,所以需要将此处标注的d7修改为c3


上图为已经改好的文件,可见此时已经可以访问getShell函数

(任务一与后续任务运行环境不一样,所以会造成界面不同,原因在最后会给出)

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

1.将未修改为文件改名为pwn20222327_2,打开该文件

标注区域显示需要将在堆栈移动0x1c个空间用作缓冲区,在这些空间后需要执行gets操作,存在缓冲区漏洞,我们可以利用漏洞用getShell的返回地址来进行覆盖,进而达到运行getShell函数的目的

我们可以启动gdb来测试什么样的字符串会使这一程序出现错误

我们先输入5555555566666666777777778888888899999999来试验

可以发现eip中为0x39393939

由于我们需要执行getShell函数,所以在实验字符串的基础上我们只需要将原先99999999的位置替换为getShell的返回地址0x0804847d

我们此时需要确定字节的顺序,所以我们用5555555566666666777777778888888898765432来进行检测


由此看见是反向地址,所以我们需要构造55555555666666667777777788888888\x7d\x84\x04\x08\x0a,但是键盘无法输入16进制
所以通过perl构造输入文件input,同时检验input文件是否为设想的字符串

由图可知是符合预期的,此时需要将文件输入运行的程序当中

此时发现运行了getShell证明操作正确,符合预期

任务三 注入Shellcode并执行

1.首先进行stack的设置

2.构造需要注入的payload

perl -e 'print "\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\x90\x4\x3\x2\x1\x00"' > input_shellcode

此时打开另一终端查看进程PID

启动gdb进行调试

设置断点查看buf的地址

在另一终端中回车

和0x01020304挨着的就是我们所要寻找的返回地址的位置,即0xffffcfb0,则
perl -e 'print "A" x 32;print "\xb0\xcf\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\x90\x00\xd3\xff\xff\x00"' > input_shellcode

由上图可知getShell成功运行,试验成功!

三、问题及解决方案

  • 问题1:起初开开心心的用virtualbox上安装openEUler完成了任务一,想着到实验课上完成后续实验,结果在实验课上直接给了我一个惊喜,virtualbox再次提醒我需要重装软件(在之前已经出现过此类问题)
    问题1解决方案:直接卸载,用VMware安装kali系统完成任务二和任务三

  • 问题2:虚拟机缺少gdb导致任务二无法进行

    问题2解决方案:将报错代码粘贴给大模型,直接用大模型给出的代码安装apt和gdb


进行apt的更新

进行gdb的下载

  • 问题3:缺少execstack
    问题3解决方案:从同学那里白嫖了一个execstack安装文件,直接通过sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb 命令进行安装

四、学习感悟、思考等

第一次实验一波三折,主要的实验内容还没有触及的时候先出现的是配置环境和任务所需要的工具配置,配置好环境已经消耗了很多的时间,而后在进行实验内容时就相对较为顺利,因为有老师的讲解、博客上的一步一步的指导以及同学们的帮助。同时我也第一次对缓冲区溢出的攻击有了一个清晰的认知,无论从自己的攻击过程还是一步一步地调试和分析,都需要很多知识的储备,也提醒了我在之后编写程序时需要注意避免缓冲区溢出的漏洞。(尽管写出来的程序没有很大的应用,但是也是一个需要注意的问题)

标签:x90,x68,getShell,需要,x2f,地址,2024,2025,20222327
From: https://www.cnblogs.com/qgomlxg/p/18454750

相关文章

  • NewStar CTF 2024 week1 题解
    1.base题目给了以下内容:Thisisabasequestion!4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D观察给出的字符串发现,字符串由数字0-9以及字母A-F组成,于是推测这可能是一个base16编码,于是将其解码,......
  • 【test】2024.10.8
    次大值思路发现性质,对于一个数\[a[i]\%a[j]\lea[i]\]当他取得最大值时\(a[i]<a[j]\)于是对于前&n-1&大的数,他的贡献值就是他本身,所以我们只需要保存第\(n-1\),\(n-2\)大的数就可以。但是此时要注意第\(n\)大的数的贡献值没有计算,由于\(a[n]\%a[n-2]<a[n-2]\),所以如果他要......
  • 华为OD机试真题-战场索敌-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述有一个大小是N*M的......
  • pgadmin4敏感信息泄露 CVE-2024-9014
    0x01产品描述:        pgAdmin是全球最先进的开源数据库Postgres的领先开源管理工具。 pgAdmin4旨在满足新手和经验丰富的Postgres用户的需求,提供了强大的图形界面,可简化数据库对象的创建,维护和使用。其可以在Linux,Unix,macOS和Windows上使用,以管理PostgreSQL和EDBA......
  • (2024最新毕设合集)基于SpringBoot的乡村书屋小程序-31881|可做计算机毕业设计JAVA、PHP
    摘要随着信息技术的快速发展和互联网的广泛普及,数字化服务的需求不断增长,乡村书屋作为传统的文化服务机构也需要适应这一变革。本研究将使用Java开发技术,通过springboot作为框架,结合微信小程序,和MySQL作为数据存储的技术,开发一套功能齐备可移动的乡村书屋小程序,旨在提升乡......
  • 20222407 2024-2025-1《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1.1.1缓冲区溢出的定义和原因定义:写入缓冲区的数据量超过该缓冲区能容纳的最大限度,造成溢出的数据改写了与该缓冲区相邻的原始数据的情形。原因:(直接)由于代码语言的设计问题、程序员的安全意识问题,程序没有严格的内存越界检查;(根本)冯诺依曼体系的安全......
  • 20222314 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    网络攻防实验报告姓名:陈振烨学号:20222314实验日期:2024/09/29—2024/10/09实验名称:缓冲区溢出和shellcode指导教师:王志强实验要求: 1.掌握NOP,JNE,JE,JMP,CMP汇编指令的......
  • 2024年软件设计师中级(软考中级)详细笔记【3】数据结构(下)(分值5分)
    上午题第3章数据结构下部目录前言第3章数据结构【下】(5分)3.5查找3.5.1查找的基本概念【考点】3.5.2静态查找表的查找方法3.5.3动态查找表3.5.4哈希表3.5.4.1哈希表的定义3.5.4.2哈希函数的构造方法3.5.4.3处理冲突的方法3.6排序3.6.1排序的基本概念3.6.2......
  • 20241009--Java--MyBatis-Plus快速上手(1)
     一、MyBatis-Plus是什么?MyBatis是一个流行的开源持久层框架,用于简化数据库交互。它提供了一个简单的方法来执行数据库操作,同时保留了SQL的灵活性。MyBatis曾经被称为iBatis,是一个半自动化的ORM(Object-RelationalMapping对象关系映射)框架,它允许开发者将Java对象映......
  • PatriotCTF2024 Web Impersonate
    源码:#!/usr/bin/envpython3fromflaskimportFlask,request,render_template,jsonify,abort,redirect,sessionimportuuidimportosfromdatetimeimportdatetime,timedeltaimporthashlibapp=Flask(__name__)server_start_time=datetime.now()server_s......