首页 > 其他分享 >20222324 石国力《网络与系统攻防技术》实验一

20222324 石国力《网络与系统攻防技术》实验一

时间:2024-10-11 16:23:19浏览次数:1  
标签:可执行文件 攻防 getShell 函数 国力 20222324 地址 字符串 foo

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

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

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

三个实践内容如下:

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
这几种思路,基本代表现实情况中的攻击目标:

运行原本不可访问的代码片段
强行修改程序执行流

1.2 基础知识
该实践需要同学们

熟悉Linux基本操作
能看懂常用指令,如管道(|),输入、输出重定向(>)等。
理解Bof的原理。
能看得懂汇编、机器指令、EIP、指令地址。
会使用gdb,vi。
当然,如果还不懂,通过这个过程能对以上概念有了更进一步的理解就更好了。

2.实验过程
2.1手工修改程序机器指令,改变程序执行流程,直接跳转到getShell函数
2.1.1反汇编1linux可执行文件并分析
将linux可执行文件pwn1改名为20222324,并保存在/home/sgl20222324/Desktop/目录下,反汇编:
image

getShell和foo函数部分:
image

main函数部分:
image

可以看到在main函数中80484b5这一行,汇编指令“call 8048491”调用了位于地址8048491处的foo函数,其对应的机器指令即为“e8 d7ffffff”,“d7ffffff”是补码,表示-41,41=0x29,80484ba+d7ffffff=80484ba-0x29正好是foo函数的地址8048491,想要main函数调用getShell函数,只需将“d7ffffff”改为“804847d(getShell函数地址)-80484ba”即可,计算得到应改为“c3ffffff“。

2.1.2修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff
将可执行文件20222424复制一份到20222424_1:

进入vi编辑器:
image

按ESC键,将显示模式切换为16进制模式:
image

image

查找要修改的内容并修改d7为c3:
image

转换16进制为原格式并保存
2.1.3 检查修改后的可执行文件是否调用getShell函数
反汇编可执行文件:

image

可以看到main函数成功调用getShell函数,此时运行下改后的代码,会得到shell提示符#:
image

至此,手工修改可执行文件成功!

2.2利用foo函数的BOF漏洞,构造攻击输入字符串,覆盖返回地址,触发getShell函数。
2.2.1利用gdb确认如何覆盖返回地址
使用gdb调试可执行文件,输入字符串,观察返回地址的覆盖情况:

image
可以看到系统未安装gdb,在请教了同学之后,解决了这个问题
image

image

最后是这样子的

image

可以看到如果输入字符串1111111122222222333333334444444412345678,那1234四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。只要把这四个字符替换为”0804847d“(getShell 的内存地址),输给可执行文件,就会运行getShell。再进一步,我们看到覆盖的顺序和输入的顺序是相反的,所以最终的字符串应该是”11111111222222223333333344444444\x7d\x84\x04\x08“。

2.2.2构造输入字符串
使用Perl生成包含字符串的文件:

image

使用16进制查看指令xxd查看input文件的内容是否如预期:

image

将input的输入,通过管道符“|”,作为20222324的输入:

image

至此,构造字符串进行BOF攻击成功!

2.3注入Shellcode并执行
2.3.1准备工作
设置堆栈可执行:

image

关闭地址随机化:

image

2.3.2构造要注入的payload
使用anything+retaddr+nops+shellcode的结构:

image

注入这段攻击buf::

image

再开另外一个终端,用gdb来调试20222324这个进程,先找到进程号启动gdb调试这个进程:在另外一个终端中按下回车,再输入C:

image

这里就能看到 01020304了, 0xffffcfbc 即为返回地址的位置。shellcode挨着,所以地址是 0xffffcfc0。
再次修改构造的字符串,注入这段攻击buf:

image

至此,注入Shellcode成功!

3.学习体会
在这次实验中,我通过询问同学,上网查询,了解了通过反汇编可以直接地看到汇编语言、机器指令和寄存器使用。这个是我第一次反汇编的体验,提高了我对汇编语言、机器指令的理解与掌握。

标签:可执行文件,攻防,getShell,函数,国力,20222324,地址,字符串,foo
From: https://www.cnblogs.com/2022234sgl/p/18458672

相关文章

  • 20222415 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本周学习了缓冲区溢出的相关知识,介绍了缓冲区和缓冲区溢出,并介绍了几种缓冲区溢出的实现方式。2.实验过程1.直接修改程序机器指令,改变程序执行流程1.1将目标文件pwn20222415通过共享文件夹放到kali里,运行pwn20222415.1.2输入objdump-dpwn1|more对pwn20222415......
  • 20222319zzs 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1知识回顾1.1.1什么是缓冲区溢出?计算机中,如果程序试图向一个缓冲区填充超出它能够容纳的数据,溢出的数据可能会覆盖其他重要的内存区域,导致程序运行失败甚至崩溃,如果这些溢出数据是精心设计的.则攻击者就可以利用它们指向预先设计的攻击代码(shellcode)(Shellcode是核......
  • 20222322 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容本周学习主要围绕缓冲区溢出漏洞(攻击)展开1.2实验内容简述“pwn1”是一个Linux可执行文件正常运行时会调用“foo”函数。“foo”函数的功能是对用户输入的字符串进行简单回显。此程序中还包含另一个代码片段“getShell”,具有返回一个可用Shell的......
  • 20222308 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本次式样具体内容是通过三种方法,运行pwn1可执行文件,调用getshell。缓冲区溢出作为一种非常致命的攻击,它会使攻击者直接破坏堆栈保护,非法获取数据。完成本次实验,需要具备以下知识和技能基础:创建kali虚拟机,连接网络等这个部分对我来说还是出现了比较大的波折,我的操......
  • 20222403 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本周学习内容1.熟悉基本的汇编语言指令及其功能。2.掌握了栈与堆的概念及其在进程内存管理中的应用以及用户态与内核态的区别。3.熟练运用了Linux系统下的基本操作命令。2.实验过程任务一直接修改程序机器指令,改变程序执行流程下载并解压目标文件pwn1,然后拖入虚......
  • 20222428 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1.1.1安全漏洞简介定义:系统的缺陷或不足。作用:网络攻击和防御的关键点。网络攻击:利用系统漏洞进行攻击。防御:提前发现漏洞并修复。exploit:完整的代码攻击。shellcode:不完整的代码攻击。PoC:验证是否存在漏洞。1.1.2缓冲区溢出的定义和原因......
  • 20222304 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1)反汇编反汇编是指将计算机程序的机器代码转换回其相应的汇编代码的过程。在计算机编程和逆向工程领域中,反汇编是一种常见的技术,用于理解和分析二进制程序的功能和内部结构。通常情况下,程序员编写的源代码会被编译器转换成机器码,这是计算机可以直接......
  • 20222321 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    一.实验内容1实验目标本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想......
  • 20222411 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1基础知识1.1.1NOP,JNE,JE,JMP,CMP汇编指令的机器码(1)NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)(2)JNE:条件转移指令,如果不相等则跳转。(机器码:75)(3)JE:条件转移指令,如果相等则跳转。(......
  • 20222305 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    网络攻防实验报告姓名:田青学号:20222305实验日期:2024/09/29—2024/10/09实验名称:缓冲区溢出和shellcode指导教师:王志强1.实验内容本周学习内容总结:学习了系统安全(缓冲区溢出是重点)主要内容:漏洞简介:定义以及安全漏洞。BOF(缓冲区溢出):直接原因-没有严格的内存越界检查......