小白pwn之旅之pwnable05

2021-10-05 16:09:16 字數 1481 閱讀 7768

看原始碼

#include

#include

#define pw_len 10

#define xorkey 1

void

xor(

char

* s,

int len)

}int

main

(int argc,

char

* ar**)

printf

("do not bruteforce...\n");

sleep

(time(0

)%20)

;char pw_buf[pw_len+1]

;int len;if(

!(len=

read

(fd,pw_buf,pw_len)

>0)

)char pw_buf2[pw_len+1]

;printf

("input password : ");

scanf

("%10s"

, pw_buf2)

;// xor your input

xor(pw_buf2,10)

;if(!

strncmp

(pw_buf, pw_buf2, pw_len)

)else

close

(fd)

;return0;

}

分析

只有最後的if語句為真才執行system函式,才能get flag

流程:從password中讀取10個位元組,然後自己輸入10個位元組,與十個1的抑或之後,比較手動輸入的和password輸入的,如果相等就輸出flag

根據題目的提示,是操作符優先順序的問題。

if(fd=open("/home/mistake/password",o_rdonly,0400)< 0)

這句**中,《的優先順序大於=,所以先進行比較,後進行賦值,而open開啟乙個檔案,任何情況下返回都不會小於0,因此比較之後就等於0,fd=0了,對read函式來說,fd=0就是從標準輸入讀入,因此實際上buf1就是使用者自己輸入的10個位元組。所以就簡單了。

先輸入10個0

因為0000000000 ^ 1111111111 = 1111111111

所以在input password再輸入1111111111

這樣就滿足了strncmp的判斷

發現這源**沒有什麼可以讀的,仔細審題後發現多了個bash,檢視資料後發現這是乙個 破殼 的漏洞。

這是我發現寫的不錯的解題思路和漏洞資訊

最後就能cat flag

總結:還是太年輕,有很多地方都沒有想到。

小白pwn之旅之pwnable06

看題,連上去,發現要做題還要在60秒做一百題 怎麼可能嘛 分析就寫指令碼開始,題中又說網路不好可以在伺服器端寫,嘿嘿 那直接連線上一題 ssh shellshock pwnable.kr p2222 pw guest 就行了,在cd tmp下寫就好了這裡你會發現已經有大佬寫好了的 真好 叫coin....

小白pwn之旅之pwnable07

連上去看源 發現關鍵 分析輸入乙個 6 位元組的字串,與程式隨機生成的 6 位元組字串比較。看第乙個for迴圈這裡是乙個acsii碼1 45,但可顯示的是從33 45,第二個for迴圈巢狀的意思是將輸入的6個位元組與系統的生成的6個位元組只要有乙個相同就能cat flag。這裡我選的的 連線上去,看...

小白的github之旅

一直聽說github是乙個很好用的工具,是程式設計師必備,感覺裡面有很多有用的學習資源,奈何一直不知道怎麼使用,趁著考完研有一定的英語基礎現在嘗試著摸索一下,在此記錄下自己的摸索過程,希望能對之後看到這個很粗劣的部落格的小白有所幫助,同時學習一下怎麼寫部落格,純屬為了記錄,有錯誤歡迎批評指正。本來以...