HTTP PUT 上傳檔案 Shell (二)

2022-05-31 22:33:09 字數 2720 閱讀 7076

0x00 判斷是否允許http put

傳送這樣的乙份報文到伺服器,檢視伺服器返回:

如果返回值是200,就可以進行下一步嘗試

0x10 http - put 上傳

根據語言的型別,需要上傳不同型別的檔案,不過先不急,試試上傳乙個txt檔案。

如果上傳成功了,再好不過。不成功的話,有可能是因為http請求頭的問題。根據返回**,可以參考 

成功之後,再根據伺服器語言上傳對應的木馬:

即使格式都對,也有可能上傳失敗,伺服器可能做了一些配置。不急,且往下看

這時候,第一次上傳成功的test.txt檔案就起作用了。

或者採用move:

注意move的時候,要求兩個檔案不在同乙個資料夾內。 

大概走到這兒,能傳上去的,就傳上去了= =傳不上去的,可以試試 http method 中其他的方法

0x30 自動化實現

寂寞如雪,快速把工具寫完了。

分享一下,在開發過程中遇到的問題和解決方案

偽**:

if put_txt:

if put_shell:

exit()

else:

if copy_shell:

exit()

if move_shell:

exit()

else: //put失敗

put不可用

0x40 http返回值

無論是put、move、copy,成功的時候會返回201。但是如果上傳檔案的時候,當前目錄下已有該檔案或者在move、copy的時候,目標檔案和當前檔案在同一路徑下時,會返回204,狀態碼描述為「no content」。

針對這樣的問題,解決方案如下:

① put的時候,隨機生成乙個500000以內的數字作為檔名。

② move、copy的時候,由使用者手動輸入路徑(通過url可得到)。

在上傳的時候,可以讓我們感覺精神振奮的是201/204。但大多數時候,statu_code會是404,503,403,甚至還會出現200(其實並沒有什麼卵用,只是伺服器做了配置)。根據伺服器的設定不同,同樣是上傳不同,返回值也會不同~~

0x50 多個socket

因為最後加上了從檔案中讀取,批量的去讀取,一開始以為socket物件只需要宣告一次,就可以多次連線不同的url。但是會一直報錯。

sock = socket.socket(socket.af_inet, socket.sock_stream)

for line in file_object:

sock.connect((temp[0], int(temp[1])))

//一些處理

sock.close()

正確的方法應該是這樣,每次連線連線都需要新建一下socket物件:

for line in file_object:

sock = socket.socket(socket.af_inet, socket.sock_stream)

sock.connect((temp[0], int(temp[1])))

//一些處理

sock.close()

0x60 最後

比較老的乙個漏洞,基本做不到批量拿站,僅僅自娛自樂~順便練習python~

CTF 攻防練習之HTTP PUT上傳漏洞

主機 192.168.32.152 靶機 192.168.32.159 中介軟體put漏洞 包括apache,tomcat,iis等中介軟體設定支援的http方法 get,post,head,delete,put等 每乙個開放了http方法都有其對應功能,put方法可以直接從客戶機上傳檔案到伺服器,...

php mysql上傳檔案 PHP 檔案上傳

通過 php,可以把檔案上傳到伺服器。建立乙個檔案上傳表單 允許使用者從表單上傳檔案是非常有用的。請看下面這個供上傳檔案的 html 表單 芝麻教程 web3.xin 檔名 將以上 儲存到 form.html 檔案中。有關上面的 html 表單的一些注意項列舉如下 標籤的 enctype 屬性規定了...

檔案上傳和多檔案上傳

上傳檔案分析 上傳的檔案是以二進位制的形式上傳,因此在上傳表單裡面需要宣告enctype multipart form data 上傳的檔案所有的資訊都包含到全域性變數 files中 如 問題 1 上傳中文亂碼問題 只需使用函式incov 原來的編碼utf 8 轉化為的編碼gbk gb2312 檔名...