[pwnable筆記]--fd

之前做過一次,決定第二次做的時候做做筆記。
在做之前要先安裝Xshell
我安裝的是Xshell 6 Xshell6下載地址
安裝步驟也相對簡單,按下一步什麼的就很容易安裝完成
打開Xshell
新建
新建
選擇剛纔新建的,點擊連接即可
連接

第一題:fd

fd
題目中ssh [email protected] -p2222(pw:guest)
其實就是用戶名@主機名 -p端口號(密碼)
(在新建會話的時候會用到主機名和端口號)
在連接上上圖test的時候會要求你輸入用戶名和密碼,此題便是fd 和guest
連接成功後會出現如下畫面
連接成功
接着輸入ls 查看目錄文件
輸入ls
我們看到有3個文件,其中有一個源代碼fd.c
輸入cat fd.c 查看一下源碼
源碼

從源代碼中我們可以分析出,執行該文件需要傳一個參數。要拿到 flag 需要使得:strcmp(“LETMEWIN\n”, buf) ==0

函數strcmp
int strcmp(const char *s1, const char *s2);
功能:用來比較兩個字符串
參數:s1、s2爲兩個進行比較的字符串
返回值:若s1、s2字符串相等,則返回零;若s1大於s2,則返回大於零的數;否則,則返回小於零的數。

所以此處我們要使得 buf=”LETMEWIN\n”
而 buf 只在上文的 read(fd, buf, 32) 中出現過
即read(fd, buf, 32)將buf設爲”LETMEWIN\n”

函數read
ssize_t read(int fd, void* buf, size_t count)
成功返回讀取的字節數,出錯返回-1並設置errno
fd是文件指針
buf: 讀上來的數據保存在緩衝區 buf 中,同時文件的當前讀寫位置向後移
count: 請求讀取的字節數。
read()會把參數fd 所指的文件傳送count個字節到buf指針所指的內存中。若參數count爲0,則read爲實際讀取到的字節數,如果返回0,表示已到達文件尾或是無可讀取的數據,此外文件讀寫位置會隨讀取到的字節移動。

其中fd是可以指定的
習慣上,標準輸入(standard input)的文件描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。
所以此處我們要使fd=0,也就是atoi(argv[1])大小爲0x1234,也就是說我們要使argv[1]爲4660。
提示:atoi (表示 ascii to integer)是把字符串轉換成整型數的一個函數
0x1234 的十進制爲 4660

此題就解出了
$ ./fd 4660
LETMEWIN
good job :)
mommy! I think I know what a file descriptor is!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章