pwnable.kr fd

pwnable.kr one

OK, 題目說讓我們 ssh 遠程服務(wù)器,那么咱們 ssh 連接一下。友情提示:現(xiàn)在的 pwn 一般都是基于 Linux 的哦。所以大家在開始玩這么一個游戲的時候建議先安裝一個基于 Linux 內(nèi)核的虛擬機关贵,如 WSL。

```shell

$?ssh?fd@pwnable.kr?-p2222

fd@pwnable.kr's?password:?guest????#?這個密碼是不可見的

```

下面我使用的是 WSL for kali 遠程登錄的結(jié)果:

好了卖毁,相信大家都會基本的 Linux 命令揖曾。我們查看一下目錄文件:

```shell

$?ls

fd??fd.c??flag

```

發(fā)現(xiàn)目錄下有三個文件落萎。然后三個文件的類型可以使用‘file filename’查看。

```$?file?fd?fd.c?flag

fd:???setuid?ELF?32-bit?LSB?executable,?Intel?80386,?version?1?(SYSV),?dynamically?linked,?interpreter?/lib/ld-linux.so.2,?for?GNU/Linux?2.6.24,?BuildID[sha1]=c5ecc1690866b3bb085d59e87aad26a1e386aaeb,?not?strippedfd.c:?C?source,?ASCII?text

flag:?regular?file,?no?read?permission

我們發(fā)現(xiàn) flag 是沒有讀權(quán)限的炭剪,顯然咱們不能直接使用 cat 命令查看练链。所以咱們還是老老實實的做題吧。

既然題目提供了源代碼奴拦,我們當然是先分析源代碼:

$?cat?fd.c

fd.c 文件內(nèi)容如下:

#include?

#include?

#include?

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;

}

分析一下媒鼓,程序大概的意思就是讓我們提供一個參數(shù)(從 atoi 還可以看出,參數(shù)還必須是一個整數(shù))給程序错妖,然后程序?qū)?buf 里面的內(nèi)容與字符串“LETMEWIN\n”開始比較绿鸣,if 語句里面緊接著就跟了咱們想要的 flag 。于是咱們開始分析一下判斷條件暂氯,發(fā)現(xiàn) buf 只在

len?=?read(fd,?buf,?32);

中出現(xiàn)潮模。于是乎我們開始查詢“Linux中read函數(shù)的用法”……查到一個 Linux 常用函數(shù)手冊,但是他個雞兒的亂碼了(查看源碼發(fā)現(xiàn)網(wǎng)頁采用的是big5編碼)株旷,于是乎在chrome中下載了一個轉(zhuǎn)碼插件隨后順利解決了亂碼問題再登。

read(由已打開的文件讀取數(shù)據(jù))

相關(guān)函數(shù)readdir,write晾剖,fcntl,close梯嗽,lseek齿尽,readlink,fread

表頭文件#include

定義函數(shù)ssize_t read(int fd,void * buf ,size_t count);

函數(shù)說明read()會把參數(shù)fd 所指的文件傳送count個字節(jié)到buf指針所指的內(nèi)存中灯节。若參數(shù)count為0循头,則read()不會有作用並返回0。返回值為實際讀取到的字節(jié)數(shù)炎疆,如果返回0卡骂,表示已到達文件尾或是無可讀取的數(shù)據(jù),此外文件讀寫位置會隨讀取到的字節(jié)移動形入。

附加說明如果順利read()會返回實際讀到的字節(jié)數(shù)全跨,最好能將返回值與參數(shù)count 作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少亿遂,則有可能讀到了文件尾浓若、從管道(pipe)或終端機讀取,或者是read()被信號中斷了讀取動作蛇数。當有錯誤發(fā)生時則返回-1挪钓,錯誤代碼存入errno中,而文件讀寫位置則無法預(yù)期耳舅。

錯誤代碼EINTR 此調(diào)用被信號所中斷碌上。

EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數(shù)據(jù)可讀取則返回此值。

EBADF 參數(shù)fd 非有效的文件描述詞馏予,或該文件已關(guān)閉天梧。

範例參考open()。

當然吗蚌,如果你完全信任自己的英語水平的話可以在 Linux 中使用下面的命令查看 read 函數(shù)的幫助腿倚。

$?man?read

READ(2)??????????????????????????????????????????????????????????????Linux?Programmer's?Manual??????????????????????????????????????????????????????????????READ(2)

NAME

read?-?read?from?a?file?descriptor

SYNOPSIS

#include?

ssize_t?read(int?fd,?void?*buf,?size_t?count);

DESCRIPTION

read()?attempts?to?read?up?to?count?bytes?from?file?descriptor?fd?into?the?buffer?starting?at?buf.

On??files?that?support?seeking,?the?read?operation?commences?at?the?current?file?offset,?and?the?file?offset?is?incremented?by?the?number?of?bytes?read.??If

the?current?file?offset?is?at?or?past?the?end?of?file,?no?bytes?are?read,?and?read()?returns?zero.

If?count?is?zero,?read()?may?detect?the?errors?described?below.??In?the?absence?of?any?errors,?or?if?read()?does?not?check?for?errors,?a?read()?with?a?count

of?0?returns?zero?and?has?no?other?effects.

If?count?is?greater?than?SSIZE_MAX,?the?result?is?unspecified.

RETURN?VALUE

On?success,?the?number?of?bytes?read?is?returned?(zero?indicates?end?of?file),?and?the?file?position?is?advanced?by?this?number.??It?is?not?an?error?if?this

number?is?smaller?than?the?number?of?bytes?requested;?this?may?happen?for?example?because?fewer?bytes?are?actually?available?right??now??(maybe??because??we

were?close?to?end-of-file,?or?because?we?are?reading?from?a?pipe,?or?from?a?terminal),?or?because?read()?was?interrupted?by?a?signal.??See?also?NOTES.

On?error,?-1?is?returned,?and?errno?is?set?appropriately.??In?this?case,?it?is?left?unspecified?whether?the?file?position?(if?any)?changes.

……(此處省略一萬個單詞)

因為這里 fd 參數(shù)才是我們可以控制的,所以我們要知道的是 read 函數(shù)中 fd 參數(shù)代表的是什么蚯妇。由 reference 我們知道敷燎,int fd 實際上是一個文件描述符。繼續(xù)搜索“read 函數(shù)中的 fd”在百度貼吧中得到了完美的解釋箩言。

open打開一個文件硬贯,并返回一個整數(shù)值,這個整數(shù)叫做文件描述符陨收,默認的標準輸入是 0饭豹, 標準輸出是1,標準出錯是2(這些可以在unistd.h中找到)务漩,所以你再open一個文件的時候返回的是3拄衰,如果在你關(guān)閉這個文件之前,再open一個文件饵骨,那返回的就是4翘悉,以前類推。

至于讀函數(shù)出錯居触,你可以包含errno.h頭文件妖混,并打印錯誤信息,printf( "%d,%s", errno,(char*)strerror(errno) );來顯示錯誤信息

--https://zhidao.baidu.com/question/1430510337268766779.html(來來轮洋,給這個完美的解釋一個贊V剖小)

Perfect~,我們已經(jīng)知道要干嘛了弊予,就是使 fd 的值為 0(其實我測試了一下祥楣,0,1,2 都是可以的),然后使 read 接收我們的輸入块促。

0x1234 = 4660

最終解題:

fd@ubuntu:~$?./fd?4660

LETMEWIN

good?job?:)

mommy!?I?think?I?know?what?a?file?descriptor?is!!

fd@ubuntu:~$

Flag:??mommy! I think I know what a file descriptor is!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荣堰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竭翠,更是在濱河造成了極大的恐慌振坚,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斋扰,死亡現(xiàn)場離奇詭異渡八,居然都是意外死亡啃洋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門屎鳍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宏娄,“玉大人,你說我怎么就攤上這事逮壁》跫幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵窥淆,是天一觀的道長卖宠。 經(jīng)常有香客問我,道長忧饭,這世上最難降的妖魔是什么扛伍? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮词裤,結(jié)果婚禮上刺洒,老公的妹妹穿的比我還像新娘。我一直安慰自己吼砂,他們只是感情好逆航,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渔肩,像睡著了一般纸泡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赖瞒,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音蚤假,去河邊找鬼栏饮。 笑死,一個胖子當著我的面吹牛磷仰,可吹牛的內(nèi)容都是我干的袍嬉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼灶平,長吁一口氣:“原來是場噩夢啊……” “哼伺通!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逢享,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤罐监,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞒爬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弓柱,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡沟堡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矢空。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片航罗。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屁药,靈堂內(nèi)的尸體忽然破棺而出粥血,到底是詐尸還是另有隱情,我是刑警寧澤酿箭,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布复亏,位于F島的核電站,受9級特大地震影響七问,放射性物質(zhì)發(fā)生泄漏蜓耻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一械巡、第九天 我趴在偏房一處隱蔽的房頂上張望刹淌。 院中可真熱鬧,春花似錦讥耗、人聲如沸有勾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔼卡。三九已至,卻和暖如春挣磨,著一層夾襖步出監(jiān)牢的瞬間雇逞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工茁裙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塘砸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓晤锥,卻偏偏與公主長得像掉蔬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矾瘾,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349