pwnable.kr input最新解题

pwnable.kr input最新解题
以前的分析还是很详细的
具体链接:https://werewblog.wordpress.com/2016/01/11/pwnable-kr-input/
但是有些细节变了;
解题源代码如下:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<netinet/in.h>

int main()
{
char *argv[101]={"/home/input2/input",[1 … 99]=“A”,NULL};//改变了目录名字
argv[‘A’]="\x00";
argv[‘B’]="\x20\x0a\x0d"; //改变了数值
argv[‘C’]=“55555”;

//	execve(argv[0],argv,NULL);

    int pipe2stdin[2]={-1,-1};
    int pipe2stderr[2]={-1,-1};
    pid_t childpid;
    
    if(pipe(pipe2stdin)<0||pipe(pipe2stderr)<0)
    {
            perror("cannot create the pipe");
            exit(1);        
	}

	FILE* fp =fopen("\x0a","w");
	fwrite("\x00\x00\x00\x00",4,1,fp);
	fclose(fp);

	if((childpid=fork())<0)
	{
			perror("cannot fork");
			exit(1);
	}
	
	if(childpid==0)
	{
			close(pipe2stdin[0]);  //关闭读
			close(pipe2stderr[0]);
			write(pipe2stdin[1],"\x00\x0a\x00\xff",4);
			write(pipe2stderr[1],"\x00\x0a\x02\xff",4);
	}
	else
	{
			close(pipe2stdin[1]); //关闭写
			close(pipe2stderr[1]);
			dup2(pipe2stdin[0],0); //重定向到标准输入
			dup2(pipe2stderr[0],2);//重定向到标准错误
			close(pipe2stdin[0]);
			close(pipe2stderr[0]);
			char *env[2]={"\xde\xad\xbe\xef=\xca\xfe\xba\xbe",NULL};
			execve("/home/input2/input",argv,env);
			perror("Fail to execute the program");
			exit(1);
	}
	sleep(5);
	int sockfd;
	struct sockaddr_in server;
	sockfd=socket(AF_INET,SOCK_STREAM,0);
	if(sockfd<0)
	{
			perror("problem connecting");
			exit(1);
	}
	server.sin_family=AF_INET;
	server.sin_addr.s_addr=inet_addr("127.0.0.1");
	server.sin_port=htons(55555);
	if(connect(sockfd,(struct sockaddr*)&server,sizeof(server))<0)
	{
			perror("problem connecting");
			exit(1);
	}
	printf("connected\n");
	char buf[4]="\xde\xad\xbe\xef";
	write(sockfd,buf,4);
	close(sockfd);
	return 0;

}

具体步骤为:
1.在pwnable.kr的tmp目录下创建一个文件夹比如 input,因为我们在input2中没有写权 限,所以我们只好到tmp文件夹下,哪里有写权限
2.在我们自己的linux中上传上面代码编译后的可执行文件(假如为a.out)到 /tmp/input
(就是scp -P 2222 -p a.out input2@pwnable.kr:/tmp/input )
3.上传成功后,我们./input执行,会发现没有flag出现,因为我们的flag是相对路径,我们现在在/tmp/input目录下,因此我们需要创建一个连接,网上很多人都说用ln /home/input/flag flag,但是我没有成功,因为不允许,所以我试了一下软连接,成功了,就是
ln -s /home/input/flag flag就成功了得到了flag;

Mommy! I learned how to pass various input in Linux ?

因为我也是一个新手,所以搞了很久,有很多不懂,希望各位大佬指点;
希望有相同兴趣的我们交流一起进步

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值