mistake - pwnable
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相关推荐
- pwnable.krToddlr’s Bottle题解3
0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ ls flag mistake mistake.c password mistake@pwnable ...
- pwnable.kr 简单题目详细笔记汇总
文章目录 fd collision bof flag passcode random input leg mistake shellshock coin1 lotto cmd1 cmd2 uaf bl ...
- 萌新带你开车上p站(三)
本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ lsflag m ...
- 暑假训练pwn(七) pwnable mistake
终于做了一部分pwnable这道题很有意思感觉不像pwn 连上去有3个文件一个c文件一个执行文件一个password 打开c #include <stdio.h> #include < ...
- pwnable.kr之Toddler‘s Bottle 9~16题知识点记录
文章目录 第九题 mistake 总结 答案: 第十题 shellshock env指令 bash指令 解题 第十一题 coin1 findall(pattern, string, flags=0) ...
- Pwnable之[Toddler's Bottle](一)
Pwnable之[Toddler's Bottle] Pwn挑战地址 1.fd #include <stdio.h> #include <stdlib.h> #include ...
- 【pwnable】asm之write up
首先查看源代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <s ...
- pwnable input2 之 write up
首先看源代码: 1 input2@ubuntu:~$ cat input.c 2 #include <stdio.h> 3 #include <stdlib.h> 4 #inc ...
- pwnable.kr lotto题解
ssh lotto@pwnable.kr -p2222 (pw:guest) 题目源码: #include <stdio.h> #include <stdlib.h> #inc ...
- 简单易懂的 pwnable.kr 第六题[random]Writeupt
简单易懂的 pwnable.kr 第六题[random]Writeupt 题目地址: http://pwnable.kr/play.php 题目: peak小知识 异或^ 据有如下几种性质: 2. 恒 ...
最新文章
- 华东师范计算机入门平时作业,计算机入门模拟卷A-华东师范大学.doc
- 《OpenGL ES 3.x游戏开发(上卷)》一1.5 Android应用程序运行的机制
- 你应该知道的25道Javascript面试题
- Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
- mysql6.10,MySQL经典50题-第6-10题
- 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调
- 雷赛控制卡总线方式的坑
- java源程序的运行命令_Java源程序名为Test.java,运行它的Java程序的命令是( )。 (10.0分)_学小易找答案...
- 苹果笔记本装Windows系统
- 商品详情页html手机,商品详情页.html
- 苹果软件更新在哪里_苹果iOS 14.1/iPadOS 14.1正式版发布:新增更新机型[多图]-软件资讯...
- 在线直播授课系统哪个好?哪个更适合做网校?
- 黑马点评Redis实战(短信登录;商户查询缓存)
- 我所理解的 iOS 并发编程
- 使用PYTHON图像识别实现车牌号码识别的程序
- Java读取文件转换成byte[]的小结
- linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件
- 孙剑:如何打造云、端、芯上的视觉计算 | CCF-GAIR 2018
- 过拟合的原因和解决方案
- MySQL多实例(一台服务器搭建多个数据库)
热门文章
- 注册表中shell文件不见了_win10系统注册表中的shell文件不小心被删除的恢复教程...
- 我太机智了……30条关于数据行业内涵笑话漫画
- 95%以上的日常办事启用电子签章,你都体验过哪些?
- 对于LabVIEW操作者框架的理解
- CSS 3之设置图片边框
- 为什么你的有道云笔记越来越不好用?三个细节解决你的烦恼
- 计算机 64虚拟内存设置方法,win7 64位系统虚拟内存设置及虚拟内存太小的影响...
- 【离散数学】第二章 命题逻辑的推理理论
- C#System.Text.RegularExpressions.Regex使用
- Total Control的深入用法,如何使用脚本实现启动或重启指定App