極客大挑戰2019的 服務端檢測系統

2021-09-29 17:01:03 字數 3543 閱讀 7314

這道題沒做出來,看來writeup之後發現是因為自己基礎知識不足。這裡補一下。

http頭的格式:

請求方法 /路徑 http/版本

頭欄位: 值

比如: get /index.php http/1.1

host: 127.0.0.1

http頭部的各個字段之間用crlf(\r\n)(%0d%0a)分割http請求頭(響應頭)和請求體(響應體)之間用兩個crlf分割

最簡單的http請求

get請求:

post請求

a=1http頭的字段(一小部分)

host

用於多個網域名稱對映到同乙個ip時,按照host的內容匹配不同**內容,每個http頭必須有host頭當這個目的主機上只有乙個**,那麼host欄位內容可以為任意值

content-type

表明內容部分的編碼格式和**型別 post/put等方式必須有(如果有請求體)

請求頭中的content-type

get請求:

get沒有請求實體部分,所以請求頭中不需要設定content-type欄位

post/put請求

如果post/put請求有請求體(有傳值),那麼必須要設定content-type欄位(否則服務端可能無法處理你的請求)

第三類:multipart/from-data,將表單的資料處理為一條訊息,以標籤為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳檔案。

content-type: multipart/from-data;boundary=***

在請求體中會有乙個content-disposition欄位,用於描述提交的表單的具體資訊

響應頭中的content-type

用來告訴客戶端,服務端返回的真實內容型別是什麼。瀏覽器或客戶端會根據這個值來做一些操作。

content-length 表示內容部分的長度 post/put等方式必須有(如果有請求體)

題目給了原始碼,可控的變數是url和method,提示了admin.php,但要本地才能訪問。

注意到這裡將method放在了%d的前面,如果method為%s%,name結尾的%就會將%d中的%給轉移掉,而前面的%s就可以將body中的內容給列印出來。

而method又會作為http請求的方式,但不影響,因為某些中介軟體會將不認識的方式預設當做get請求來響應

echo "failed

";echo sprintf("body length of $method%d", $body);

提交method=%s%,得到:

**為:

<?php 

include("flag.php");

if($_server['remote_addr']=="127.0.0.1")

}else

這裡要post乙個iwantflag=yes才能獲得flag

再看看下面這串**

這裡使用的stream_context_create和file_get_contents來模擬http請求,method是直接拼接的我們的輸入,所以這裡我們可以構造乙個任意的http請求。

舉個列子:

這裡伺服器的**為

我們用nc來監聽本機的8808埠,看看file_get_contents傳送的http頭資料

nc -lp 8808
如果method為正常的get,這時候就是正常的乙個http請求

而也很容易想到,我們可以通過method來進行注入,使http頭變成我們想要的樣子,比如我輸入

這時發出的http請求就會變成

可以看到,前面的包已經完全成為我們可控的了。

到這裡已經很明白了,只要通過method構造我們的http請求頭即可

最後payload:

最後加乙個引數是為了防止後面的東西影響到前面的iwantflag引數

%26是&的url編碼格式,防止在提前被認為是引數分隔符。

最後,得到flag

極客大挑戰 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進行反序列化。接下來,...