極客大挑戰 2019 BuyFlag

2022-06-06 04:24:11 字數 1597 閱讀 2645

進入頁面如下

結合題目buyflag的提示,我們點選payflag看看

檢視一下原始碼

發現端倪

if (isset($_post['password'])) elseif ($password == 404) 

}

這裡跟以前做過的乙個「矛盾」的ctf題目很相似,首先它判斷你是不是數字,如果是,就錯誤,如果不是數字再判斷你是不是等於404,如果等於404,則密碼正確。很顯然,這裡的考點就是is_numeric這個函式,那麼我們來看看這個函式有什麼特別

is_numeric()函式用於檢測變數是否為數字或數字字串。

語法:

bool is_numeric ( mixed $var )
$var:要檢測的變數。

返回值:

如果指定的變數是數字和數字字串則返回 true,否則返回 false。

is_numeric函式對於空字元%00,無論是%00放在前後都可以判斷為非數值,而%20空格字元只能放在數值後。所以,檢視函式發現該函式對對於第乙個空格字元會跳過空格字元判斷,接著後面的判斷!

那知道這個就好說了,我們直接404%20,就可以同時過第乙個判斷和第二個判斷,下面嘗試

但我們把密碼改了之後,發現提示我們數字長度太大,但是要讓我們買flag還必須有這麼多的錢,那我們就需要對money這個引數動點腦筋了,有什麼辦法讓它不需要輸入那麼多數字,還能滿足它對money的判斷

要求的是傳入兩個字串,那如果我們傳入乙個非字串會出現什麼結果呢?當我們傳入乙個非字串的時候,函式會報錯,但同時會返回結果0,也就是說雖然報錯,但返回的結果0意味著相等,那麼如何可以傳入乙個非字串呢?用陣列。

所以這裡我們將money這個變數改成數字形式

再這裡同樣還有乙個點需要注意,平時的時候我們的cookie一般是phpsessid,但是這裡卻不是,這裡的user,本來這裡的值是user=0,那麼我們將其改為1,其可能是判斷使用者的乙個方式

下面是返回結果

拿到flag

主要是考察php中某些函式的用法和漏洞利用

極客大挑戰 2019 PHP

開啟以後,是三個php原始碼,其中最重要的是class.php,如下 include flag.php error reporting 0 class name function wakeup function destruct if this username admin else 看了一下,這個...

極客大挑戰 2019 HardSQL wp

有過濾,抓個包fuzz一下 等號,空格等被過濾 發現可以用報錯注入,空格可以用括號代替 查表名username admin or extractvalue 1,concat 0x7e,select group concat column name from information schema.co...

極客大挑戰 2019 PHP

剛進入 我們可以看到這樣的乙個介面 根據內容提示,有備份 的習慣 日常後台掃瞄,發現有www.zip檔案,我們進行解壓得到 看到flag.php開啟檢視,發現沒有什麼有用的資訊。我們開啟index.php看看 我們可以看到通過get方式傳入引數select,並對引數select進行反序列化。接下來,...