zoukankan      html  css  js  c++  java
  • 【pwnable.kr】fb

    这是pwnable.kr的签到题,记录pwn入门到放弃的第一篇。

    ssh fd@pwnable.kr -p2222 (pw:guest)

    题目很简单,登录上了ssh后,发现了3个文件:fd,fd.c,flag

    首先下载fd.c

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 char buf[32];
     5 int main(int argc, char* argv[], char* envp[]){
     6     if(argc<2){
     7         printf("pass argv[1] a number
    ");
     8         return 0;
     9     }
    10     int fd = atoi( argv[1] ) - 0x1234;
    11     int len = 0;
    12     len = read(fd, buf, 32);
    13     if(!strcmp("LETMEWIN
    ", buf)){
    14         printf("good job :)
    ");
    15         system("/bin/cat flag");
    16         exit(0);
    17     }
    18     printf("learn about Linux file IO
    ");
    19     return 0;
    20 
    21 }

    题目不是网络数据包题目,登录ssh用户,直接运行即可。

    题目需要一个参数,参数的目的是在第10行,用于构造fd,即第12行 read函数的fd指针。

    fd是一个文件指针,在头文件中直接定义的文件指针有三个stdin、stdout、stderr。分别对应数值为0、1、2,利用这一点,可以解决这个问题。

    read函数特性是如果读取的是一个固定文件,即一次性读完,如果不是则阻塞并等待输出,并且以行单位读取。

    因此,构造fd = 0、1、2均能达到用户输入的值赋给buf变量的效果,类似于web ctf中常用的php://input协议。

    解题时,首先将0x1234转换为10进制,——4660.

    这里也是一个坑,atoi不能转换十六进制的参数变量,比如:

    接下来,输入 ./fd 4661之后,程序阻塞于read()函数处

    ,可输入LETMEWIN

    签到题就踩了坑,离放弃更进一步。

    ps: 晚上游泳去。

  • 相关阅读:
    git push :推送本地更改到远程仓库的三种模式
    GIT版本库回滚【图文版】
    微服务架构的分布式事务解决方案
    断路器-Hystrix的深入了解
    Elasticsearch顶尖高手系列课程推荐
    Dockerfile分离构建LNMP环境部署wordpress
    ELK 聚合查询
    tomcat日志采集
    ELK采集之nginx 之高德地图出城市IP分布图
    Elasticsearch 安装与集群配置
  • 原文地址:https://www.cnblogs.com/p4nda/p/7095399.html
Copyright © 2011-2022 走看看