博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【pwnable.kr】fb
阅读量:5101 次
发布时间:2019-06-13

本文共 1108 字,大约阅读时间需要 3 分钟。

这是pwnable.kr的签到题,记录pwn入门到放弃的第一篇。

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

题目很简单,登录上了ssh后,发现了3个文件:fd,fd.c,flag

首先下载fd.c

1 #include 
2 #include
3 #include
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 }

题目不是网络数据包题目,登录ssh用户,直接运行即可。

题目需要一个参数,参数的目的是在第10行,用于构造fd,即第12行 read函数的fd指针。

fd是一个文件指针,在头文件中直接定义的文件指针有三个stdin、stdout、stderr。分别对应数值为0、1、2,利用这一点,可以解决这个问题。

read函数特性是如果读取的是一个固定文件,即一次性读完,如果不是则阻塞并等待输出,并且以行单位读取。

因此,构造fd = 0、1、2均能达到用户输入的值赋给buf变量的效果,类似于web ctf中常用的php://input协议。

解题时,首先将0x1234转换为10进制,——4660.

这里也是一个坑,atoi不能转换十六进制的参数变量,比如:

接下来,输入 ./fd 4661之后,程序阻塞于read()函数处

 

,可输入LETMEWIN

签到题就踩了坑,离放弃更进一步。

 

 

 

ps: 晚上游泳去。

转载于:https://www.cnblogs.com/p4nda/p/7095399.html

你可能感兴趣的文章
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>