pwn ----题目fb

练习平台:http://pwnable.kr/play.php

首先根据提示 用ssh连接

pwnable.kr 2222  网址和端口
fd                   用户
guest            passwd

pwn --题目fb_数字字符

登陆成功 查看文件目录 发现有三个文件

pwn --题目fb_库函数_02

看见flag我上去就是直接打开 但是 提示 没有权限

cat flag

pwn --题目fb_#include_03

所以我查看这三个文件的权限

ls -l

pwn --题目fb_数字字符_04

发现fd文件 有可执行权限 所以执行fd文件 但是他让我输入一个数字 然后提示我去学习linux的IO.......

./fd
./fd 1

pwn --题目fb_百度_05

不管了 那就读取第二个文件

cat fd.c

发现代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
        if(argc<2){
                printf("pass argv[1] a number\n");
                return 0;
        }
        int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN\n", buf)){
                printf("good job :)\n");
                system("/bin/cat flag");
                exit(0);
        }
        printf("learn about Linux file IO\n");
        return 0;

}

找重点的部分进行分析

int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN\n", buf)){
                printf("good job :)\n");
                system("/bin/cat flag");
                exit(0);
        }
atoi库函数

原型 : int atoi( const char *str );

功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str
          中读到非数字字符则结束转换并将结果返回。
例如:int num = atoi("1314.012");
          int值为1314

第一行代码可以看出 输入的数字要减去0x1234

第三行的read这一块还是真不会 所以去百度了一下 read的用法

pwn --题目fb_库函数_06

大致的意思就是从fd里读取数据 保存到buf中

然后根据第四行的代码 进行判断 两个值是否相等 所以 要想办法输入 LETMEWIN

在《c程序设计语言》中,有这么一句话:当命令解释程序(即shell)运行一个程序的时候,它将打开三个文件,对应当文件描述符分别为0,1,2,依次表示标准输入、标准输出、标准错误。

然后再根据第一行代码中的atoi库函数可以了解到 如果使输入的数减去0x1234的话 就为0 那么就会从新输入

fd@pwnable:~$ ./fd 4660
LETMEWIN

pwn --题目fb_linux_07

最后得到flag 进行提交