Pwnable-mistake
2024-09-07 12:49:17
先看看c的源码
#include <stdio.h>
#include <fcntl.h> #define PW_LEN 10
#define XORKEY 1 void xor(char* s, int len){
int i;
for(i=; i<len; i++){
s[i] ^= XORKEY;
}
} int main(int argc, char* argv[]){ int fd;
if(fd=open("/home/mistake/password",O_RDONLY,) < ){
printf("can't open password %d\n", fd);
return ;
} printf("do not bruteforce...\n");
sleep(time()%); char pw_buf[PW_LEN+];
int len;
if(!(len=read(fd,pw_buf,PW_LEN) > )){
printf("read error\n");
close(fd);
return ;
} char pw_buf2[PW_LEN+];
printf("input password : ");
scanf("%10s", pw_buf2); // xor your input
xor(pw_buf2, ); 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 ;
}
让pw_buf 和 ^1过的pw_buf2相等就可以cat flag了
题目给了提示,operator priority,运算符优先,即<会优先于=,所以会先打开password,里面的内容大于0,所以获得的flase 即fd=0
if(fd=open("/home/mistake/password",O_RDONLY,) < )
因为fd=0,是标准输入,所以我们可以进行输入
if(!(len=read(fd,pw_buf,PW_LEN) > )){
printf("read error\n");
close(fd);
return ;
那我们就可以输入pw_buf,之后在pw_buf2的位置输入一个10字节的数字并且异或1的值等于pw_buf,这样他们就相等,也就获得flag
这里我们让pw_buf等于0000000000,然后让pw_buf2等于1111111111 ,因为1111111111 ^1111111111=0
满足上面的if判断式
Mommy, the operator priority always confuses me :(
最新文章
- Hexo - 快速,轻量,强大的 Node.js 博客框架
- BZOJ 1082 【SCOI2005】 栅栏
- Android 闹钟设置
- Jeecms自定义标签用法[单个内容]
- Python简易爬虫
- mapreduce的基本思想
- mvp框架
- 深入理解计算机系统(2.3)------布尔代数以及C语言运算符
- JavaScript基础回顾
- DIY 温控烙铁
- 从一次输入框无法输入的bug,谈如何限制输入框输入类型
- 模拟赛20181016 Uva 1040 状压+搜索 2005 ACM world final problem c
- PHP不借助第三个变量交换值
- git 代码服务器的网页版gitweb的搭建
- 《Android源代码设计模式解析与实战》读书笔记(十)
- matplotlib01
- TCC(Tiny C Compiler)介绍
- css水波动画效果
- TcxScheduler的使用2
- SQL Server Connection Pooling (ADO.NET)