搜尋
首頁後端開發Python教學如何執行和偵測路徑注入攻擊

Cómo Realizar y Detectar Ataques de Path Injection

首先,我不是這方面的專家,我只是在學習並享受使用人工智慧工具的樂趣。

也就是說...我正在為朋友做開發,他有一個100張的PDF,有銀行交易記錄。您需要將這些記錄儲存在 Excel 中以便日後能夠處理。

透過使用Github copilot,我製作了一個使用python和一些庫進行資料擷取的腳本...三個多力多滋之後...作為早餐、午餐和晚餐系統,我建立了一個flask伺服器,來為腳本提供服務通過前端的端點,使用html、css 和js 純粹而簡單。

在與Copilot互動過程中,出現部分程式碼存在「路徑注入」類型漏洞的警報。這個警報很有趣:D

由於我想了解更多關於電腦安全的知識,所以我在這裡寫部落格來記錄這段旅程......

這裡人工智慧開始說話。

攻擊者可以透過操縱使用者輸入來存取伺服器檔案系統上未經授權的檔案或目錄,從而利用路徑注入漏洞。以下是如何做到這一點的範例:

路徑注入範例

假設您的 Flask 應用程式中有一個路由,允許使用者上傳檔案並將其儲存到伺服器。如果您不驗證或清理檔案名,攻擊者可能會發送惡意檔案名稱來嘗試存取系統上的敏感檔案。

易受攻擊的代碼

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename  # Nombre del archivo proporcionado por el usuario
    save_path = os.path.join('uploads', filename)

    # Guardar el archivo sin validar el nombre del archivo
    with open(save_path, 'wb') as f:
        f.write(file.read())

    return 'File uploaded successfully'

路徑注入攻擊
攻擊者可以發送帶有惡意檔案名稱的請求,例如../../etc/passwd。這可能會導致以下路線:

上傳/../../etc/passwd

如果伺服器未驗證或清理檔案名,該檔案可能會保存到不需要的位置,從而允許攻擊者覆蓋系統上的敏感檔案。

解決方案:驗證並清理條目
為了避免這些類型的攻擊,您必須在儲存檔案名稱之前驗證和清理檔案名稱。這是程式碼的安全版本:

安全代碼

import os
import re
from flask import Flask, render_template, request, send_file
import requests
from datetime import datetime

app = Flask(__name__)

def sanitize_filename(filename):
    # Eliminar caracteres no permitidos del nombre del archivo
    return re.sub(r'[^a-zA-Z0-9_\-\.]', '', filename)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    response = requests.post('http://127.0.0.1:5001/pdf-to-excel', files={'file': file})

    # Obtener la fecha actual
    current_date = datetime.now().strftime("%Y%m%d")

    # Obtener el nombre original del archivo sin la extensión
    original_filename = os.path.splitext(file.filename)[0]

    # Sanitizar el nombre del archivo
    sanitized_filename = sanitize_filename(original_filename)

    # Crear el nuevo nombre del archivo con la fecha al final
    output_filename = f'{sanitized_filename}_{current_date}.xlsx'

    # Crear la ruta completa del archivo
    save_path = os.path.join('uploads', output_filename)

    # Asegurarse de que la ruta sea absoluta
    save_path = os.path.abspath(save_path)

    # Guardar el archivo Excel resultante localmente con el nuevo nombre
    with open(save_path, 'wb') as f:
        f.write(response.content)

    # Enviar el archivo Excel de vuelta al usuario con el nuevo nombre
    return send_file(save_path, as_attachment=True, download_name=output_filename)

if __name__ == '__main__':
    app.run(port=5000, debug=True)

安全代碼說明
清理檔案名稱: sanitize_filename 函數使用正規表示式從檔案名稱中刪除非法字元。

建立完整檔案路徑: os.path.join 函數用於建立完整檔案路徑,將目標目錄(上傳)與清除後的檔案名稱(output_filename)組合起來。

確保路徑是絕對路徑:os.path.abspath 函數將路徑轉換為絕對路徑,以避免使用相對路徑進行操作。

儲存檔案:最後將檔案儲存到指定路徑。

總結
路徑注入:攻擊者可以操縱使用者輸入來存取未經授權的檔案或目錄。
驗證和清理:始終驗證和清理使用者輸入以避免路徑注入攻擊。
絕對路由:使用絕對路由來避免相對路由的操作。
透過遵循這些做法,您可以保護您的應用程式免受路徑注入攻擊並提高系統的整體安全性。

這裡我問他如何進行攻擊。此外,我還註冊了日誌以便能夠調試這些情況。

為了保護您的應用程式免受路徑注入攻擊,了解如何執行這些攻擊非常有用。在這裡,我向您展示攻擊者如何嘗試利用您的應用程式以及如何在日誌中偵測這些活動。

1. 從瀏覽器

操作 HTML 表單
攻擊者可以操縱 HTML 表單來提交惡意檔案名稱。

一步一步:

  • 開啟有檔案上傳表單的網頁。
  • 使用瀏覽器的開發者工具 (F12) 檢查表單。
  • 修改檔案欄位的值以包含惡意路徑,例如../../etc/passwd。
  • 發送表格。
  • 日誌中的偵測:記錄日誌中接收到的檔案的名稱。
@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename  # Nombre del archivo proporcionado por el usuario
    save_path = os.path.join('uploads', filename)

    # Guardar el archivo sin validar el nombre del archivo
    with open(save_path, 'wb') as f:
        f.write(file.read())

    return 'File uploaded successfully'

2.使用Postman等工具

發送經過操縱的 HTTP 請求
攻擊者可以使用 Postman 直接向伺服器發送精心設計的 HTTP 請求。

一步一步:

  • 開啟 Postman 並設定 POST 要求到 http://127.0.0.1:5000/upload。
  • 在請求正文中,選擇 form-data 並新增一個檔案字段,檔案名稱為 ../../etc/passwd。
  • 提交請求。
  • 日誌中的偵測:記錄日誌中收到的檔案的名稱。

3.透過自動化腳本

使用 Python 腳本
攻擊者可以使用Python腳本發送惡意HTTP請求。

Python 腳本範例:

import os
import re
from flask import Flask, render_template, request, send_file
import requests
from datetime import datetime

app = Flask(__name__)

def sanitize_filename(filename):
    # Eliminar caracteres no permitidos del nombre del archivo
    return re.sub(r'[^a-zA-Z0-9_\-\.]', '', filename)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    response = requests.post('http://127.0.0.1:5001/pdf-to-excel', files={'file': file})

    # Obtener la fecha actual
    current_date = datetime.now().strftime("%Y%m%d")

    # Obtener el nombre original del archivo sin la extensión
    original_filename = os.path.splitext(file.filename)[0]

    # Sanitizar el nombre del archivo
    sanitized_filename = sanitize_filename(original_filename)

    # Crear el nuevo nombre del archivo con la fecha al final
    output_filename = f'{sanitized_filename}_{current_date}.xlsx'

    # Crear la ruta completa del archivo
    save_path = os.path.join('uploads', output_filename)

    # Asegurarse de que la ruta sea absoluta
    save_path = os.path.abspath(save_path)

    # Guardar el archivo Excel resultante localmente con el nuevo nombre
    with open(save_path, 'wb') as f:
        f.write(response.content)

    # Enviar el archivo Excel de vuelta al usuario con el nuevo nombre
    return send_file(save_path, as_attachment=True, download_name=output_filename)

if __name__ == '__main__':
    app.run(port=5000, debug=True)

日誌中的偵測:記錄日誌中收到的檔案的名稱。

日誌偵測的實作
這是一個完整的實現,其中包括用於檢測可疑檔案名稱的日誌記錄:

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename  # Nombre del archivo proporcionado por el usuario
    save_path = os.path.join('uploads', filename)

    # Guardar el archivo sin validar el nombre del archivo
    with open(save_path, 'wb') as f:
        f.write(file.read())

    return 'File uploaded successfully'

總結
從瀏覽器:操作 HTML 表單或使用瀏覽器開發工具。
使用 Postman 等工具:將精心設計的 HTTP 請求直接傳送到伺服器。
使用自動化腳本:使用 Python、Bash 或任何其他語言的腳本傳送惡意 HTTP 請求。
日誌偵測:在日誌中記錄接收到的檔案的名稱和其他可疑活動,以偵測可能的攻擊。
透過實施這些措施,您可以提高應用程式的安全性並偵測可能表明企圖攻擊的可疑活動。

結論:在使用人工智慧進行結對程式設計的學習和開發背景下,我發現平台上的此類警報對於檢測漏洞非常有用。今天我醒來時以為我要部署 Heroku,但在這裡我發現自己發現了不同的漏洞 :D

編碼愉快!

以上是如何執行和偵測路徑注入攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何解決Linux終端中查看Python版本時遇到的權限問題?如何解決Linux終端中查看Python版本時遇到的權限問題?Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

我如何使用美麗的湯來解析HTML?我如何使用美麗的湯來解析HTML?Mar 10, 2025 pm 06:54 PM

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

python對象的序列化和避難所化:第1部分python對象的序列化和避難所化:第1部分Mar 08, 2025 am 09:39 AM

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

如何使用TensorFlow或Pytorch進行深度學習?如何使用TensorFlow或Pytorch進行深度學習?Mar 10, 2025 pm 06:52 PM

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

Python中的數學模塊:統計Python中的數學模塊:統計Mar 09, 2025 am 11:40 AM

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

用美麗的湯在Python中刮擦網頁:搜索和DOM修改用美麗的湯在Python中刮擦網頁:搜索和DOM修改Mar 08, 2025 am 10:36 AM

該教程建立在先前對美麗湯的介紹基礎上,重點是簡單的樹導航之外的DOM操縱。 我們將探索有效的搜索方法和技術,以修改HTML結構。 一種常見的DOM搜索方法是EX

哪些流行的Python庫及其用途?哪些流行的Python庫及其用途?Mar 21, 2025 pm 06:46 PM

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

如何使用Python創建命令行接口(CLI)?如何使用Python創建命令行接口(CLI)?Mar 10, 2025 pm 06:48 PM

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器