mistake - pwnable

1.获取题目

我们先用ssh链接上pwnable的服务器获取题目。在终端输入ssh mistake@pwnable.kr -p2222,出现提示后输入密码guest

查看目录下有的文件以及文件权限ls -l

2. 运行程序

直接运行:提示“do not bruteforce…”,程序停止直到按下回车。提示“input password:”要求输入密码,随意输入后提示"wrong password"后退出程序。

3. 分析源码

题目有给出源码,cat mistake.c

#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;//检测能否打开password文件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文件中的字符,存储在pw_buf;

​ 要求输入password,存储在pw_buf2;

​ 对pw_buf2进行异或运算;

​ 比较pw_buf 和 pw_buf2;

如果按照程序运行的思路,我们需要做的应该是找到存储在pw_buf中password的值。

但是题目提示的是命令的优先级(hint : operator priority),关键地方在这里:

 if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0){printf("can't open password %d\n", fd);return 0;}

程序的设计思路应该是先打开文件赋值给变量fd,然后再和0进行比较。但是,<的优先级别高于=。也就是说实际上程序运行是:打开文件,然后与0比较之后,再赋值给fd。

打开文件的状态返回值大于零(只要文件存在),也就是说open("/home/mistake/password",O_RDONLY,0400) < 0的运行结果是0(False),fd = 0

这会导致下面这行代码,从文件读入变成在命令行输入:

 if(!(len=read(fd,pw_buf,PW_LEN) > 0)){printf("read error\n");close(fd);return 0;      }

也就是存储在pw_buf中的值,是我们通过命令行输入的,而不是password文件中的值。

方便起见我们就让pw_buf的值等于0000000000,那么对应的我们在提示输入密码行应该输入的是0000000000与1异或运算后的值1111111111

4. 总结

  • C语言中 < 的运算优先级大于 = 。运算符优先级

mistake - pwnable相关推荐

  1. pwnable.krToddlr’s Bottle题解3

    0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ ls flag mistake mistake.c password mistake@pwnable ...

  2. pwnable.kr 简单题目详细笔记汇总

    文章目录 fd collision bof flag passcode random input leg mistake shellshock coin1 lotto cmd1 cmd2 uaf bl ...

  3. 萌新带你开车上p站(三)

    本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ lsflag m ...

  4. 暑假训练pwn(七) pwnable mistake

    终于做了一部分pwnable这道题很有意思感觉不像pwn 连上去有3个文件一个c文件一个执行文件一个password 打开c #include <stdio.h> #include < ...

  5. pwnable.kr之Toddler‘s Bottle 9~16题知识点记录

    文章目录 第九题 mistake 总结 答案: 第十题 shellshock env指令 bash指令 解题 第十一题 coin1 findall(pattern, string, flags=0) ...

  6. Pwnable之[Toddler's Bottle](一)

    Pwnable之[Toddler's Bottle] Pwn挑战地址 1.fd #include <stdio.h> #include <stdlib.h> #include ...

  7. 【pwnable】asm之write up

    首先查看源代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <s ...

  8. pwnable input2 之 write up

    首先看源代码: 1 input2@ubuntu:~$ cat input.c 2 #include <stdio.h> 3 #include <stdlib.h> 4 #inc ...

  9. pwnable.kr lotto题解

    ssh lotto@pwnable.kr -p2222 (pw:guest) 题目源码: #include <stdio.h> #include <stdlib.h> #inc ...

  10. 简单易懂的 pwnable.kr 第六题[random]Writeupt

    简单易懂的 pwnable.kr 第六题[random]Writeupt 题目地址: http://pwnable.kr/play.php 题目: peak小知识 异或^ 据有如下几种性质: 2. 恒 ...

最新文章

  1. 华东师范计算机入门平时作业,计算机入门模拟卷A-华东师范大学.doc
  2. 《OpenGL ES 3.x游戏开发(上卷)》一1.5 Android应用程序运行的机制
  3. 你应该知道的25道Javascript面试题
  4. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
  5. mysql6.10,MySQL经典50题-第6-10题
  6. 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调
  7. 雷赛控制卡总线方式的坑
  8. java源程序的运行命令_Java源程序名为Test.java,运行它的Java程序的命令是( )。 (10.0分)_学小易找答案...
  9. 苹果笔记本装Windows系统
  10. 商品详情页html手机,商品详情页.html
  11. 苹果软件更新在哪里_苹果iOS 14.1/iPadOS 14.1正式版发布:新增更新机型[多图]-软件资讯...
  12. 在线直播授课系统哪个好?哪个更适合做网校?
  13. 黑马点评Redis实战(短信登录;商户查询缓存)
  14. 我所理解的 iOS 并发编程
  15. 使用PYTHON图像识别实现车牌号码识别的程序
  16. Java读取文件转换成byte[]的小结
  17. linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件
  18. 孙剑:如何打造云、端、芯上的视觉计算 | CCF-GAIR 2018
  19. 过拟合的原因和解决方案
  20. MySQL多实例(一台服务器搭建多个数据库)

热门文章

  1. 注册表中shell文件不见了_win10系统注册表中的shell文件不小心被删除的恢复教程...
  2. 我太机智了……30条关于数据行业内涵笑话漫画
  3. 95%以上的日常办事启用电子签章,你都体验过哪些?
  4. 对于LabVIEW操作者框架的理解
  5. CSS 3之设置图片边框
  6. 为什么你的有道云笔记越来越不好用?三个细节解决你的烦恼
  7. 计算机 64虚拟内存设置方法,win7 64位系统虚拟内存设置及虚拟内存太小的影响...
  8. 【离散数学】第二章 命题逻辑的推理理论
  9. C#System.Text.RegularExpressions.Regex使用
  10. Total Control的深入用法,如何使用脚本实现启动或重启指定App