首先看源代码:

 1 input2@ubuntu:~$ cat input.c
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <sys/socket.h>
 6 #include <arpa/inet.h>
 7
 8 int main(int argc, char* argv[], char* envp[]){
 9     printf("Welcome to pwnable.kr\n");
10     printf("Let's see if you know how to give input to program\n");
11     printf("Just give me correct inputs then you will get the flag :)\n");
12
13     // argv
14     if(argc != 100) return 0;
15     if(strcmp(argv['A'],"\x00")) return 0;
16     if(strcmp(argv['B'],"\x20\x0a\x0d")) return 0;
17     printf("Stage 1 clear!\n");
18
19     // stdio
20     char buf[4];
21     read(0, buf, 4);
22     if(memcmp(buf, "\x00\x0a\x00\xff", 4)) return 0;
23     read(2, buf, 4);
24         if(memcmp(buf, "\x00\x0a\x02\xff", 4)) return 0;
25     printf("Stage 2 clear!\n");
26
27     // env
28     if(strcmp("\xca\xfe\xba\xbe", getenv("\xde\xad\xbe\xef"))) return 0;
29     printf("Stage 3 clear!\n");
30
31     // file
32     FILE* fp = fopen("\x0a", "r");
33     if(!fp) return 0;
34     if( fread(buf, 4, 1, fp)!=1 ) return 0;
35     if( memcmp(buf, "\x00\x00\x00\x00", 4) ) return 0;
36     fclose(fp);
37     printf("Stage 4 clear!\n");
38
39     // network
40     int sd, cd;
41     struct sockaddr_in saddr, caddr;
42     sd = socket(AF_INET, SOCK_STREAM, 0);
43     if(sd == -1){
44         printf("socket error, tell admin\n");
45         return 0;
46     }
47     saddr.sin_family = AF_INET;
48     saddr.sin_addr.s_addr = INADDR_ANY;
49     saddr.sin_port = htons( atoi(argv['C']) );
50     if(bind(sd, (struct sockaddr*)&saddr, sizeof(saddr)) < 0){
51         printf("bind error, use another port\n");
52             return 1;
53     }
54     listen(sd, 1);
55     int c = sizeof(struct sockaddr_in);
56     cd = accept(sd, (struct sockaddr *)&caddr, (socklen_t*)&c);
57     if(cd < 0){
58         printf("accept error, tell admin\n");
59         return 0;
60     }
61     if( recv(cd, buf, 4, 0) != 4 ) return 0;
62     if(memcmp(buf, "\xde\xad\xbe\xef", 4)) return 0;
63     printf("Stage 5 clear!\n");
64
65     // here's your flag
66     system("/bin/cat flag");
67     return 0;
68 }

1   argv['A'] = "\x00";

argv['B'] = "\x20\x0a\x0d";

argv['C'] ="55555";

这里可以用’A’作为参数的索引,这是原来没有见过的,默认把字符转换成ASCII码了。

2  execve函数

execve(执行文件)在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。

int execve(const char * filename,char *const argv[ ],char * const envp[ ]);

execve()用来执行参数filename字符串所代表的文件路径

第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束

最后一个参数则为传递给执行文件的新环境变量数组

3 进程间通信(以后再补上)

4 socket编程

一般的模式:

(1)建立套接字:sockfd = socket(AF_INET,SOCK_STREAM,0)

AF_INET:IPV4

SOCK_STREAM:TCP

最后一个参数一般为0

(2)设置socket_in结构中的参数(套接字地址),包括Ip、端口和IPV4or6

http://www.cnblogs.com/hnrainll/archive/2011/04/24/2026432.html

(3)bind监听函数

http://blog.chinaunix.net/uid-24954950-id-2956469.html

(4)listen函数

http://blog.chinaunix.net/uid-25749806-id-348681.html

(5)accpet函数

http://blog.chinaunix.net/uid-25749806-id-348689.html

(6)recv/send函数

http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html

还是不太明白,这题在搞什么

转载于:https://www.cnblogs.com/liuyimin/p/7278435.html

pwnable input2 之 write up相关推荐

  1. pwnable.kr第七八题 input leg

    第七题 input 参考链接: 这道题可太痛苦了,好多知识点: 这里只需要按它的比较走就可以了. 解题过程 第一次比较: 这里只需要让输入的长度为100,并且满足argv['A'].['B']的值即可 ...

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

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

  3. PWN input [pwnable.kr]CTF writeup题解系列7

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 先连接到服务器看下情况 root@mypwn:/ctf/work/pwnable.kr# ssh input2@pw ...

  4. PWN lotto [pwnable.kr]CTF writeup题解系列10

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 下载文件,检查一下情况 root@mypwn:/ctf/work/pwnable.kr# ssh lotto@pwn ...

  5. PWN uaf [pwnable.kr]CTF writeup题解系列13

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 题目都已经介绍了这是一道Use After Free的题目,那我们就不用多想了,先看看题目主要内容 root@myp ...

  6. pwnable.kr之Toddler‘s Bottle前八题知识点记录

    pwn刷题网站地址(点击直达): http://pwnable.kr/play.php 文章目录 第一题 fd 第二题:collision 1.首先是char和int数据类型的转换 2.python实 ...

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

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

  8. 【pwnable】asm之write up

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

  9. pwnable.kr lotto题解

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

最新文章

  1. #串口通信超时处理_实现4G无线通信透传的远程通信多组网5个PLC相互交换数据...
  2. ansible+powershell DSC 可以管理windows server了
  3. VTK:几何对象之Tetrahedron
  4. java的简单工厂模式_java设计模式之简单工厂模式
  5. ActionScript 3.0 学习笔记三
  6. java保留二位小数_java使double保留两位小数的多方法 java保留两位小数
  7. 用 Python 制作关不掉的端午安康弹窗
  8. Newsmy纽曼星云1000G移动硬盘拆解教程
  9. php新闻管理系统(简单)学习教程
  10. PDF Expert 2.5.13 极致的 PDF 阅读标注工作体验
  11. 中职计算机组装与维修知识点,中职计算机组装与维修的教学分析与对策
  12. 【老生谈算法】matlab实现Kmeans算法源码——Kmeans算法
  13. websphere html 缓存,如何清除WebSphere类缓存
  14. 参考线平滑-FemPosDeviation-SQP
  15. 数据分析可视化- 十三朝古都西安
  16. 王达人漫展1,cosplay
  17. vimdiff 命令使用技巧
  18. MLY翻译 -- 3.Prerequisites and Notation
  19. Vue的props的三种写法
  20. 理论力学类毕业论文文献包含哪些?

热门文章

  1. Oracle事务的隔离
  2. VUE2.0开发环境安装
  3. 浅谈数据库优化方案--表和SQL
  4. 【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )
  5. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 通信场景 | Channel 通信机制 | Channel 支持的通信数据类型 | Channel 类型 )
  6. 【鸿蒙 HarmonyOS】UI 布局 ( 帧布局 StackLayout )
  7. 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
  8. 【Android 应用开发】 Android 相关代码规范 更新中 ...
  9. grid - 使用相同的名称命名网格线和设置网格项目位置
  10. Nginx初学第一步