pwn --题目fb

pwn ----题目fb

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

首先根据提示 用ssh连接

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E60pKznp-1627113939720)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724152746567.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Up7M1vs8-1627113939722)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724152945262.png)]

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

cat flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpnXvtHa-1627113939723)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153040591.png)]

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

ls -l

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TJJ7VXG2-1627113939724)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153141679.png)]

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

./fd
./fd 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMewq6Nx-1627113939725)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153241738.png)]

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

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的用法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ns27rL8Z-1627113939726)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724155356296.png)]

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

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

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

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

fd@pwnable:~$ ./fd 4660
LETMEWIN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k92ykEQT-1627113939727)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724160346716.png)]

最后得到flag 进行提交

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值