1. 程式人生 > >pwnable.kr 1.fd writeup

pwnable.kr 1.fd writeup

拿到題目
在這裡插入圖片描述
先連上去
在這裡插入圖片描述
ls檢視下目錄
在這裡插入圖片描述
檔案目錄下有 fd,fd.c ,flag檔案。
用cat 檢視下fd.c原始檔得到如下原始碼:。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
	if(argc<2){
		printf("pass argv[1] a number\n");
		return 0;
	}
	int fd = atoi( argv[1] ) - 0x1234;
	int len = 0;
	len = read(fd, buf, 32); //重點
	if(!strcmp("LETMEWIN\n", buf)){
		printf("good job :)\n");
		system("/bin/cat flag");
		exit(0);
	}
	printf("learn about Linux file IO\n");
	return 0;

}

read()會把引數fd所指的檔案傳送n個位元組到buf指標所指的記憶體中。
百度下,linux file IO,得知
fd=0,是標準輸入,
fd=1,是標準輸出,
fd=2,是標準錯誤輸出。
那麼想要從fd所指向的檔案讀取內容到buf裡,則需要fd的值為0;

int fd = atoi( argv[1] ) - 0x1234

atoi函式是將字串轉化為整型數字,那就很明顯了,只需輸入的字串等於0x1234,將0x1234轉化為10進位制是4660。
輸入 ./fd 4660後 再輸入LETMEWIN就行了
在這裡插入圖片描述