pwnable.kr第一题:fd

 

0x000 打开环境

 

根据提示ssh连接,密码为guest,

 

 

 当前有三个文件,

 

 

 查看fd.c:

 

 

 

0x001 知识要点

1.argcargv

对于C语言int main(int argc char *argv[])来说,argc保存的是命令行总的参数个数(包括程序名),argv这是传入参数的数组.
举个例子,当你执行: ./test 1 2 3 时,argc = 4 而 argv[0] = test",argv[1] = 1,argv[2] = 2,argv[3] = 3

2.atoi()

atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。char --> int

3.read()

UNIX/Linux平台上,对于控制台(Console)的标准输入标准输出标准错误输出,也对应了三个文件描述符(即fd = File Description )。它们分别是0,1,2。也就是说read(0,buf,32)表示从键盘读入至多32个字节到buf中,

标准输入0:从键盘获得输入

标准输出1 : 输出到屏幕(即控制台)

错误输出2 : 输出到屏幕(即控制台)

 

0x002 源码分析

①首先看我要获取flag需要的条件,13行的  (!strcmp("LETMEWIN\n", buf))  ,比较两个字符串,相同则返回0,不相同返回1,所以,我们要构造buf变量为LETMWEIN;

②要想buf变量为LETMEWIN,则需要看12行的  len = read(fd, buf, 32),要使fd为0,获取键盘输入,这样我们就可以自己输入LETMEWIN;

③要使fd为0,看10行的  fd = atoi( argv[1] ) - 0x1234,使argv[1]为0x1234(十进制的4660)即可。

0x003 程序运行

 

flag为:

mommy! I think I know what a file descriptor is!!

 

转载于:https://www.cnblogs.com/DennyT/p/11507080.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值