https://r00tnb.github.io/2018/01/17/pwnable.kr-mistake/

前言

这题其实考察细心,不难。

分析

还是先贴代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <fcntl.h>#define PW_LEN 10
#define XORKEY 1void 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 inputxor(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;
}

题目逻辑很简单,只要从password文件中读取的数据跟输入的数据的异或加密后的结果相等,就会得到flag。
但是整个逻辑如果不细心,就不会发现错误,就真的如我上面所想像的逻辑了。
根据题目提示:运算符优先级。可以看到open函数直接跟小于号与零比较,由于c语言中小于号优先级高于赋值的等号,又由于这里open函数会返回大于零的值,那么先进行比较运算返回逻辑假值,在c语言中就是0,所以fd的值就是0。
知道了这些,那么后面的read调用就会从标准输入中读取值,那么两个值就都在控制之中了,于是就能getflag了。要注意第二次输入要进行异或加密。

1
2
3
4
5
6
7
mistake@ubuntu:~$ ./mistake
do not bruteforce...
1234567890
input password : 0325476981
Password OK
Mommy, the operator priority always confuses me :(
mistake@ubuntu:~$

总结

这题当时纠结了一会儿,确实要细心,安全漏洞总会发生在最容易忽略的地方,要时刻保持细心。

【pwnable.kr】 mistake相关推荐

  1. 【pwnable.kr】Toddler‘s Bottle-[flag]

    目录导航 下载题目文件 二进制分析 获取flag gdb调试 下载题目文件 Papa brought me a packed present! let's open it.Download : htt ...

  2. 【pwnable.kr】passcode

    pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是'&'的锅. #include <stdio.h> ...

  3. 【pwnable.kr】day8:leg

    pwnable:leg pwnable.kr:leg 题目链接 question Daddy told me I should study arm. But I prefer to study my ...

  4. 【pwnable.kr】leg

    pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.c Download : http://pwnable.kr/bin/leg.asm ss ...

  5. 【pwnable.kr】 alloca

    https://www.anquanke.com/post/id/170288 前言 最近在刷pwnable.kr [Rookiss],题目都好有意思,一其中题alloca虽然分值不高,但分析过程很值 ...

  6. 【pwnable.kr】Toddler‘s Bottle-[passcode]

    目录导航 进入服务器 下载文件 反编译分析 EXP TIPS 进入服务器 Mommy told me to make a passcode based login system. My initial ...

  7. 【pwnable.kr】Toddler‘s Bottle-[random]

    目录导航 Target & Download Analysis & IDA Debug & writeup TIPS Target & Download Daddy, ...

  8. 【pwnable.kr】Toddler‘s Bottle-[bof]

    目录导航 打开题目审题 nc 命令介绍 获取服务器文件 源代码分析 ELF分析构造payload 解题 打开题目审题 Nana told me that buffer overflow is one ...

  9. 【pwnable.kr】Toddler‘s Bottle-[fd]

    目录导航 打开题目审题 找到突破口 相关c语言知识 源代码分析 找到FLAG 打开题目审题 Mommy! what is a file descriptor in Linux?* try to pla ...

  10. 【pwnable.kr】 passcode

    https://r00tnb.github.io/2017/12/10/pwnable.kr-passcode/ 分析 首先读源码passcode.c 1 2 3 4 5 6 7 8 9 10 11 ...

最新文章

  1. PowerDesigner 使用的一些技巧(转)
  2. 关于学习Python的一点学习总结(50->描述符)
  3. 频发:记ADG备库日志应用延迟的一次故障处理-云和恩墨技术通讯精选
  4. 解析:百思买败于外部派系争斗
  5. 安徽大学计算机基础知识答案,安徽大学大学计算机基础选择题
  6. 汇编语言,两个数字的想加_8085微处理器中的汇编语言程序将两个16位数字相乘...
  7. 任正非《一江春水向东流》
  8. Ubuntu中恢复rm命令误删文件(转)
  9. 2021邵阳市区三中高考成绩查询,2021年邵阳市普通高考科目及各科分数
  10. 幼儿园调查过程怎么写_如何写幼儿园调查问卷总结
  11. 杰理之Dongle【篇】
  12. 大端模式和小端模式是什么意思?
  13. Ubuntu服务器配置mysql8
  14. 不同分辨率对应的像素输出时钟以及同步信号参数的整理
  15. java中有这个符号吗吗_Java中-符号是什么意思啊
  16. less保存后自动生成css文件
  17. STM32—OLED显示屏
  18. python起笔落笔_起笔、行笔、落笔,讲话稿还能这样写
  19. Windows查看文件占用情况、查看程序的dll依赖项
  20. 《人生重开模拟器》3天2亿流量却源于群内自嗨,网友:我提前看遍人生的无常...

热门文章

  1. CST启用GPU加速的调试笔记
  2. php如何识别flac文件,flac是什么格式
  3. HDR(高动态范围)
  4. 身份与访问管理技术在智慧城市的应用
  5. Centos7 安装teamviewer
  6. 扩展卡尔曼滤波soc估算 基于EKF算法的锂电池SOC 卡尔曼滤波估计电池soc ,simulink模型
  7. 重标极差分析法matlab,重标极差(RS)分析法估计Hurst指数的有效性检验.doc
  8. 复变函数——一到三章总结
  9. WiFi关联拒绝log分析以及代码流程 ASSOC_REJECT
  10. 第25章 串行FLASH文件系统FatFs—零死角玩转STM32-F429系列