• 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从远程服务器复制文件的操作。并且参杂了一些代码审计的思想。并找到漏洞成功执行。

  • 相关阅读:
    【ACM学习】【STL】顺序容器的基本功能
    html前端的几种加密/解密方式
    [Spring Framework]AOP配置管理②(AOP通知类型)
    杭州脚本科技公司的面试题【杭州多测师】【杭州多测师_王sir】
    矩阵的c++实现
    对于UDS协议的传输控制协议ISO15765的学习记录
    一周技术学习笔记(第70期)-理解数据库的这两个问题,面试官会对你另眼相看...
    一个开发者自述:我是如何设计针对冷热读写场景的 RocketMQ 存储系统
    Z-DArg-GR-pNA,113711-77-6
    docker Get /v2/: dial tcp: lookup
  • 原文地址:https://blog.csdn.net/qq_30528603/article/details/134442179