pwn題解第一道

2021-07-29 12:17:56 字數 974 閱讀 4075

今天聽說了乙個**pwnable.kr。很適合初學者,就試著做了一道題目。

第一道題目,按照網頁上給的鏈結,使用putty鏈結工具聯入。

輸入ls命令檢視檔案內容。

很開心的看到了flag檔案,於是直接開啟,果然不出所料,我是沒有許可權開啟的。然後檢視了一下fd.c的**。

#include #include #include char buf[32];

int main(int argc, char* argv, char* envp)

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

int len = 0;

len = read(fd, buf, 32);

if(!strcmp("letmewin\n", buf))

printf("learn about linux file io\n");

return 0;

}

很簡單的**。其實就是驗證buf裡面是否是「letmewin」;然後buf是從fd指向的檔案讀出來的。

可是fd又是什麼呢,明顯是個int。這又怎麼指向檔案呢。

原來在linux下面,檔案有乙個檔案符號表。每乙個符號表裡面都會給本程序開啟的檔案建立索引。所謂的int fd。其實就是乙個檔案的索引編號。

下面要解決的問題就是,怎麼樣保證讓fd所指向的檔案內容為letmewin。觀察上面的**我們可以發現這段**之前並沒有任何開啟檔案,所以我們可以讓下乙個檔案為0 。也就是說構造第乙個引數為0x1234十進位制的4660。然後接著按回車的時候回神奇地發現系統在等待,趁機把letmewin輸進去,果然成功拿到flag。至於原理嗎?還是沒有搞太清楚,估計是索引發現檔案不存在的時候就會預設讓新建乙個檔案。感興趣的話可以到linux上跑一跑試一試。

通過這個題目,可以對linux的檔案系統有個初步了解,就像遊戲中問得一樣——:「mommy! what is a file descriptor in linux?」

搭建一道PWN題

最近接到任務,說要出幾個pwn題,所以就去熟悉了一下pwn題的搭建 第一步,準備一道pwn題的原始碼 includeint main return 0 第二步就是gcc編譯了,因為還要牽扯到很多的開關,所以這裡一步步來 1 關閉dep nx 堆疊不可執行 gcc z execstack o 編譯完的...

課堂第一道題

includevoid funstr char str1 main void funstr char str1 printf n printf s hello world hello world hwhello world hello world process exited after 4.466...

一道演算法題解法,笑出聲

今天在牛客上刷了一道題,題目是這樣的 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數...