首页
社区
课程
招聘
[分享]pwnable.kr mistake day7
发表于: 2021-1-8 20:01 8321

[分享]pwnable.kr mistake day7

2021-1-8 20:01
8321


此次题目带有提示:操作符优先级

我们的目标是程序可以执行 system("/bin/cat flag\n") 这需要满足 pw_buf 与 pw_buf2 前十个字节相等。
pw_buf2 是我们输入的字符串经过 xor() 函数处理得到。
xor() 将字符串中的每个字符与 1 异或。
pw_buf 是由 read(fd,pw_buf,PW_LEN) 完成赋值,其中 fd 在第 17 行完成赋值 fd=open("/home/mistake/password",O_RDONLY,0400) < 0 由于赋值运算符 '=' 的优先级小于 '<' 的优先级,所以先处理 open("/home/mistake/password",O_RDONLY,0400) < 0 open() 打开文件成功的返回值是 0,0 < 0 是假,所以 fd 的值应为 0,所以 pw_buf 的值也是我们手动输入的。
综上所述,只要我们两次输入的字符串异或的结果为 1111111111 即可,
为了方便,我们第一次输入十个 0,第二次输入十个 1。

执行结果,红框内为 flag

#include <stdio.h>
#include <fcntl.h>
 
#define PW_LEN 10
#define XORKEY 1
 
void xor(char* s, int len){
        int i;
        for(i=0; i<len; i++){
                s[i] ^= XORKEY;
        }
}
 
int main(int argc, char* argv[]){
 
        int fd;
        if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){
                printf("can't open password %d\n", fd);
                return 0;
        }
 
        printf("do not bruteforce...\n");
        sleep(time(0)%20);
 
        char pw_buf[PW_LEN+1];
        int len;
        if(!(len=read(fd,pw_buf,PW_LEN) > 0)){
                printf("read error\n");
                close(fd);
                return 0;
        }
 
        char pw_buf2[PW_LEN+1];
        printf("input password : ");
        scanf("%10s", pw_buf2);
 
        // xor your input
        xor(pw_buf2, 10);
 
        if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
                printf("Password OK\n");
                system("/bin/cat flag\n");
        }
        else{
                printf("Wrong Password\n");
        }
 
        close(fd);
        return 0;
}
#include <stdio.h>
#include <fcntl.h>
 
#define PW_LEN 10
#define XORKEY 1
 
void xor(char* s, int len){
        int i;
        for(i=0; i<len; i++){
                s[i] ^= XORKEY;
        }
}
 
int main(int argc, char* argv[]){
 
        int fd;
        if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){
                printf("can't open password %d\n", fd);
                return 0;
        }
 
        printf("do not bruteforce...\n");
        sleep(time(0)%20);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//