20190916pwnable上的第一题[fd]详解writeup

首先我们先在pwnable.kr上选择这道fd题目,应该是第一道,也是我第一次做pwn。

这里我们通过ssh工具来进行连接,我使用的是MobaXterm

在这里设置主机名:pwnable.kr ,端口为2222,账号为fd,密码为guest。


我这里因为工具的原因,不需要执行ls来看有哪些文件,从左侧可以看出有三个文件,其中flag文件是我们需要的,可惜我们没有权限去read。这里还是算比较友好的,是开源的,我们可以直接cat fd.c来查看该文件的源码。


这里我第一天题目做出来只是有很浅薄的认识,知其然不知其所以然。后面Johnny老哥讨论的时候,他问了我几个问题给我问倒了,随后我又进行一行一行的查询理解总算是把这道题吃透了。

前面三行#include学过编程的应该都知道,这是要引用头文件,类似java、python调用库。

char buf[32];这里意味着声明一个大小为32的字符型数组buf。

int main(int argc, char* argv[], char* envp[])这里意味着定义一个main函数,第一个参数argc的值表示程序运行时,命令行参数的个数。第二个参数*argv[]的值表示指向字符串数组的指针,每个字符串对应一个参数。第三个参数是用来取得系统的环境变量,如:在DOS下,有一个PATH变量。当你在DOS提示符下输入一个命令的时候,DOS会首先在当前目录下找这个命令的执行文件。如果找不到,则到PATH定义的路径下去找,找到则执行,找不到返回Bad   command   or   file   name 。在DOS命令提示符下键入set可查看系统的环境变量。

if(argc<2){

                printf("pass argv[1] a number\n");

                return 0;

        }

这里的意思是,如果argc<2的话,输出pass argv[1] a number。argc用来统计参数的个数,因为路径为默认的参数,所以argc至少为1,所以这里一定要至少有一个数字输入。

int fd = atoi( argv[1] ) - 0x1234;这里申明一个整型变量fd(fd应该是filedes的意思P.S.如果说错了希望能私信我指出),atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,就是把argv[1]的输入强制转换为整型数,这里的argv[1]就是我们的第一个输入。argv[0]是输入的路径,argv[1]、argv[2]......就是我们的第一个、第二个....个输入。这里把我们的输入进行了减法操作,把我们的输入-0x1234后赋值给fd。

int len = 0;这里申明len=0。

len = read(fd, buf, 32);  这里是一个read函数,fd的值分三种情况,①fd=0:代表stdin(标准输入)fd=1:代表 stdout(标准输出)fd=2:代表 stderr(标准错误)后面意味着从fd处读取32个字符作为buf。

strcmp("LETMEWIN\n", buf)这里我们一层层来看,这里的strcmp(string compare)是用来对比字符串的,这里要做一个LETMEWIN和buf内我们输入的进行对比,如果两个一样则为0,两个不一样则为1。

if(!strcmp("LETMEWIN\n", buf)),这里在前面的基础上加上了一个!意味着取反,如果两个一样就为1,两个不一样就为0。在if函数里,输入为1则为真,输入为0则为假,所以要将此处strcmp的结果进行取反来达到验证的目的。

后面的代码就是简单的输出和调用system来执行cat flag的命令了,这里就不再解释了。


继续解题,我们可以看到这里fd是需要减去一个0x1234的,0x1234是十六进制下的1234,所对应的十进制数是4660,比较快速的方法就是用程序员计算器。这里fd减去一个0x1234我第一反应就是在这里构造一个fd=0,上面提到了fd=0是标准输入。

这里我输入了4660,这时候就跳到下一步了,输入一串字符串,这里要和LETMEWIN做一个比对,要完全一致,所以我们在这里输入一个LETMEWIN,注意:要完全一致!

这里就按照程序顺序执行下去了,good job是打印的成功信息,mommy! I think I know what a file descriptor is!!这里加粗的就是这道题的flag。题目到这里是做完了,提交过后便算过关了,但是秉着学习的态度,我做了一下fd不为0的测试。

当我输入4661,令fd=1,可以成功cat flag。

当我输入4662,令fd=2同样可以。这里可能是作者为了对新手友好一点的表现吧,毕竟是入门第一道题目,只要这里的fd=0、1/2都可以成功获取flag,fd=0、1、2均是合法输入,均会顺序执行下去。题目就到这里结束了,如有不对的地方,望大家指出,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容