其他分享
首页 > 其他分享> > 黑客练手入门| pwnable.kr—幼儿瓶—01:fd

黑客练手入门| pwnable.kr—幼儿瓶—01:fd

作者:互联网

前言
pwnable.kr介绍
该怎么玩
幼儿瓶第一道题:fd
0x00 问题描述
0x01 源码分析
0x02 解题方法
0x03 知识点总结
前言
担心有人不知道pwnable.kr是什么,所以觉得有必要简单介绍一下它。

pwnable.kr介绍
pwnable.kr是一个非商业性的Wargame网站 ,它提供有关系统开发的各种pwn挑战。pwnable.kr的主要目的是’有趣’。并把每个挑战视为游戏。地址:http://pwnable.kr/

该怎么玩
每个挑战都有对应的标记文件(类似于CTF),您需要阅读该文件并提交给pwnable.kr以获得相应的分数。为了读取标志文件,您需要一些有关编程,逆向工程,漏洞利用,系统知识,密码学的技能。每个挑战都有作者的预期解决方案,但是,还有许多意外的解决方案。

挑战分为四类:

幼儿瓶:非常简单的挑战,都是一些简单的错误。
Rookiss:新手需要掌握的典型漏洞利用。
怪诞:这些挑战是怪诞的,解决起来很痛苦,但获得Flag后,成就感满满。
黑客的秘密:针对这些挑战的预期解决方案涉及特殊的黑客技术。
幼儿瓶第一道题:fd
0x00 问题描述
Mommy! what is a file descriptor in Linux?

try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:
https://youtu.be/971eZhMHQQw

ssh fd@pwnable.kr -p2222 (pw:guest)

这道题名为fd(file descriptor,翻译过来就是文件描述符),顾名思义,其实考察的就是 Linux 的文件描述符的知识。

0x01 源码分析
连接到服务器上后,当前目录存放了几个文件:fd.c fd flag
通过ls -l,我们可以查看文件权限,发现当前用户没有权限查看flag文件,然后我们就分析fd.c文件,是一段代码,内容如下:

//fd.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
if(argc<2){
printf(“pass argv[1] a number\n”);
return 0;
}
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);
if(!strcmp(“LETMEWIN\n”, buf)){
printf(“good job

标签:练手,文件,01,pwnable,argv,kr,fd,buf
来源: https://blog.csdn.net/LLand520/article/details/113697663