pwnable.kr--pwn游戏之fd

题目描述:


大致告诉我们研究的可能是Linux下的文件描述符。需要我们用ssh链接过去找到flag。于是我们就过去看看:


乍看情况有点像简单nc,我们尝试看看目录下都有什么:


看到flag,那么尝试输出呢?


Permission denied意味着权限被拒绝。我们没有权力访问这个文件。我们还看到有两个文件,一个fd,一个fd.c。我们需要把这个代码趴下来做一个小小的代码审计,这里运用到的命令有这些:

scp(Secure Copy Protocol)是用于在本地系统和远程系统之间安全地传输文件的命令行工具。下面是一些常见的scp命令用法:

  1. 从本地系统复制到远程系统:

     

    bashCopy code

    scp local_file username@remote_host:remote_path

    示例:

     

    bashCopy code

    scp myfile.txt user@192.168.1.100:/home/user/documents/

  2. 从远程系统复制到本地系统:

     

    bashCopy code

    scp username@remote_host:remote_path local_file

    示例:

     

    bashCopy code

    scp user@192.168.1.100:/home/user/documents/myfile.txt /local/path/

  3. 从远程系统复制到本地系统并保持文件名相同:

     

    bashCopy code

    scp username@remote_host:remote_file local_path

    示例:

     

    bashCopy code

    scp user@192.168.1.100:/home/user/documents/myfile.txt .

  4. 从本地系统复制到远程系统并保持文件名相同:

     

    bashCopy code

    scp local_file username@remote_host:remote_path

    示例:

     

    bashCopy code

    scp myfile.txt user@192.168.1.100:/home/user/documents/


    这个scp用于远程传送文件,我们可以把远程服务器的文件复制一份传到本地:



那么在我本地的当前目录就会有这两个文件。我们查看下fd的源代码:

这个代码的大致流程如下:

  1. 接受命令行参数,期望有一个参数传递给程序。
  2. 将传递的参数通过 atoi 函数转换为整数,并减去 0x1234
  3. 使用得到的整数作为文件描述符(File Descriptor),调用 read 函数从文件中读取数据到缓冲区 buf
  4. 将读取到的内容与字符串 "LETMEWIN\n" 进行比较,如果相同则执行一些操作。
  5. 如果比较结果为真,则输出 "good job :)",执行 system("/bin/cat flag"); 命令来显示 flag 文件的内容,并退出程序。

    因此我们需要在执行的时候传入一个参数,使得它能触发system函数。这里蕴含了一个小小的知识点。就是在read这个函数的第一个参数,如果这个文件描述符为0则为标准输入输出,也就是从用户终端读取数据放入buf中。因此我们需要使fd为0。才能触发后续流程。atoi这个函数会把我们传入的数据变成整数,因此我们输入的时候不能传入0x1234。


    我们需要传入4660,试验一下:


    成功走到else语句。再通过strcmp判断即可,意味着如果我们输入LETMEWIN,程序讲进入if语句。(因为判断成功后strcmp返回的是0,再取反为真)我们尝试一下:


    本地成功,再去远程服务器执行下,得到flag:


    通过这题我们能学到ssh远程链接的一些操作以及scp从远程服务器复制文件的操作。并且参杂了一些代码审计的思想。并找到漏洞成功执行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全新的FL studio21.2版支持原生中文FL studio2024官方破解版

FL studio2024官方破解版是一款非常专业的音频编辑制作软件。目前它的版本来到了全新的FL studio21.2版,支持原生中文,全面升级的EQ、母带压线器等功能,让你操作起来更加方便,该版本经过破解处理,用户可永久免费使用&a…

【DevOps】Git 图文详解(一):简介及基础概念

Git 图文详解(一):简介及基础概念 1.简介:认识 Git2.基础概念:Git 是干什么的?2.1 概念汇总2.2 工作区 / 暂存区 / 仓库2.3 Git 基本流程2.4 Git 状态 1.简介:认识 Git Git 是当前最先进、最主…

Python---列表 集合 字典 推导式(本文以 字典 为主)

推导式: 推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:列表…

【漏洞复现】OneThink前台注入漏洞

漏洞描述 OneThink 是一个基于 PHP 的开源内容管理框架,旨在简化和加速Web应用程序的开发过程。它提供了一系列通用的模块和功能,使开发者能够更轻松地构建具有灵活性和可扩展性的内容管理系统(CMS)和其他Web应用。 免责声明 …

RS485接线方式

用2个触点连接RS485设备——RS485引脚半双工分配: 用4个触点连接RS485设备——RS485引脚全双工分配: 参考文章:RS485引脚说明及接口说明 文章目录 RS485 接线方式引言RS485通信标准简介基本特性差分信号:RS485使用差分信号传输&am…

AOF是什么?

目录 一、AOF是什么? 二、使用AOF 三、命令写入 四、重写机制 4.1 触发AOF 4.2 AOF执行流程 一、AOF是什么? AOF是Append Only File,是Redis中实现持久化的一种方式。以独⽴⽇志的⽅式记录每次命令,重启时再重新执⾏ AOF ⽂件中的…

Day32力扣打卡

打卡记录 买卖股票的最佳时机 IV(状态机DP) 链接 class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:n len(prices)max lambda x, y: x if x > y else yf [[-0x3f3f3f3f] * 2 for _ in range(k 2)]for i in range(k 2…

Vim 从何而来?

Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员,我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” ,但是又多次被程序员们评价为 最受欢迎的 代码编辑…

设计模式—结构型模式之外观模式(门面模式)

设计模式—结构型模式之外观模式(门面模式) 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 例子 我们的电脑会有很多 组件&am…

搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案

Varjo 的人眼分辨率混合现实和虚拟现实头显将医疗专业人员的注意力和情感投入提升到更高水平。借助逼真的 XR/VR,医疗和保健人员可以为最具挑战性的现实场景做好准备! 在虚拟、增强和混合现实中进行最高水平的训练和表现 以逼真的 3D 方式可视化医疗数据…

JS原生-弹框+阿里巴巴矢量图

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

遵循开源软件安全路线图

毫无疑问&#xff0c;开源软件对于满足联邦任务所需的开发和创新至关重要&#xff0c;因此其安全性至关重要。 OSS&#xff08;运营支持系统&#xff09; 支持联邦政府内的每个关键基础设施部门。 联邦政府认识到这一点&#xff0c;并正在采取措施优先考虑 OSS 安全&#xff…

Python框架篇(2):FastApi-参数接收和验证

提示: 如果想获取文章中具体的代码信息&#xff0c;可在微信搜索【猿码记】回复 【fastapi】即可。 1.参数接收 1.1 路径参数(不推荐) 1.代码清单 在app/router下&#xff0c;新增demo_router.py文件,内容如下: from fastapi import APIRouterrouter APIRouter( prefix&qu…

ubuntu 23.04从源码编译安装rocm运行tensorflow-rocm

因为ubuntu22.04的RDP不支持声音转发&#xff0c;所以下载了ubuntu23.04.但官方的rocm二进制包最高只支持ubuntu22.04&#xff0c;不支持ubuntu 23.04&#xff0c;只能自己从源码编译虽然有网友告诉我可以用docker运行rocm。但是我已经研究了好几天&#xff0c;沉没成本太多&am…

SPASS-参数估计与假设检验

参数估计 点估计 点估计用样本统计量的值直接作为总体参数的估计值。如用样本均值直接作为总体均值的估计值,用样本方差直接作为总体方差的估计值等。 常用的点估计法 (1)矩估计法 (2)极大似然估计法 (3)稳健估计法 区间估计 因为点估计直接用样本估计值作为总体参数…

【python基础】用户输入和while循环详解

文章目录 一. 函数input()的工作原理1. 编写清晰的程序2. 使用int()来获取数值输入3. 求模运算符 二. while循环简介1. 使用while循环2. 让用户选择何时退出3. 使用标志4. 使用break退出循环5. 在循环中使用continue 三. 使用while循环处理列表和字典1. 在列表之间移动元素2. 删…

持续集成指南:GitHubAction 自动构建+部署AspNetCore项目

前言 之前研究了使用 GitHub Action 自动构建和发布 nuget 包&#xff1a;开发现代化的.NetCore控制台程序&#xff1a;(4)使用GithubAction自动构建以及发布nuget包 现在更进一步&#xff0c;使用 GitHub Action 在其提供的 runner 里构建 docker 镜像&#xff0c;之后提交到阿…

32位单片机PY32F040,主频72M,外设丰富,支持断码LCD

PY32F040 系列微控制器采用高性能的 32 位 ARM Cortex-M0 内核,宽电压工作范围的 MCU。嵌入高达 128 Kbytes flash 和 16 Kbytes SRAM 存储器,最高工作频率 72 MHz。LQFP64封装两块出头就可以拿到&#xff0c;我们还有开发板和开发资料帮助客户更好的开发。 PY32F040 系列微控…

Python集成学习和随机森林算法

大家好&#xff0c;机器学习模型已经成为多个行业决策过程中的重要组成部分&#xff0c;然而在处理嘈杂或多样化的数据集时&#xff0c;它们往往会遇到困难&#xff0c;这就是集成学习&#xff08;Ensemble Learning&#xff09;发挥作用的地方。 本文将揭示集成学习的奥秘&am…

Rust开发——使用rust实现Redis中hset

一、Redis中hset HSET 是 Redis 中用于在哈希数据结构中设置指定字段的值的命令。哈希是一种类似于字典或映射的数据结构&#xff0c;它存储了键值对的集合&#xff0c;其中每个键都包含多个字段和与这些字段相关联的值。 哈希表在 Redis 中以键值对形式存储&#xff0c;并通…