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)]](https://img-blog.csdnimg.cn/3f724431d34444f78e62e0fbd725d14e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjU4MDYxNA==,size_16,color_FFFFFF,t_70)
登陆成功 查看文件目录 发现有三个文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Up7M1vs8-1627113939722)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724152945262.png)]](https://img-blog.csdnimg.cn/2c736b96f5b84ae1a14d2d28cb4ed67b.png)
看见flag我上去就是直接打开 但是 提示 没有权限
cat flag
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpnXvtHa-1627113939723)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153040591.png)]](https://img-blog.csdnimg.cn/a2d5b221f41c4b44bab8a870de6fb08b.png)
所以我查看这三个文件的权限
ls -l
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TJJ7VXG2-1627113939724)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153141679.png)]](https://img-blog.csdnimg.cn/f16b9507c9f34bdc91262313be88485b.png)
发现fd文件 有可执行权限 所以执行fd文件 但是他让我输入一个数字 然后提示我去学习linux的IO.......
./fd
./fd 1
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMewq6Nx-1627113939725)(C:\Users\范振豪\AppData\Roaming\Typora\typora-user-images\image-20210724153241738.png)]](https://img-blog.csdnimg.cn/e8183482d6b24db08777558c46406de1.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)]](https://img-blog.csdnimg.cn/c4ec502111c244f091f533eb02257be9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjU4MDYxNA==,size_16,color_FFFFFF,t_70)
大致的意思就是从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)]](https://img-blog.csdnimg.cn/852f91b6f7274291a1f694c44216f404.png)
最后得到flag 进行提交

浙公网安备 33010602011771号