博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【pwnable.kr】 mistake - 运算符优先级
阅读量:4206 次
发布时间:2019-05-26

本文共 1241 字,大约阅读时间需要 4 分钟。

这关很有意思,题目本意是一道源码中运算符优先级导致的问题,如果直接看binary的话,看反编译代码就不会被运算符优先级迷惑。

先看一下反编译代码,main函数。程序判断/home/mistake/password能否打开,再没有别的文件打开的情况下open一般返回的fd是3。之后从stdin read 10byte,再用scanf读取10byte 进行xor运算,之后两者比较,如果相等就输出flag。

IDA pseudocode:

int __cdecl main(int argc, const char **argv, const char **envp){  int result; // eax  int v4; // eax  char buf; // [rsp+20h] [rbp-30h]  char s2; // [rsp+30h] [rbp-20h]  unsigned __int64 v7; // [rsp+48h] [rbp-8h]  v7 = __readfsqword(0x28u);  if ( open("/home/mistake/password", 0) >= 0 )  {    puts("do not bruteforce...");    v4 = time(0LL);    sleep(v4 % 20);    if ( (signed int)read(0, &buf, 0xAuLL) > 0 )    {      printf("input password : ");      __isoc99_scanf("%10s", &s2);      xor((__int64)&s2, 10);      if ( !strncmp(&buf, &s2, 0xAuLL) )      {        puts("Password OK");        system("/bin/cat flag\n");      }      else      {        puts("Wrong Password");      }      close(0);      result = 0;    }    else    {      puts("read error");      close(0);      result = 0;    }  }  else  {    printf("can't open password %d\n");    result = 0;  }  return result;}

那么输入1111111111,0000000000即可。

再看一下题目源代码,发现了mistake。fd=open("/home/mistake/password",O_RDONLY,0400) < 0中,判断的优先级要比赋值的高,open返回值是3,那么fd的值就为假,也就是0了。

你可能感兴趣的文章
纯CSS实现侧边栏/分栏高度自动相等
查看>>
CSS布局奇淫巧计之-强大的负边距
查看>>
改变CSS世界纵横规则的writing-mode属性
查看>>
理解CSS3 max/min-content及fit-content等width值
查看>>
word-break:break-all和word-wrap:break-word的区别
查看>>
CSS深入理解vertical-align和line-height的基友关系
查看>>
CSS 中的内联元素、块级元素以及display的各个属性的特点
查看>>
css行高line-height的一些深入理解及应用
查看>>
我对CSS vertical-align的一些理解与认识(一)
查看>>
我对CSS vertical-align的一些理解与认识(二)
查看>>
去除inline-block元素间间距的N种方法
查看>>
CSS中height:100%和height:inherit的异同
查看>>
absolute元素在text-align属性下的对齐显示
查看>>
CSS3选择器:nth-child和:nth-of-type之间的差异
查看>>
微信小程序知识点GET
查看>>
微信小程序组件知识点GET
查看>>
微信小程序API~GET
查看>>
springboot实践1
查看>>
技术管理规划-设定团队的职能
查看>>
技术管理规划-如何设定团队的目标
查看>>