pwnable.kr--pwn游戏之fd

news/2024/10/17 6:24:48/

题目描述:


大致告诉我们研究的可能是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从远程服务器复制文件的操作。并且参杂了一些代码审计的思想。并找到漏洞成功执行。


http://www.ppmy.cn/news/1222844.html

相关文章

宗老师团队国家工程-园区GIS应用

园区GIS底板 地理信息系统是XXX园区信息化建设的重要支撑系统,以其直观易懂的地图表现及强大的空间分析能力,在应用建设中需求非常强烈。园区GIS底板通过融合GIS引擎、数据治理和各类园区GIS图层形成园区的地理信息系统,支撑园区GIS资源的统…

通过制作llama_cpp的docker镜像在内网离线部署运行大模型

对于机器在内网,无法连接互联网的服务器来说,想要部署体验开源的大模型,需要拷贝各种依赖文件进行环境搭建难度较大,本文介绍如何通过制作docker镜像的方式,通过llama.cpp实现量化大模型的快速内网部署体验。 一、llam…

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同用户的需求。 - 强大的功能和工具&…

到站上海!见证这座零碳园区的绿色低碳新选择

不知不觉中,科士达新能源的零碳足迹已遍布五洲四海,为全球各地,千行百业、千家万户,带去了源源不断的绿色能源和低碳新选择。再次启航,这一站,抵达上海世博园。 小机身,大配置,灵活适…

JavaScript红宝书第七章:迭代器与生成器

JavaScript红宝书第七章:迭代器与生成器 理解迭代迭代器模式可迭代对象可迭代协议什么是工厂函数?实现Iterator接口的内置类型什么是arguments?如何检查是否有迭代接口以及工厂函数 迭代器协议next方法自定义迭代器 提前终止迭代器 生成器定义yield可以…

VSCode打开Json 文件格式化

在VSCode中打开JSON文件时,你可以使用以下步骤来格式化JSON并显示为多行: 使用快捷键: 在打开的JSON文件中,使用快捷键格式化文档。 Windows/Linux:Shift Alt FmacOS:Shift Option F 右键菜单&#xff…

linux高级篇基础理论二(详细文档、LAMP、SHELL、sed正则表达式)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技…

修改CentOS默认mail发件名称

修改CentOS默认的邮件发件名称 要修改CentOS默认的邮件发件名称,可以按照以下步骤进行操作: 打开终端或SSH连接到CentOS服务器。使用root或具有管理员权限的用户登录。编辑postfix配置文件。在终端中输入以下命令: vi /etc/postfix/main.cf…