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

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

时间:2024-10-10 11:12:22浏览次数:8  
标签:getShell 函数 2024 2025 地址 指令 pwn20222306txm 20222306 shellcode

1.实验内容

1.1本周学习内容

Linux基础知识
基本的shell命令(例如:ls、cd、cp、touch、cat、su等等)
在Linux中熟练使用编译器gcc、调试器gdb,尤其是gdb调试指令(例如:设置断点break/clear、 启用/禁用断点enable/disable、运行程序run、继续运行continue、单步代码跟入函数step、查看各类信息info、显示调用栈backtrack等)

汇编语言
可以阅读基础的汇编指令(例如:PUSH、POP、JMP、CALL、LEAVE、RET)
熟知esp、ebp、eip等寄存器中信息的作用

掌握反汇编和十六进制编辑

Linux的进程内存管理
32位机器内存4GB,用户态0-3GB,内核态3-4GB
env、argv、argc的含义
.bss、.data、.text的含义
熟知堆、栈的概念

缓冲区、缓冲区溢出漏洞的相关概念
定义概念
形成原因
了解堆溢出、栈溢出的逻辑

1.2实验任务

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

2.实验内容

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

下载目标文件pwn1,将其上传至kali,重命名为pwn20222306txm,使用命令objdump -d pwn20222306txm | more对文件pwn20222306txm进行反汇编。

找到getShell、foo、main的部分。

main函数运行到这里,call语句将调用foo函数。如果按正常流程,EIP存的是下条指令的地址。
此时机器指令为e8 d7 ff ff ff,e8就是跳转,指令意思就是跳转到EIP+d7ffffff位置。
要想让main函数调用getshell,只需要让跳转到的位置是getshell的地址就可以了,即EIP+×××××××× = &getshell。EIP为下一条指令的地址,也就是80484ba。
根据反汇编的结果,getshell的地址为804847d,那么根据计算,××××××××也就是804847d-80484ba,即c3ffffff(补码)。

据上述分析,我们只需要将main函数的call指令的目标地址更换为c3ffffff即可跳转至getshell。
使用vi指令,并使用 :%!xxd 切换至十六进制视图;
用/e8 d7(注意查询时中间需要打个空格)查询到所在位置;
把d7修改为c3,然后使用 :%!xxd -r 转换为原格式,最后保存即可。

再反汇编看一下,call指令是否正确调用getShell。

这次call指令可以正确调用getShell了。

尝试运行代码,发现确实有了命令行。

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

foo函数只预留了56字节的缓冲区,有Buffer overflow漏洞,超出部分会造成溢出,我们的目标是覆盖返回地址,触发getShell函数。

使用gdb对pwn20222306txm程序进行调试时,输入字符串1111111122222222333333334444444412345678,然后使用命令info r查看寄存器eip的值,发现输入的1234(即十六进制的0x34333231)被覆盖到了堆栈上的返回地址。因此,我们只需将这四个字符替换为getShell的内存地址,就可以让程序执行getShell函数。
根据之前的反汇编结果,getShell函数的内存地址为0x0804847d。将该地址替换为原来的返回地址位置,并将其输入给pwn20222306txm,即可成功运行getShell函数。

通过反汇编,我们已经得到了getshell的内存地址是0804847d,那么我们就要将上述位置覆盖成\x7d\x84\x04\x08。

使用xxd指令查看并确认input文件内容。
最后通过管道符“|”,将input输入作为了pwn20222306txm的输入。
成功获取了shell,任务二结束!

任务三 注入Shellcode并执行
找到一段用于攻击的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是启动一个新的/bin/sh shell的机器码,用于后续的攻击操作。
做准备工作,设置堆栈可执行,关闭地址随机化,并进行确认。

这里需要开两个终端。

第一个终端先注入一段攻击buf:

第二个终端使用gdb进行调试,先查询pwn20222306txm的进程号,是8642,然后使用attach 8642进行调试,并设置断点。

断点设在了0x080484ae处,此时注入的东西都在堆栈上,ret完成后就可以调到覆盖的retaddr处。
此时查看寄存器的值:

将栈顶指针地址再加4字节,就是shellcode应该处于的地址,即0xffffd3bc+4=0xffffd3c0。根据机器存储的方式,可以知道应当将“\x1\x2\x3\x4”更换为“\xc0\xd3\xff\xff”,将分析得到的shellcode保存至文件input_shellcode_2。

将input_shellcode_2作为pwn的输入,成功注入shellcode,获取到了shell。

如上图所示,shell获取成功。
任务三结束!

3.问题及解决方案

问题1:在任务一中,使用/e8d7查找要修改的内容失败。

问题1解决方案:在/e8d7中间加上空格,使用/e8 d7来进行查找即可或者采用d7ff查找也是可以的。

问题2:在实验过程中发现许多软件没有下载,比如gdb、execstack。

问题2解决方案:gdb我重新装了虚拟机和kali,之后就自带了,而execstack在输入类似命令后报错“Unable tolocate package 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”命令进行解压与安装,但网络用校园网是不行的,需要自己的流量。

问题3:任务三进程号只有1个。

问题3解决方案:在原来的终端中'ps -ef | grep pwn20222306txm'后,只按一次enter,多按的话就相当于把进程停掉了。

4.学习感悟、思考等

本次实验是网络与系统攻防技术的第一次实验。在我看来本次实验难度并不小,不只是指按照参考资料完整做出来;而是真正搞懂每个指令、每个操作的原理,并转化为自己的理解;还包括针对自己的机器的特殊报错的原因排查、解决方案寻找和测试等。我几乎每一步都会碰到一个很难解决的问题,无论是最开始的虚拟机选择,还是中间的各种权限修改、指令安装,我觉得我可能把所有能踩的坑都踩了一遍。好不容易做到注入攻击buf这一步,结果就因为一个小失误,导致始终成功不了,耗费了大量的时间。后来在自己的琢磨和同学们的帮助下,也是完成了本次实验。同时,在撰写博客的过程中,我也对Markdown格式有了基本的了解,也算是收获颇多。感谢老师的指导和同学们的帮助,之后的实验,我将沉住气,继续锻炼自己钻研的能力。

标签:getShell,函数,2024,2025,地址,指令,pwn20222306txm,20222306,shellcode
From: https://www.cnblogs.com/ming-20222306/p/18455632

相关文章

  • 2024.9.27 模拟赛 CSP5
    模拟赛无T1光题贪心,发现首先让最大的减\(4\),这样最优并且不会涉及向下取整,等到数据范围小了以后直接\(O(n^4)\)暴力枚举。code#include<bits/stdc++.h>usingnamespacestd;inta,b,c,d;intans=1e9;#definemx(x,y)(x>y?(x):(y))#definemi(x,y)(x<y?(x):(y......
  • Camtasia2024破解版下载Camtasia2024安装包永久免费版电脑软件下载
    CamtasiaStudio2024软件:打造你的视频内容宇宙......
  • 【2024版】最简单的Pycharm安装 教程(新手小白都能学会)
    PyCharm安装教程1、点击右边链接→PyCharm安装包我们以专业版为例,下载完成后打开安装包点击下一步先选择安装位置,然后点击下一步勾选所有选项,点击下一步直接点击安装等待安装完成激火后PyCharm就可以使用了PyCharm专业版安装包、集活码获取:点击这里最......
  • 2024你必须要掌握的Idea使用技巧和快捷键
    Hello,大家好,我是Feri,一枚十多年的程序员,同时也是一名在读研究生,关注我,且看一个平凡的程序员如何在自我成长,CodingSir是我想打造一个编程社区,只为各位小伙伴提供编程相关干货知识,希望在自我蜕变的路上,我们一起努力,努力什么时候开始都不晚,我,从现在开始做起!一、前言Hello,大家......
  • 2024-10-10 js 深拷贝常用方法
    1、json序列化以及反序列化leta=JSON.parse(JSON.stringify(b))2、使用lodash库插件没有的话先安装:npmilodash使用方式:import{cloneDeep}from'lodash';leta=cloneDeep(b);ps:我当前使用的版本是@4为什么要使用深拷贝?因为我们在开发中会经常进行赋值......
  • CSP2024 前集训:多校A层冲刺NOIP2024模拟赛04
    前言T1签了。T2一眼后缀数组板子,但是复杂度是\(O(nq\log(n))\)的,极限数据本地\(4\)秒,但如果您会\(O(n)\)求后缀数组的话就直接过掉了,但赛时数据貌似纯随机,遂可以直接过掉,可以优化成\(O(n^2\log(n)+nq)\)或\(O(n^2\log(n)+q)\)的,赛时想打这个但是怕常熟大和上面区别......
  • 多校A层冲刺NOIP2024模拟赛04
    A.02表示法对要求的数二进制拆分,每一位递归求解,大于2就继续拆,是1返回\(2(0)\),是2返回\(2\),由于外层的数比较大,所以要写一个高精除低精点击查看代码#include<bits/stdc++.h>#defineintlonglongconstintmaxn=1e5+10;usingnamespacestd;intn,ans[maxn],top;str......
  • 2024年新课标全国Ⅰ卷数学真题 | 解析+命题细目
    高考真题下载链接2024年新课标全国Ⅰ卷数学真题真题图片版命题细目......
  • 浏览器指纹修改指南2024 - 命令行控制SpeechVoice指纹(七)
    引言在前几篇文章中,我们深入探讨了如何通过修改Chromium源码来定制化SpeechVoice,从而实现浏览器指纹的修改。这些方法虽然有效,但对于一些用户来说,直接修改源码可能显得过于复杂和繁琐。为了简化这一过程,本篇文章将介绍如何通过命令行来自定义浏览器指纹。通过命令行工具,您可......
  • 浏览器指纹修改指南2024 - 修改SpeechVoice指纹(六)
    1.引言在前两篇文章中,我们详细介绍了SpeechVoice在浏览器指纹中的重要性,并通过分析Chromium源码,找到了与SpeechVoice相关的关键实现文件和函数。通过这些分析,我们已经为后续的源码修改工作打下了坚实的基础。在本篇文章中,我们将正式进入源码修改的实战环节。我们将一步步指导......