美文网首页
[Toddler's Bottle]-mistake

[Toddler's Bottle]-mistake

作者: 2mpossible | 来源:发表于2018-12-03 14:56 被阅读0次
  • 从ida反编译结果来看,有两次输入,只要第一次的输入字符每一位异或1后与第二次输入的字符相等就会cat flag ,有点没明白考点是撒
  • 事后看了师傅的wp才知道原来是源码出现了错误
#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;
}
  • 由于fd=open()外没有括号,而<的优先级高于= ,于是先执行open()函数,再和0比较大小,最后赋值给fd。

  • 当open成功时返回一个正数,这里的判断逻辑就变成了正数 < 0,返回false,也就是0。所以最后赋给 fd 的值为0,也就变成了stdin,所以就造成了ida反编译看有两次输入机会

  • 参考文章:

  • https://blog.csdn.net/qq_19550513/article/details/62045323

相关文章

  • [Toddler's Bottle]-mistake

    从ida反编译结果来看,有两次输入,只要第一次的输入字符每一位异或1后与第二次输入的字符相等就会cat flag ...

  • [Toddler's Bottle]-blackjack

    一个经典的21点游戏,我们的目标是赚到1百万才有flag,看源码发现bet可以输入负数,比如输入-10000000...

  • [Toddler's Bottle]-fd

    由于刚入手pwn,所以想着做些基础的题来提升自己,为了以后方便回顾首先来看源码 首先可以知道我们运行程序的时候需要...

  • [Toddler's Bottle]-collision

    代码如下: 首先要有一个命令行参数,而且长度必须为20跟着在check_password里面强制转化为int指针,...

  • [Toddler's Bottle]-random

    首先我们看源代码 可以看到random这个函数,由于没有设置种子(设置种子也要变化啊)所以可以知道这里是伪随机数,...

  • [Toddler's Bottle]-bof

    下载好源码和源文件: 从源码可以看出这题大概是要溢出overflowme从而覆盖key的值为0xcafebabe,...

  • [Toddler's Bottle]-flag

    这题一开始用ida看什么都没看出来,后来看了网上的WP才知道这题是加了壳的,从十六进制中可以看到确实加了upx壳 ...

  • [Toddler's Bottle]-passcode

    之前一直不能下载文件到本地,今天用了FlashFXP无意间可以下载到本地了 主要@前面的是用户名,之前一直不知道 ...

  • [Toddler's Bottle]-input

    需要对linux操作有一定的认识,前面的绕过ida或者看源码都能推出来,最后由于我们在input2目录下没有写文件...

  • [Toddler's Bottle]-leg

    key1()函数获取pc寄存器的值,key2()函数获取pc寄存器 + 4的值,key3()函数获得lr寄存器的值...

网友评论

      本文标题:[Toddler's Bottle]-mistake

      本文链接:https://www.haomeiwen.com/subject/lbuycqtx.html