pwnable input2 之 write up
首先看源代码:
input2@ubuntu:~$ cat input.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h> int main(int argc, char* argv[], char* envp[]){
printf("Welcome to pwnable.kr\n");
printf("Let's see if you know how to give input to program\n");
printf("Just give me correct inputs then you will get the flag :)\n"); // argv
if(argc != ) return ;
if(strcmp(argv['A'],"\x00")) return ;
if(strcmp(argv['B'],"\x20\x0a\x0d")) return ;
printf("Stage 1 clear!\n"); // stdio
char buf[];
read(, buf, );
if(memcmp(buf, "\x00\x0a\x00\xff", )) return ;
read(, buf, );
if(memcmp(buf, "\x00\x0a\x02\xff", )) return ;
printf("Stage 2 clear!\n"); // env
if(strcmp("\xca\xfe\xba\xbe", getenv("\xde\xad\xbe\xef"))) return ;
printf("Stage 3 clear!\n"); // file
FILE* fp = fopen("\x0a", "r");
if(!fp) return ;
if( fread(buf, , , fp)!= ) return ;
if( memcmp(buf, "\x00\x00\x00\x00", ) ) return ;
fclose(fp);
printf("Stage 4 clear!\n"); // network
int sd, cd;
struct sockaddr_in saddr, caddr;
sd = socket(AF_INET, SOCK_STREAM, );
if(sd == -){
printf("socket error, tell admin\n");
return ;
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons( atoi(argv['C']) );
if(bind(sd, (struct sockaddr*)&saddr, sizeof(saddr)) < ){
printf("bind error, use another port\n");
return ;
}
listen(sd, );
int c = sizeof(struct sockaddr_in);
cd = accept(sd, (struct sockaddr *)&caddr, (socklen_t*)&c);
if(cd < ){
printf("accept error, tell admin\n");
return ;
}
if( recv(cd, buf, , ) != ) return ;
if(memcmp(buf, "\xde\xad\xbe\xef", )) return ;
printf("Stage 5 clear!\n"); // here's your flag
system("/bin/cat flag");
return ;
}
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


还是不太明白,这题在搞什么
pwnable input2 之 write up的更多相关文章
- pwnable.kr input解题记录
pwnable input解题记录 给了源码如下: #include "stdio.h" #include "unistd.h" #include " ...
- pwnable.kr详细通关秘籍(二)
i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...
- 【pwnable.kr】input
这道题是一道一遍一遍满足程序需求的题. 网上其他的题解都是用了C语言或者python语言的本地调用,我想联系一下pwntools的远程调用就写了下面的脚本, 执行效果可以通过1~4的检测,到最后soc ...
- pwnable.kr之input
连接到远程服务器:ssh input2@pwnable.kr -p2222 查看题目所给的代码,根据题目的要求我们要给出所有符合条件的输入才能拿到flag,本来想在输入上动点歪脑筋,结果输入有字节数的 ...
- pwnable.kr的passcode
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...
- pwnable echo2
pwnable echo2 linux 32位程序 涉及FSB和UAF漏洞的利用,先%x泄露地址,然后利用UAF漏洞进行利用 code:
- pwnable.kr-bof
.Nana told me that buffer overflow is one of the most common software vulnerability. Is that true? D ...
- pwnable.kr-collision
题目: 链接后登陆 ssh col@pwnable.kr -p2222 查看文件以及权限 Ls –al 查看代码 cat col.c 根据 if(strlen(argv[1]) != 20){ pri ...
- pwnable.kr-fd
题目: 链接登录: ssh fd@pwnable.kr -p2222 查看文件及权限: ls –al 看到flag文件,但是当前用户fd并没有读权限. cat fd.c 分析程序: int argc ...
随机推荐
- CSS常用Hack集合(adding)
1> IE9 and IE10 @media screen and (min-width: 0\0) { .p-form input.p-value[type="checkbox&qu ...
- MongoDB--架构搭建(主从、副本集)之主从
此章节讲述主从架构 主从架构 -- 目前已经不建议使用,推荐使用复制集 主从配置可以在配置文件中配置 从节点可以在启动之后使用命令追加主节点,db.source.insert({"host ...
- python网络爬虫之使用scrapy自动爬取多个网页
前面介绍的scrapy爬虫只能爬取单个网页.如果我们想爬取多个网页.比如网上的小说该如何如何操作呢.比如下面的这样的结构.是小说的第一篇.可以点击返回目录还是下一页 对应的网页代码: 我们再看进入后面 ...
- java wait 和notify
这几天自己学习了一下线程的知识,wait 方法使当前的线程等待,notify 方法 唤醒当前的线程的方法 th 线程在5的时候进行wait,此时主线程继续执行, 主线程执行到9的时候 唤醒 th 线程 ...
- php解决表单重复提交
php解决表单重复提交时间:2015-2-28 | 评论:1条评论 | 被查看了 189 次 | 标签:php, W3cui重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交 ...
- js返回格式化的日期(年-月-日)
var d = new Date(); var str = d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate ...
- AS中layout_gravity与gravity的区别
gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...
- [leetcode-543-Diameter of Binary Tree]
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
- 解决VMware虚拟机不能上网的问题
这是其中一种情况,因为使用360等加速的时候把VMware 的DHCP等服务关闭了,重新启动服务即可,方法是WIN+R 输入cmd,在doc输入services.ms打开服务,找到 把这些都启动即可
- HDFS Java API的使用举例
HDFS是Hadoop应用程序使用的主要分布式存储.HDFS集群主要由管理文件系统元数据的NameNode和存储实际数据的DataNodes组成,HDFS架构图描述了NameNode,DataNode ...