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

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

时间:2024-10-09 22:14:20浏览次数:1  
标签:20222426 pwn20222426 shellcode 2024 2025 地址 指令 跳转 NOP

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

1.实验内容

1.1NOP, JNE, JE, JMP, CMP汇编指令的机器码:
1.1.1NOP(No Operation)
功能:NOP指令是一条空操作指令,它不做任何事情。执行NOP指令时,处理器的状态(如寄存器值、内存内容等)不会发生变化,只是简单地消耗了一个指令周期。NOP指令通常用于对齐代码、填充空间或作为调试时的占位符。在x86架构中,NOP指令的机器码通常是90(十六进制)。
1.1.2JNE(Jump if Not Equal)
功能:JNE指令是一条条件跳转指令,它检查上一条CMP(Compare)指令或其他影响条件码(如ZF,零标志)的指令的结果。如果比较的结果表明两个操作数不相等(即ZF标志为0),则处理器会跳转到指令中指定的标签或地址处继续执行。JNE指令的机器码会根据跳转的目标地址而变化,但通常它会有一个前缀(如75对于短跳转)和随后的目标地址偏移量。
1.1.3JE(Jump if Equal)
功能:JE指令也是一条条件跳转指令,它检查上一条CMP指令或其他影响条件码的指令的结果。如果比较的结果表明两个操作数相等(即ZF标志为1),则处理器会跳转到指令中指定的标签或地址处继续执行。与JNE类似,JE指令的机器码会根据跳转的目标地址而变化,通常有一个前缀(如74对于短跳转)和随后的目标地址偏移量。
1.1.4JMP(Jump)
功能:JMP指令是一条无条件跳转指令,它导致处理器立即跳转到指令中指定的标签或地址处继续执行。JMP指令可以用来实现循环、函数调用和程序分支等。JMP指令的机器码会根据跳转的目标地址而变化,可以是短跳转(如EB前缀和随后的偏移量)、近跳转(如E9前缀和随后的偏移量)或远跳转(如EA前缀和随后的段地址和偏移量)。
1.1.5CMP(Compare)
功能:CMP指令用于比较两个操作数,但它本身不产生跳转。CMP指令通过从第一个操作数中减去第二个操作数来更新处理器的条件码(如ZF、SF、OF等),这些条件码随后可以被条件跳转指令(如JNE、JE)使用来决定是否跳转。CMP指令的机器码会根据操作数的类型和大小而变化,但通常会有一个操作码(如39用于比较两个寄存器)和随后的操作数(可以是立即数、寄存器或内存地址)。
 1.2掌握反汇编与十六进制编程器
反汇编是指将机器代码转换为目标处理器专用的汇编代码或汇编指令的过程。机器代码是计算机能够直接识别和执行的二进制形式,而汇编代码则是使用汇编助记符编写的,更易于人类理解和编写的代码形式。
十六进制编程器,或称十六进制编辑器,是一种用于以十六进制视图进行文本编辑的软件工具。它允许用户以十六进制的形式查看或编辑文件的二进制数据。
 1.3能正确修改机器指令改变程序执行流程
修改机器指令意味着改变程序中的二进制数据,从而改变程序在执行时的行为,如使用十六进制编辑器直接编辑二进制文件,或通过调试器在运行时动态修改指令。
改变程序执行流程是指通过修改机器指令,使程序在执行时跳转到不同的代码段,或执行不同的操作。
 1.4能正确构造payload进行bof攻击
1.4.1NSR模式指的是一种特定的缓冲区溢出攻击方式,其中N、S、R分别代表不同的部分:
N(Nop Sled/Slide):也称为“滑动/滑行区”,由一系列的NOP(No Operation,无操作)指令组成。NOP指令不做任何事情,仅占用一个指令周期。在NSR模式中,NOP指令用于填充payload的开头部分,以确保即使返回地址被部分覆盖或修改,程序执行流仍然能够“滑动”到正确的shellcode位置。
S(Shellcode):是攻击者希望程序执行的实际恶意代码。在BOF攻击中,shellcode通常用于执行系统命令、打开网络端口或进行其他恶意活动。
R(Return Address):是程序执行完成后应该返回的地址。在BOF攻击中,会修改这个地址,使其指向shellcode的起始位置,从而执行恶意代码。
1.4.2在NSR模式下,payload的构造通常包括以下几个步骤:
1.确定缓冲区大小:需要确定目标程序中的缓冲区大小。
2.构造NOP Sled:根据缓冲区大小,构造一个足够长的NOP指令序列作为payload的开头部分。这个序列的长度应该足够长,以确保即使返回地址被部分覆盖,程序执行流仍然能够“滑动”到shellcode的位置。
3.添加Shellcode:在NOP Sled之后,添加希望执行的shellcode。这个shellcode需要被精确地编码,以确保在目标系统上能够正确执行。
4.设置返回地址:会设置一个返回地址,这个地址应该指向NOP Sled或shellcode的起始位置。在大多数情况下,由于数据的小端方式存储,返回地址需要按照特定的字节顺序(如\x7d\x84\x04\x08)进行编码。
1.4.3进行bof攻击
触发漏洞:向目标程序发送一个精心构造的输入(即payload),来触发缓冲区溢出漏洞。
覆盖返回地址:由于输入的长度超过了缓冲区的容量,因此部分输入会溢出到堆栈的其他部分,包括返回地址。通过精确控制输入的长度和内容,来覆盖返回地址。
执行恶意代码:当程序尝试返回到被覆盖的返回地址时,它会跳转到shellcode的位置,并执行其中的代码。

2.实验过程

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

首先安装好kali虚拟机,下载pwn1文件,修改为pwn20222426。

输入如图的命令对于pwn20222426文件进行反汇编。

一直按enter键找到getshall,foo和main函数,这里可以看到e8 d7 ff ff,要将其修改为e8 c3 ff ff。


输入cp pwn20222426 pwn2对于pwn20222426文件进行保护,再输入vi pwn2进行修改,按照要求查找e8 d7 ff ff,在插入模式里面进行修改,这里要注意:%!xxd,:%!xxd -r和:wq命令。

返回验证发现修改成功。

运行pwn20222426文件,得到shell提示符。
2.2通过构造输入参数,造成BOF攻击,改变程序执行流

重新查看pwn20222426文件。

使用gdb命令调试pwn20222426文件,输入r命令,再输入1111111122222222333333334444444455555555,看到eip的值为0x35353535。

如果输入1111111122222222333333334444444412345678,那么1234会覆盖返回地址,因此只需要修改这四个字符。

这里通过break *0x804849d构造断点。

通过perl命令生成input文件,通过xxd命令查看文件内容,通过输入(cat input;cat) | ./pwn20222426和ls命令进行测试,发现成功调用了getshell函数。
2.3注入Shellcode并执行

execstack -s pwn20222426 //设置堆栈可执行
execstack -q pwn1
X pwn1 //查询文件的堆栈是否可执行
more /proc/sys/kernel/randomize_va_space
2
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
more /proc/sys/kernel/randomize_va_space
0


使用输出重定向将perl生成的字符串存储到文件中:
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
接着输入(cat input_shellcode;cat) | ./pwn20222426注入攻击buf。
重新打开一个终端,输入ps -ef | grep pwn20222426, 查看pwn20222426的进程号。
输入attach 49042,查看进程,再输入disassemble foo,之后设置断点,在第一个终端中按下enter键,在目前的终端里面输入c以及info r esp,查看得到0xffffd37c+0x00000004=0xffffd380,
所以shellcode的地址是0xffffd380,即80 d3 ff ff。

使用输出重定向将perl生成的字符串存储到文件中,命令如图所示。
最后执行(cat input_shellcode;cat) | ./pwn20222426,成功调用getshell函数。
输入ls测试,成功执行。

3.问题及解决方案

  • 问题1:虚拟机无法创建虚拟机:无法打开配置文件,拒绝访问。
  • 问题1解决方案:右键软件WMware Workstation,以管理员身份运行。为方便以后操作,可将WMware Workstation属性兼容性页勾选“以管理员身份运行此程序”。
  • 问题2:execstack安装时无法定位软件包最为棘手。
  • 问题2解决方案:

    输入 sudo apt-get update命令,并且在list文件中输入4条其他指令。
  • 问题3:管道破裂问题,即broken pipe。
  • 问题3解决方案:重新启动虚拟机,恢复正常。

4.学习感悟、思考等

这次缓冲区溢出实验,让我对nsr模式有了更加深入的体会和了解。本次实验虽然成功,但是假如开启地址随机化,很难实现bof攻击,不过我还是认识到了这类漏洞的危险性。同时通过这次实验,让我对Linux命令更加熟悉,比如execstack命令的下载,遇到了很多问题,不过通过查阅资料和自己调试,还是成功解决了问题,积累了一定的经验。

参考资料

标签:20222426,pwn20222426,shellcode,2024,2025,地址,指令,跳转,NOP
From: https://www.cnblogs.com/weihongyu/p/18455271

相关文章

  • 20222401 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本次实验是关于缓冲区溢出攻击的,主要的学习内容如下:1.基本Linux命令objdump:将代码段反汇编,在这次实验中主要是用来找地址的。xxd:实现十六进制与二进制的转换,在这次实验的过程中,主要是有两个地方用到了这个命令。一是在打开文件后进行转换,而是以十六进制打开文件,保证......
  • 【笔记】杂题选讲 2024.10.5(DNF)
    十一杂题选讲-VirtualJudge(vjudge.net)/mnt/e/codes/contests/20241008/sol.md目录[AGC004F]Namori[1406E]DeletingNumbers[1081G]MergesortStrikesBack[1033E]HiddenBipartiteGraph[1254E]SendTreetoCharlie[1012E]Cyclesort[1284F]NewYearandSocialN......
  • 2024.10.9 LGJ Round
    B对于所有\(x\in[0,n],y\in[0,m]\),求执行\(x\getsx+y,y\getsx+y\)若干次后满足\(x=k\)的双元组个数。这个题充分体现我的唐氏。具体地枚举\(x,y\)分别被算了多少次,系数是斐波那契数列,所以项数很少。然后转化为求\(k_1x+k_2y=k\)的方案数,这个我非常唐不会求。只需......
  • 2024自动化保研经验分享(西工成电北邮北航西交复旦计算所自所等等)
            具体的保研黑话、保研流程及注意事项就不说了哈,知乎上有很多大佬的分享非常细致,我就说说我参加的几个夏令营和预推免的具体情况及注意事项一、个人基本情况先上个人基本情况院校:某顶2专业:自动化rk:7%-10%(菜狗,很多院筛都过不了英语:刚过(悲伤竞赛:数模水赛省......
  • 2024/9/30 日 日志
    今天下午进行了国庆假期前的小测。我们需要界面化生成30道四则运算题。在此次测试中,我原打算模仿迷宫游戏的格式将题目尽数输出。但在简化过程多层循环时遇到了问题ij的位置当然可变,但无法保证时在一行中输出不同的题目。加之频繁调整位置让过程变得复杂。以下是滑轮完成。C......
  • 2024/10/8日 日志
    在今天我对之前的小测内容进行了更新和对之前的想法进行了实现,改变了界面化的形式。Count.java点击查看代码importjava.util.ArrayList;importjava.util.Random;publicclassCount{ArrayList<Integer>number1=newArrayList<>();ArrayList<Integer>number2......
  • 2024.10.9训练记录
    下午提高组模拟省流:又被lyy吊打了晚上订正A神秘猜结论题,场上少猜了一点挂了\(18\)分,遗憾。结论:\(ans\in[0,3]\)\(0/1\)可以直接判。\(1\)的情况就是存在一个前缀\(a_{1,i}\)满足出现的数是\(1\)到\(i\)。\(3\)的情况仅当\(a_1=n\)且\(a_n=1\)。场上......
  • 中国移动宽带 IPv6 连接到公网,家庭宽带设置服务器(2024年10月)
    摘要:1、中国移动的宽带,已经支持IPv6,需要宽带光猫上做好设置。2、需要从中国移动的服务器上获取公网IPv6地址。 操作:1、确保宽带WAN连接的前缀获取方式:PrefixDelegation网关的默认登录用户名(user)、密码,在设备的背面有写着。 如果不是,就联系客服,询问宽带终端的超级......
  • 20222303 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容在本周的学习中,重新回顾了栈和堆的概念,还学习了安全漏洞的相关概念,然后聚焦在其中的缓冲区溢出漏洞上,明白了缓冲区溢出的定义及发生的原理,并了解了缓冲区溢出发展历史上的一些经典攻击案例,收获颇丰。在本次的实验中,我掌握了反汇编与十六进制编程器相关知识,同时对NOP,......
  • 2024诺贝尔物理学奖,为什么颁给了人工智能
    瑞典皇家科学院当地时间10月8日宣布,将2024年诺贝尔物理学奖授予约翰·J·霍普菲尔德和杰弗里·E·辛顿,表彰他们在使用人工神经网络进行机器学习的基础性发现和发明。两位获奖者从20世纪80年代起就开展了与物理学相关的人工神经网络的重要工作。这让很多网友“满头问号”。诺贝尔......