pwnable.kr 1.fd writeup
阿新 • • 發佈:2018-12-26
拿到題目
先連上去
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就行了