pwnable.kr |Toddler's Bottle |fd
多次比赛在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相关推荐
- pwnable.kr [Toddler's Bottle] - uaf
Mommy, what is Use After Free bug? ssh uaf@pwnable.kr -p2222 (pw:guest) 根据提示已经可以知道这里需要我们利用漏洞Use-Afte ...
- Pwnable之[Toddler's Bottle](三)--unlink
Pwnable之[Toddler's Bottle](三)–unlink 提示:how can I exploit unlink corruption 我该怎么利用断腐败??? 其实就是如何利用chu ...
- Pwnable之[Toddler's Bottle](二)
Pwnable之[Toddler's Bottle](2) Pwn挑战地址 11.coin1 nc 连上. 要你玩一个游戏,游戏的规则是: 你手里拿了几枚金币. 然而,其中有一枚假币. 假币和真币一模 ...
- Pwnable之[Toddler's Bottle](一)
Pwnable之[Toddler's Bottle] Pwn挑战地址 1.fd #include <stdio.h> #include <stdlib.h> #include ...
- Pwnable之[Toddler's Bottle](三)--asm
Pwnable之[Toddler's Bottle](三)–ASM 提示:我觉得一个黑客应该知道怎么做shellcode 查看代码asm.c的代码 #include <stdio.h> # ...
- Pwnable之[Toddler's Bottle](三)--memcpy
Pwnable之[Toddler's Bottle](三)–memcpy 提示是: Are you tired of hacking?, take some rest here. Just help ...
- Pwnable之[Toddler's Bottle](三)--UAF
Pwnable之[Toddler's Bottle]–UAF UAF,use-after-free 顾名思义,就是释放过内存的重利用. 根据操作系统里的内存分配就知道,当分配给的一个代码释放后,如果再 ...
- PWN学习之[Toddler''s Bottle]-[fd]
在linux命令行界面输入ssh fd@pwnable.kr -p2222 密码为guest 链接上后发现目录下有fd fd.c和flag三个文件,直接cat flag查看flag会显示无权限,必须通 ...
- pwnable.rk [Toddler‘s Bottle] 5、passcode 详细过程
最近在学习pwn,做到这个题搜了一些资料,弄了挺长时间,记录一下. passcode.c代码如下: #include <stdio.h> #include <stdlib.h> ...
最新文章
- leetcode算法题--计算各个位数不同的数字个数
- 前端常见知识点二之浏览器
- 入门Web前端要注意什么?要学哪些软件?
- Android的图片缓存ImageCache(转)
- c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...
- cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
- jqprint控件使用
- 公网访问阿里云数据库MongoDB——填坑笔记
- 小公司如何选择合适的信息管理软件
- JavaScript常用开发框架总结
- 混迹职场,有交换意识的人都是聪明人
- make: 'pcs.o' is up to date.问题解决
- 18.案例实战:体验lombok的核心@Data和@Slf4j注解
- 机器学习--python代码实现基于Fisher的线性判别(鸢尾花数据集的分类)
- laydate组件 无法传值_Vue组件间通信几种方式,你用哪种?【实践】
- POJ 3617 Best Cow Line
- (深度原创)华为基于LTC主流程的组织销售能力提升,含相关工具模板方法!
- rtc驱动模型及rx8025驱动学习
- 第二章.物理层:2.6宽带接入技术
- kuberbetes容器生命周期 - 容器探测(liveness/readiness probes)