20202406 2022-2023-2 《网络与系统攻防技术》实验一实验报告

柠檬掠夺者 2023-03-18 01:04:00

目录

  • 1.实验内容
  • 1.1实验要求:
  • 1.2 实验目标:
  • 2.实验过程
  • 2.1 实验环境配置
  • 2.2 实现实践目标一——直接修改文件内程序,触发getshell函数
  • 2.3 实现实践目标二——利用文件内程序漏洞,使缓冲区溢出,触发getshell函数
  • 2.4 实现实践目标三——编写shellcode代码,将其注入文件并执行
  • 3.问题及解决方案
  • 4.学习感悟、思考等
  • 参考资料

1.实验内容

1.1实验要求:

  • 掌握逆向破解与BOF技术,熟悉反汇编操作,了解linux kali系统下相应程序的基本功能,利用多种方法运行Linux文件pwn1中的代码片段,同时学习注入运行shellcode的方法,夯实基础并加强网络与系统攻防相关能力。

    1.2 实验目标:

  • (1)通过手工修改方式,直接更改pwn1文件的程序执行顺序,触发并运行文件内置getshell函数。
  • (2)搜寻pwn1文件内程序漏洞,利用相应漏洞实现BOF攻击,通过使缓冲区溢出来改变文件内程序执行顺序,触发并运行文件内置getshell函数。
  • (3)编写一段shellcode代码,利用pwn1文件中程序漏洞实现BOF攻击,注入shellcode代码并利用该代码执行与主机的交互操作。

    2.实验过程

    2.1 实验环境配置

  • (1)利用virtual-box虚拟机平台搭建kali Linux 32位操作系统,更换kali源,下载并安装本次实验需要的工具及插件。

img


在官网下载kali磁盘映像后,在v-box中注册虚拟机

img


为提高下载速度,更换中科大源

-(2)下载学习通附件pwn1与prelink并拷贝至虚拟机中。

img


img

-(3)为实现个性化操作,满足实验要求,重命名主机与目标文件pwn1。

img


图中可见本人学号以及姓名拼音

2.2 实现实践目标一——直接修改文件内程序,触发getshell函数

  • 重命名并备份目标文件pwn1后,执行反汇编指令objdump -d pwn1 | more,进而得到程序各函数的汇编指令集合。在诸多汇编指令中找到主函数main并定位至函数foo,观察发现main函数调用foo函数,其对应机器指令为e8 d7ffffff,可见若想触发geshell函数,则只需要修改call指令的目标地址为c3ffffff

img

img

  • 更改目标地址后重新以十六进制格式查看该文件,发现此时主函数main调用的目标函数已经由foo变为了getshell,再次运行该文件,将会显示shell提示符并能够执行shell操作。这说明文件内程序执行顺序修改成功,并且能够正常运行,运行结果如图所示:

img

2.3 实现实践目标二——利用文件内程序漏洞,使缓冲区溢出,触发getshell函数

  • 第一步同样使用反汇编操作,查看foo函数并分析其内部漏洞,根据其程序漏洞发动缓冲区溢出攻击。接着通过反汇编的方法查看getshell函数的内存地址,其地址为0804847d。在确认了目标函数地址和foo函数的缓冲区漏洞后,即可根据漏洞发动缓冲区溢出攻击,通过输入一串过长的数据覆盖函数返回地址来触发目标函数getshell。这里采用的输入数据为11111111222222223333333344444444\x7d\x84\x04\x08。进行相应操作后,成功触发目标函数,结果如下图所示:

img

2.4 实现实践目标三——编写shellcode代码,将其注入文件并执行

  • 首先,需要编写一段待注入的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\。在拥有sellcode代码的基础上,综合上述实践中的BOF攻击策略,最后选择retaddr+nop+shellcode的攻击方法。填入缓冲区的字符串为“32*任意字符 + retaddr + shellcode + 四位返回地址”,向foo函数填入该段字符串后成功实现缓冲区溢出攻击,同时注入并运行了shellcode代码,结果如下图所示:

img

3.问题及解决方案

  • 问题1:在实践过程中发现许多指令(如xxd、execstack、gbd等)无法使用,许多实验必需工具缺少插件
  • 问题1解决方案:在参考kali官方资料后,我发现目前自己手中的kali系统尚不满足实验要求,于是我删除现有的64位kali操作系统,重新下载了32位的kali操作系统。同时更换了下载源,将目前操作系统缺少的实验工具及插件下载齐全。此番操作后,问题得到解决,具备了实验的基本条件。
  • 问题2:在实践过程中遇到了无法编译运行文件的问题,错误反馈为permission deny
  • 问题2解决方案:在查阅并浏览多方资料后发现该问题源于用户的权限不足,于是我利用su root指令获取管理员权限,并使用chmod 755命令获取目标文件的更高执行权限,终于解决了该问题。

4.学习感悟、思考等

  • 实验只是形式而不是目的,理解并掌握相关知识才是做实验的最终目的,为实现这一最终目的,我在图书馆鏖战了三个夜晚,坐而忘道,废寝忘食,将全身心投入其中。终于,在3月17日夜,平时积累的量变形成了质变,我幡然顿悟,茅塞顿开,理解并掌握了本次实验背后的相关知识,欣慰之余却又感触颇深。
  • 回顾这次实验,我不仅在专业课的学习上收益匪浅,更是领悟到了许多深沉的人生哲学。其一,不论是在生活还是在学习中,人必须要时刻保持自我,有时甚至要“特立独行”。请教他人,虽然可以快速解绝自己的疑惑,但终究印象不深,而且会遗漏一些细节,倒不如自己钻研琢磨,查阅资料,在动手实践中亲身积累丰富的经验。其二,在学习生活中,切不可逆来顺受安于现状,要时刻有一种“反骨”精神,人不仅要踏出原来的舒适区,还要有一种“虽千万人吾往矣”的气魄。以本次实验为例,其内容初见好似难于登天,但倘若被它的虚张声势迷惑,便会给自身带来无形的心理压力,大大降低了学习的效率与积极性。对于这种情况,此时就该拿出迎难而上的精神去积极面对,令看似艰难的问题迎刃而解。其三,在学习生活中要培养“不破不立、先破后立”的意识,自己头脑中存储的知识有时并不一定是完全正确的,有些内容很可能因为遗忘而产生偏差,这种时候就要积极纠正错误,及时查缺补漏,不令这些细微的瑕疵成为大患。

参考资料

...全文
56 回复 打赏 收藏 转发到动态 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复

85

社区成员

发帖
与我相关
我的任务
社区描述
网络与系统攻防技术课程作业
网络安全系统安全 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告