多次比赛在pwn上面被花式吊打了,最近来学习点pwn的相关知识吧,以外得到一个网站pwnable.kr.提供了各式各样的环境让我们去练习,我自己也将练习的过程和心得体会在博客上一一记录吧.以下是入门题目,考的是linux下的文件描述符.(小菜心得,大牛勿笑,如有错误,还请指正)

得到程序的源代码如下

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 char buf[32];
 5 int main(int argc, char* argv[], char* envp[]){
 6         if(argc<2){
 7                 printf("pass argv[1] a number\n");
 8                 return 0;
 9         }
10         int fd = atoi( argv[1] ) - 0x1234;
11         int len = 0;
12         len = read(fd, buf, 32);
13         if(!strcmp("LETMEWIN\n", buf)){
14                 printf("good job :)\n");
15                 system("/bin/cat flag");
16                 exit(0);
17         }
18         printf("learn about Linux file IO\n");
19         return 0;
20
21 }

因为初次接触linuxC,对代码"int main(int argc, char* argv[], char* envp[])"中的参数百度了一下,int argc指的执行程序时命令行的参数个数,之后的数组argv[]用来存放命令行中参数的具体值.所以这道题如果只键入了一个参数的话程序就会输出"pass argv[1] a number\n"让我们给第二个参数一个具体的数值.

在第10行代码中fd被赋值为第二个参数通过atoi()函数转化为整型之后的值减去0x1234(十进制的4660)之后的值。在linuxC下read()函数是涉及到了文件描述的函数,通过fd的取值的不同来完成向buf中输入32个字符或者是从buf中输出32个字符.(关于文件描述符可以看看这个大牛的解释http://blog.csdn.net/cywosp/article/details/38965239)因为程序在之后将buf与字符串"LETMEWIN\n"做了对比,我们可以知道,这个时候需要文件描述符fd==0来进行对buf做输入操作.而通过这上面对fd的定义我们就可以知道argv[1]==0x1234.所以构造语句

echo "LETMEWIN"|./fd 4660      (此处echo"LETMEWIN"是将字符串LETMEWIN作为echo的参数传入buf中,后一句的./fd 4660是为了构造第二个参数大小刚刚好等于0x1234来使fd等于0从而通过read函数来完成字符串对比过程)

转载于:https://www.cnblogs.com/F2og0d/p/4534160.html

pwnable.kr |Toddler's Bottle |fd相关推荐

  1. pwnable.kr [Toddler's Bottle] - uaf

    Mommy, what is Use After Free bug? ssh uaf@pwnable.kr -p2222 (pw:guest) 根据提示已经可以知道这里需要我们利用漏洞Use-Afte ...

  2. Pwnable之[Toddler's Bottle](三)--unlink

    Pwnable之[Toddler's Bottle](三)–unlink 提示:how can I exploit unlink corruption 我该怎么利用断腐败??? 其实就是如何利用chu ...

  3. Pwnable之[Toddler's Bottle](二)

    Pwnable之[Toddler's Bottle](2) Pwn挑战地址 11.coin1 nc 连上. 要你玩一个游戏,游戏的规则是: 你手里拿了几枚金币. 然而,其中有一枚假币. 假币和真币一模 ...

  4. Pwnable之[Toddler's Bottle](一)

    Pwnable之[Toddler's Bottle] Pwn挑战地址 1.fd #include <stdio.h> #include <stdlib.h> #include ...

  5. Pwnable之[Toddler's Bottle](三)--asm

    Pwnable之[Toddler's Bottle](三)–ASM 提示:我觉得一个黑客应该知道怎么做shellcode 查看代码asm.c的代码 #include <stdio.h> # ...

  6. Pwnable之[Toddler's Bottle](三)--memcpy

    Pwnable之[Toddler's Bottle](三)–memcpy 提示是: Are you tired of hacking?, take some rest here. Just help ...

  7. Pwnable之[Toddler's Bottle](三)--UAF

    Pwnable之[Toddler's Bottle]–UAF UAF,use-after-free 顾名思义,就是释放过内存的重利用. 根据操作系统里的内存分配就知道,当分配给的一个代码释放后,如果再 ...

  8. PWN学习之[Toddler''s Bottle]-[fd]

    在linux命令行界面输入ssh fd@pwnable.kr -p2222 密码为guest 链接上后发现目录下有fd fd.c和flag三个文件,直接cat flag查看flag会显示无权限,必须通 ...

  9. pwnable.rk [Toddler‘s Bottle]  5、passcode 详细过程

    最近在学习pwn,做到这个题搜了一些资料,弄了挺长时间,记录一下. passcode.c代码如下: #include <stdio.h> #include <stdlib.h> ...

最新文章

  1. leetcode算法题--计算各个位数不同的数字个数
  2. 前端常见知识点二之浏览器
  3. 入门Web前端要注意什么?要学哪些软件?
  4. Android的图片缓存ImageCache(转)
  5. c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...
  6. cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
  7. jqprint控件使用
  8. 公网访问阿里云数据库MongoDB——填坑笔记
  9. 小公司如何选择合适的信息管理软件
  10. JavaScript常用开发框架总结
  11. 混迹职场,有交换意识的人都是聪明人
  12. make: 'pcs.o' is up to date.问题解决
  13. 18.案例实战:体验lombok的核心@Data和@Slf4j注解
  14. 机器学习--python代码实现基于Fisher的线性判别(鸢尾花数据集的分类)
  15. laydate组件 无法传值_Vue组件间通信几种方式,你用哪种?【实践】
  16. POJ 3617 Best Cow Line
  17. (深度原创)华为基于LTC主流程的组织销售能力提升,含相关工具模板方法!
  18. rtc驱动模型及rx8025驱动学习
  19. 第二章.物理层:2.6宽带接入技术
  20. kuberbetes容器生命周期 - 容器探测(liveness/readiness probes)

热门文章

  1. 抢先玩乐Iris发布2.1版 Android版Siri(下载地址)
  2. 海昇智:拼多多标题关键词优化有什么技巧?
  3. 人工智能会引发失业潮吗?
  4. 怎么应对软件测试过程中的质量管理及风险?
  5. 夏日超好吃零食集合,你吃过几样?
  6. BUCK电路分析设计(二)/备忘
  7. 将childNodes返回的伪数组转化为真数组
  8. c 语言pets天梯训练题目,2017年公共英语三级英语知识运用试题
  9. pca9685 stm32 hal iic
  10. 用批处理bat mklink 创建软连接