zoukankan      html  css  js  c++  java
  • pwnable

    step by step

    提示与运算符优先级有关

    #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
    ", fd);
            return 0;
        }
    
        printf("do not bruteforce...
    ");
        sleep(time(0)%20);
    
        char pw_buf[PW_LEN+1];
        int len;
        if(!(len=read(fd,pw_buf,PW_LEN) > 0)){
            printf("read error
    ");
            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
    ");
            system("/bin/cat flag
    ");
        }
        else{
            printf("Wrong Password
    ");
        }
    
        close(fd);
        return 0;
    }
    if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){

    问题在这:比较运算符优先级大于赋值运算优先级,这里fd=0,read函数时,实际是在stdin读入数据,也就是我们输入的内容

    然后与第二次输入的password异或相同就给flag

    (注意:这里输入是字符串,异或时也是字符串中字符的最低位改变,不是输入的变,而是它对应的ascii码最低位异或后对应的字符)

  • 相关阅读:
    poj1580
    poj1607
    poj1313
    poj1314
    c语言之extern和static
    C笔记(一)
    搭建Linux高可用性集群(第一天)
    利用回调函数实现泛型算法
    关于SQL server中的 identity
    SQL(一)
  • 原文地址:https://www.cnblogs.com/gudygudy/p/10895580.html
Copyright © 2011-2022 走看看