pwnable.kr 第一题 FD

题目地址http://pwnable.kr/play.php

第一题 FD

环境是kali系统

首先打开题目

按提示连接ssh 密码为guest

查看文件内容发现存在flag文件,但是没有读权限

查看fd.c代码文件

复习出现的函数

int argc 要输入的参数

char* argv[]表示的是包括文件名在内的参数,文件名是argv[0]

char* envp[]是环境变量,比如path=c:\windows之类的东西。它没有一个整数来为它记数是通过最后一个evnp[i]==NULL来表示结尾的

atoi();atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0‘)才结束转换,并将结果返回。

read(a,b,c);标准输入输出函数 a有三种类型 为0时标准输入读取 为1时标准输出读取 为2时错误输出读取,b为变量 c为多少字节

例: read(0,buf,32)即为输入32字节到buf‘中

strcmp(a,b) 比较a b的值 若a==b 返回0 a>b 返回正数 a<b 返回负数

目标是实现:system("/bin/cat flag")

首先argc不能<2 不然直接退出了

分析代码 首先要满足 strcmp("LETMEWIN\n",buf)==0;

fd=0 然后输入LETMEWIN\n

即 argv[1]==0x1234=4660

得到flag

原文地址:https://www.cnblogs.com/mouzaisi/p/12177817.html

时间: 2024-07-31 10:47:22

pwnable.kr 第一题 FD的相关文章

pwnable.kr 第二题 collision

题目地址 http://pwnable.kr/play.php 首先登录查看文件 分析代码,目的输出flag 显而易见,要让flag输出 就得让check_password这个函数返回一个0x21DD09EC 看提示可以得出要输一个20字节的字符 int占四个字节 char占一个字节 check_password 转换时候将20个char 四个一组转为int并相加 用python自带的计算机简单算一下 我们需要输入四个0x6c5cec8和一个0x6c5cecc 使用万能的python,尝试了多次

【pwnable.kr】 unlink

pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; void

pwnable.kr第三题:bof

0x000查看源码 打开bof.c文件 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 void func(int key){ 5 char overflowme[32]; 6 printf("overflow me : "); 7 gets(overflowme); // smash me! 8 if(key == 0xcafebabe){ 9 system(&q

pwnable.kr第五题:passcode

0x000打开环境 ①查看源码: 1 #include 2 #include 3 4 void login(){ 5 int passcode1; 6 int passcode2; 7 8 printf("enter passcode1 : "); 9 scanf("%d", passcode1); 10 fflush(stdin); 11 12 // ha! mommy told me that 32bit is vulnerable to bruteforcin

pwnable.kr的passcode

前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下我们的用户名,并不能直接查看flag这个文件.查看passcode.c的源码看一下 #include <stdio.h> #include <stdlib.h> void login(){ int passcode1; int passcode2; printf("enter

【pwnable.kr】leg

pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.cDownload : http://pwnable.kr/bin/leg.asm ssh [email protected] -p2222 (pw:guest) 先下载这两个文件:leg.c #include <stdio.h> #include <fcntl.h> int key1(){ asm("mov r3, pc\n"); } int key2

【pwnable.kr】blackjack

又一道pwnable nc pwnable.kr 9009 读题找到源代码在:http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 第一反应是源代码这么长,还不如先玩玩看. 首先,看一下游戏规则发现和21点游戏是一样的,可能国外就叫blackjack吧. 每次,让游戏中下注,然后和电脑比赛,下注的金额不能超过所持有的金额. 这尼玛发牌函数也是随机的,就算你运气再好,算法再牛,想挣100w

【pwnable.kr】bof

pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Running at : nc pwnable.kr 9000 很简单的一道栈溢出题目. 依然先读代码: #include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overfl

【pwnable.kr】 codemap

pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh [email protected] -p2222 (pw:guest) 这道题虽然是在pwnable下,但是是一道逆向题... //前web狗膜一发二进制大佬 根据提示,需要查看 0x403E65 运行时,寄存器 EAX,EBX 的内容. 先不考虑运行的内容,先看程序.首先这个程序没有加壳,直接可以用ida查看内容. 然后可以看到程序的框架,在main函数中,默默按下F5..