最近小夥伴發現了一個學習pwn的網站:http://www.pwnable.kr/。然後想着一塊進行,把做過的都記
錄下來。那麼開始第一個吧!
1.點一下fd圖片出現:
觀察ssh [email protected] -p2222(pw:guest),是一條ssh命令。ssh是secure shell通常用於遠程鏈接Linux服務器。
我們打開終端嘗試鏈接服務器。其中fd是用戶名,pwnable.kr是域名,這裏可以替換爲ip或者別名。-p 2222即爲
端口。 guest爲密碼。
2.打開cmd終端,輸入ssh [email protected] -p 2222,並輸入密碼,登陸成功!如果使用ip登錄,可以dig pwnable.kr,
將pwnable.kr替換爲ip即可,其他不變
3.登錄進來即爲根目錄(/home/fd),然後ls -alh 查看下所有文件。
分析一下最後三個文件權限:
權限 文件擁有者 組
-r-sr-x--- 1 fd_pwn fd 7.2K Jun 11 2014 fd
-rw-r--r-- 1 root root 418 Jun 11 2014 fd.c
-r--r----- 1 fd_pwn root 50 Jun 11 2014 flag
-r-sr-x--- 其中第一個-表示文件,r-s r-x ---分別爲用戶fp_pwn,組fd,以及其他用戶對該文件的權限。分析可知,fd即我們登陸的用戶只是對fd.c擁有可讀權限。我們對flag文件無任何權限,只能從fd.c下手。
這裏要特別提一下權限s,s權限是指在執行該文件是,獲取該文件擁有者(在這即爲fd_pwn)的所有權限。後邊要用到哦!
4.上邊分析了只能從fd.c下手,我們先查看下fd.c 輸入cat fd.c:
5.分析下代碼:
atio()函數是將字符串轉換爲數字,即將我們輸入的數字處理爲一下。
read(fp,buff,num)函數是將fp所指向的文件,讀取num個字符,寫到buf中。返回值爲實際讀取的字符數。如果fp爲零,則在命令行讀取。
strcmp(a,b),比較ab大小。如果a=b,返回值爲0.
下面重點來了:
system("/bin/cat flag") 這個C文件會幫我們執行查看flag的命令。這裏最關鍵的是當程序運行的時候,fd用戶是可以獲得fd_pwn的所有權限的,而fd_pwn 擁有對flag的r權限,這不正是我們需要的嗎?
總結一下:
我們要讓運行fd,使得可以查看flag文件。 分析代碼可知,當我們輸入的參數使 fd == 0 ,然後輸入字符串LETMEWIN\n 即可。
6.終端輸入:./fd 4660 然後輸入LETMEWIN,回車:
7.然後將上邊的mommy。。。輸入到 flag框內,完成!!
補充:
我們可以將fd.c文件拷到我們本地,使用命令scp -P2222 [email protected]:fd.c .