pwnable学习----fd

原创 2018年04月16日 20:53:01
# pwnable学习----fd
[website](http://pwnable.kr/play.php)
首先贴出来题目。。。



嗯就是这个,按照题目描述,ssh远程连接目标主机
  
    <ssh fd@pwnable.kr -p2222>
密码是 guest
    
OK,打开后是这个样子


那么先来看看这里有什么吧
    
    <ls> 
一共显示有3个文件
二进制文件 (fd)、c代码 (fd.c)、还有个(flag)


好的接下来每个文件试一下吧。
(fd.c)编译以后就是(fd)二进制文件运行了
(flag)没有权限打开了
好的那先来看看(fd.c)里面是什么吧


    <less fd.c>
    或者<cat fd.c>



可以看出来,运行二进制文件,带参数输入后,根据你的参数来判断,条件符合输出相应语句。


嗯这个是有两个提示的:
    pass argc[1] a number         -----提示一
    learn about Linux file IO\n   -----提示二
刚开始就没管这个提示--_--,导致走了很多弯路。。。


根据提示,必须要输入一个参数才能进入if下面的语句,否则就 return 0 了。
那么,代码里面的 argc,argv,envp又是什么意思呢?好吧,百度了一下找到了
[这是百度的网址](http://blog.csdn.net/tinide/article/details/8205841)
我自己照着上面敲了代码跑了一下


    <#include<iostream>
    using namespace std;
    
    int main(int argc, char* argv[], char* env[])
    {
        cout<<"------argc-------"<<endl;
        cout<<argc<<endl;
        cout<<"------argc-------"<<endl;
        int i;
        cout<<"sdcssc"<<argv[0]<<endl;
        for (i=0; i<argc; i++)
                cout<<argv[i]<<endl;
        cout<<"__--------env-------"<<endl;
        for(i=0; env[i]!=NULL; i++)
                cout<<env[i]<<endl;
        return 0;
    }>




    <./fd hongshulin 123>



好吧从 env 我就不懂了...


现在明白了,运行程序后的第一个参数为 argv[1] 就是解题的关键了。


接下来是 atoi 函数了,找出字符串中的数字并输出
[atoi 函数](https://baike.baidu.com/item/atoi/10931331?fr=aladdin)


那么第一个参数要输入什么呢?随便输入一个,提示为“[learn about Linux file IO](https://segmentfault.com/a/1190000008179453)”。OK,看来要学习一下 Linux 的输入输出了。
这里面说的很清楚,“当需要读写文件时,也需要将相应的文件描述符作为参数传给读写函数。”
这里面也有关于 read() 函数的描述如下:
read()函数的使用方法:
    原型定义:ssize_t read[1] (int fd, void *buf, size_t count);
    使用的头文件:#include <unistd.h>
    fd 是文件指针,读上来的数据保存在缓冲区 buf 中, count 为请求读取的字节数。


那么接下来只要传进去一个参数使得 fd==0 即可,嗯应该是因为穿进去的参数当作字符串,而且相对于人来说是 十进制 ,故换算 0x1234 == (4660)10 ,接着手动输入 LETMEWIN\0
得到这个了就



顺便查到的与之无关的一些命令:
grep 命令:使用 grep 查找一个二进制文件,输出匹配字符串的偏移量。
[网址](https://www.v2ex.com/t/155823)
grep -oba 'some string' binary.file  (输出十进制偏移量)
gdb 命令:用gdb查看指定地址的内存内容
格式: x /nfu <addr>
[网址](https://www.cnblogs.com/super119/archive/2011/03/26/1996125.html)


网上找到的 pwnable.kr 的 writeup
[❤️❤️❤️](http://blog.csdn.net/u012763794/article/details/51992512)



pwnable.kr - fd

题目: 题目链接:http://pwnable.kr/play.php ——> 连接登录:ssh fd@pwnable.kr -p2222查看文件及权限:ls -al看到flag文件,但是当...
  • SCNU_Jiechao
  • SCNU_Jiechao
  • 2015-12-19 13:40:45
  • 1870

pwnable.kr 之fd

感觉自己什么都不会,各种东西都开始学了。这个假期看看自己能把pwn学到什么程度~~ www.pwnable.kr.com  come on  题目:fd 补一点知识: linux文件权...
  • qq_20307987
  • qq_20307987
  • 2016-04-30 13:21:27
  • 727

pwnable.tw记录之applestore

耐下心用ida分析: 主要功能函数handler: create函数malloc一块16字节的内存,分别存放:char* name,int price,struct * bk ,struct * ...
  • qq_35429581
  • qq_35429581
  • 2017-10-31 15:29:36
  • 259

pwnable.kr解题write up —— Toddler's Bottle(一)

网站地址:pwnable.kr 提供许多优质的ctf训练题,题目设计的都非常巧妙,适合思考。...
  • hwz2311245
  • hwz2311245
  • 2016-01-18 15:43:02
  • 4581

【pwnable.kr-----解题过程】fd

#include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
  • lyuchen65
  • lyuchen65
  • 2015-09-16 01:34:38
  • 604

pwnable.kr之input

input 这道题有点麻烦。 一共有五个阶段,需要突破,参考链接里讲的很详细了,自己没有太多的理解。感觉基础差太多了,像进程间通信,Linux管道技术,网络 编程,都需要加强。   在这里记录...
  • qq_20307987
  • qq_20307987
  • 2016-05-07 12:03:27
  • 1710

通过pwnable.kr从零学pwn

本文链接:http://blog.csdn.net/u012763794/article/details/51992512 下面的这个地址很多ctf的学习资源都是有推荐的 挑战地址:http://...
  • u012763794
  • u012763794
  • 2016-07-31 00:17:50
  • 7928

pwnable.kr writeup hash

这道题还是学到了很多的,又一种绕过canary 的姿势 溢出点还是很明显的,v3只分配了512个字节的空间,但是输入在解码后有1024/4*3=768个字节,看了下保护机制。 可以覆盖ca...
  • z231288
  • z231288
  • 2017-03-26 22:31:04
  • 442

pwnable之coin1

coin1 题目的意思是在一堆硬币中有一枚假硬币,假硬币的重量是9,而正常的是10。现在有N枚硬币,你可以询问C次。每次询问返回的是你询问的硬币的质量之和。询问C次之后,就要告诉它假的硬币的编号。 ...
  • pwd_3
  • pwd_3
  • 2016-04-04 16:06:56
  • 620

pwnable.kr brainfuck writeup

题目I made a simple brain-fuck language emulation program written in C. The [ ] commands are not imp...
  • qq_29343201
  • qq_29343201
  • 2017-03-28 14:07:48
  • 861
收藏助手
不良信息举报
您举报文章:pwnable学习----fd
举报原因:
原因补充:

(最多只允许输入30个字)