八、解析應用程序——分析應用程序(1)

文章目錄

  • 一、確定用戶輸入入口點
    • 1.1 URL文件路徑
    • 1.2 請求參數
    • 1.3 HTTP消息頭
    • 1.4 帶外通道
  • 二、確定服務端技術
  • 2.1 提取版本信息
    • 2.2 HTTP指紋識別
    • 2.3 文件拓展名
    • 2.4 目錄名稱
    • 2.5 會話令牌
    • 2.6 第三方代碼組件
  • 小結

??枚舉盡可能多的應用程序內容只是解析過程的一個方面。分析應用程序的功能、行為及使用的技術,確定它暴露的關鍵受攻擊面,并開始想出辦法探查其中可供利用的漏洞,這項任務也同樣重要。值得研究的一些重要方面如下。

  • 應用程序的核心功能:用于特定目的時可利用它執行的操作。
  • 其他較為外圍的應用程序行為,包括站外鏈接、錯誤消息、管理與日志功能、重定向使用等。
  • 核心安全機制及其運作方式,特別是會話狀態、訪問控制以及驗證機制與支持邏輯(用戶注冊、密碼修改、賬戶恢復等)。
  • 應用程序處理用戶提交的輸入的所有不同位置:每個URL、查詢字符串參數、POST數據、cookie以及類似內容。
  • 客戶端使用的技術,包括表單、客戶端腳本、厚客戶端組件(Java applet、ActiveX控件和Flash)和cookie。
  • 服務器端使用的技術,包括靜態與動態頁面、使用的請求參數類型、SSL使用、Web服務
    器軟件、數據庫交互、電子郵件系統和其他后端組件。
  • 任何可收集到的、關于服務器端應用程序內部結構與功能的其他信息(客戶端可見的功能和行為的后臺傳輸機制)

一、確定用戶輸入入口點

??在檢查枚舉應用程序功能時生成的HTTP請求的過程中,可以確定應用程序獲取用戶輸人(由服務器處理)的絕大部分位置。需要注意的關鍵位置包括以下幾項。

  • 每個URL字符串,包括查詢字符串標記。
  • URL查詢字符串中提交的每個參數。
  • POST請求主體中提交的每個參數。
  • 每個cookie。
  • 極少情況下可能包括由應用程序處理的其他所有HTTP消息頭,特別是user-Agent、Referer、Accept、Accept-Language和Host消息頭。

1.1 URL文件路徑

??通常,查詢字符串之前的URL部分并不被視為是進入點,因為人們認為它們只是服務器文件系統上的目錄和文件的名稱。但是,在使用REST風格的URL的應用程序中,查詢字符串之前的URL部分實際上可以作為數據參數,并且和進入點一樣重要,因為用戶輸入就是查詢字符串本身。

典型的REST風格的URL可以采用以下格式:
http://eis/shop/browse/electronics/iPhone3G/
在這個示例中,字符串electronics和iPhone3G應被視為存儲搜索功能的參數。

1.2 請求參數

??多數情況下,在URL查詢字符串、消息主體和HTTP cookie中提交的參數都是明顯的用戶輸入進入點。但是,一些應用程序并不對這些參數使用標準的name=value格式,而是使用定制的方案。定制方案采用非標準查詢字符串標記和字段分隔符,甚至可能在參數數據中嵌入其他數據方案(如XML)。例如:

  • /dir/file;foo=bar&foo2=bar2;
  • /dir/file?foo=bar$foo2=bar2;
  • /dir/file/foo%3dbar%26foo2%3dbar2;
  • dir/foo.bar/file;
  • /dir/foo=bar/file;
  • /dir/file?param=foo:bar;
  • /dir/file?data=83cfoo%3ebar%3c*2ffoo%3e%3cfoo2%3ebar2%3c82ffoo2%3e。

1.3 HTTP消息頭

??許多應用程序執行定制的日志功能,并可能會記錄HTTP消息頭(如Referer和User-Agent )的內容。應始終將這些消息頭視為基于輸入的攻擊的可能進入點。

??一些應用程序還對Referer消息頭進行其他處理。例如,應用程序可能檢測到用戶已通過搜索引擎到達,并提供針對用戶的搜索查詢的定制響應。一些應用程序可能會回應搜索術語,或者嘗試突出顯示響應中的匹配表達式。一些應用程序則通過動態添加HTML關鍵字等內容,并包含搜索引擎中最近的訪問者搜索的字符串,以提高它們在搜索引擎中的排名。

??應用程序向通過不同設備(如筆記本電腦、移動電話、平板電腦)進行訪問的用戶呈現不同的內容,應用程序通過檢查user-Agent消息頭實現這一目的。通過偽造流行移動設備的user-Agent消息頭,攻擊者可以訪問其行為與主要界面不同的簡化用戶界面。由于這種界面通過服務器端應用程序中的不同代碼路徑生成,并且可能并未經過嚴格的安全測試。

1.4 帶外通道

??最后一類用戶輸入進入點是帶外通道,應用程序通過它接收攻擊者能夠控制的數據。如果只是檢查應用程序生成的HTTP流量,攻擊者可能根本無法檢測到其中一些進入點,發現它們往往需要全面了解應用程序所執行的各種功能。通過帶外通道接收用戶可控制的數據的Web應用程序包括:

  • 處理并顯示通過SMTP接收到的電子郵件消息的Web郵件應用程序;
  • 具有通過HTTP從其他服務器獲取內容功能的發布應用程序;
  • 使用網絡嗅探器收集數據并通過Web應用程序界面顯示這些數據的入侵檢測應用程序;
  • 任何提供由非瀏覽器用戶代理使用的API接口(如果通過此接口處理的數據與主Web應用程序共享)的應用程序,如移動電話應用程序。

二、確定服務端技術

2.1 提取版本信息

??許多Web服務器公開與Web服務器軟件本身和所安裝組件有關的詳細版本信息。例如,HTTPServer消息頭揭示大量與安裝軟件有關的信息:

在這里插入圖片描述

??除server消息頭外,下列位置也可能揭露有關軟件類型和版本的信息:

  • 建立HTML頁面的模板;
  • 定制的HTTP消息頭;
  • URL查詢字符串參數。

2.2 HTTP指紋識別

??從理論上說,服務器返回的任何信息都可加以定制或進行有意偽造,Server消息頭等內容也不例外。大多數應用程序服務器軟件允許管理員配置在server HTTP消息頭中返回的旗標。但,蓄意破壞的攻擊者仍然可以利用Web服務器的其他行為確定其所使用的軟件。Httprecon工具是一款HTTP指紋識別工具,以不同的可信度報告各種可能的Web服務器。

2.3 文件拓展名

??URL中使用的文件擴展名往往能夠揭示應用程序執行相關功能所使用的平臺或編程語言。例如:

  • asp——Microsoft Active Server Pages
  • aspx——Microsoft ASP.NET
  • jsp—Java Server Pages
  • cfm—Cold Fusion
  • php—PHP語言
  • d2w—WebSphere
  • pl-—Perl語言
  • py-Python語言
  • dll—-—通常為編譯型本地代碼(C或C++)
  • nsf或ntf————Lotus Domino。

??即使應用程序在它公布的內容中并不使用特定的文件擴展名,但我們一般還是能夠確定服務器是否執行支持該擴展名的技術。例如,如果應用程序上安裝有ASP.NET,請求一個不存在的.aspx文件將返回一個由ASP.NET框架生成的錯誤頁面。

在這里插入圖片描述

??但是,請求一個擴展名不同的不存在的文件將返回一個由Web服務器生成的常規錯誤消息。
在這里插入圖片描述

??之所以出現上述不同的行為,是因為許多Web服務器將特殊的文件擴展名映射到特定的服務器端組件中,不同的組件處理錯誤的方式(包括請求不存在的內容)也各不相同。

2.4 目錄名稱

??一些子目錄名稱常常表示應用程序使用了相關技術。例如:

  • servlet—Java servlet
  • pls—Oracle Application Server PL/SQL網關
  • cfdocs或cfide—-Cold Fusion
  • SilverStream —- SilverStream Web服務器
  • WebObjects或{function}.woa----Apple webObjects
  • rails——-Ruby on Rails。

2.5 會話令牌

?? 許多Web服務器和Web應用程序平臺默認生成的會話令牌名稱也揭示其所使用技術的信息,例如:

  • JSESSIONID———Java平臺
  • ASPSESSIONID——Microsoft IIS服務器
  • ASP.NET_Sessionld——Microsoft ASP.NET
  • CFID/CFTOKEN ——Cold Fusion
  • PHPSESSID——PHP。

2.6 第三方代碼組件

??許多Web應用程序整合第三方代碼組件執行常見的功能,如購物車、登錄機制和公告牌。這些組件可能為開源代碼,或者從外部軟件開發者購買而來。如果是這樣,那么相同的組件會出現在因特網上的大量其他Web應用程序中,可以根據這些組件了解應用程序的功能。通常,其他應用程序會利用相同組件的不同特性,確保攻擊者能夠確定目標應用程序的其他隱藏行為和功能。而且,軟件中可能包含其他地方已經揭示的某些已知漏洞,攻擊者也可以下載并安裝該組件,對它的源代碼進行分析或以受控的方式探查其中存在的缺陷。

小結

??滲透測試步驟

  • 確定全部用戶輸入入口點,包括URL、查詢字符串參數、PosT數據、cookie和其他由應用程序處理的HTTP消息頭。

  • 分析應用程序使用的查詢字符串格式。幾乎所有定制方案仍然使用名/值模型的某種變化形式,因此要設法了解名/值對如何被封裝到已經確定的非標準URL中。

  • 確定任何向應用程序處理過程引入用戶可控制或其他第三方數據的帶外通道。

  • 查看應用程序返回的HTTP服務器旗標。

    注意,在某些情況下,應用程序的不同區域由不同的后端組件處理,因此可能會收到不同的server消息頭。

  • 檢查所有定制HTTP消息頭或HTML源代碼注釋中包含的任何其他軟件標識符。(6)運行Httprecon工具識別Web服務器。

  • 如果獲得關于Web服務器和其他組件的詳細信息,搜索其使用的軟件版本,確定在發動攻擊時可供利用的所有漏洞。

  • 分析應用程序URL列表,確定任何看似重要的文件擴展名、目錄或其他提供服務器使用技術相關線索的內容。

  • 分析應用程序發布的全部會話令牌的名稱,確定其使用的技術。

  • 使用常用技術列表或Google推測服務器所使用的技術,或者查找其他明顯使用相同技術的Web站點和應用程序。

  • 在Google上搜索可能屬于第三方軟件組件的任何不常見的cookie、腳本、HTTP消息頭名稱,并進行分析

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

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

相關文章

小龜帶你敲排序之冒泡排序

冒泡排序 一. 定義二.題目三. 思路分析(圖文結合)四. 代碼演示 一. 定義 冒泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元…

【深度學習】再談向量化

前言 向量化是一種思想,不僅體現在可以將任意實體用向量來表示,更為突出的表現了人工智能的發展脈絡。向量的演進過程其實都是人工智能向前發展的時代縮影。 1.為什么人工智能需要向量化 電腦如何理解一門語言?電腦的底層是二進制也就是0和1&…

Arduino+esp32學習筆記

學習目標: 使用Arduino配置好藍牙或者wifi模塊 學習使用python配置好藍牙或者wifi模塊 學習內容(筆記): 一、 Arduino語法基礎 Arduino語法是基于C的語法,C又是c基礎上增加了面向對象思想等進階語言。那就只記錄沒見過的。 單多…

全國各城市-貨物進出口總額和利用外資-外商直接投資額實際使用額(1999-2020年)

最新數據顯示,全國各城市外商直接投資額實際使用額在過去一年中呈現了穩步增長的趨勢。這一數據為研究者提供了對中國外商投資活動的全面了解,并對未來投資趨勢和政策制定提供了重要參考。 首先,這一數據反映了中國各城市作為外商投資的熱門目…

Effective Java筆記(31)利用有限制通配符來提升 API 的靈活性

參數化類型是不變的&#xff08; invariant &#xff09; 。 換句話說&#xff0c;對于任何兩個截然不同的類型 Typel 和 Type2 而言&#xff0c; List<Type1 &#xff1e;既不是 List<Type 2 &#xff1e; 的子類型&#xff0c;也不是它的超類型 。雖然 L ist<String…

Oracle自定義函數生成MySQL表結構的DDL語句

1. 自定義函數fnc_table_to_mysql create or replace function fnc_table_to_mysql ( i_owner in string, i_table_name in string, i_number_default_type in string : decimal, i_auto_incretment_column_name in stri…

Linux 文件查看命令

一、cat命令 1.cat文件名&#xff0c;查看文件內容&#xff1a; 例如&#xff0c;查看main.c文件的內容&#xff1a; 2.cat < 文件名&#xff0c;往文件中寫入數據&#xff0c; Ctrld是結束輸入 例如&#xff0c;向文件a.txt中寫入數據&#xff1a; 查看剛剛寫入a.txt的…

Yolov5(一)VOC劃分數據集、VOC轉YOLO數據集

代碼使用方法注意修改一下路徑、驗證集比例、類別名稱&#xff0c;其他均不需要改動&#xff0c;自動劃分訓練集、驗證集、建好全部文件夾、一鍵自動生成Yolo格式數據集在當前目錄下&#xff0c;大家可以直接修改相應的配置文件進行訓練。 目錄 使用方法&#xff1a; 全部代碼…

解決監督學習,深度學習報錯:AttributeError: ‘xxx‘ object has no attribute ‘module‘!!!!

哈嘍小伙伴們大家好呀&#xff0c;很長時間沒有更新啦&#xff0c;最近在研究一個問題&#xff0c;就是AttributeError: xxx object has no attribute module 今天終于是解決了&#xff0c;所以來記錄分享一下&#xff1a; 我這里出現的問題是&#xff1a; 因為我的數據比較大…

SQL優化

一、插入數據 優化 1.1 普通插入&#xff08;小數據量&#xff09; 普通插入&#xff08;小數據量&#xff09;&#xff1a; 采用批量插入&#xff08;一次插入的數據不建議超過1000條&#xff09;手動提交事務主鍵順序插入 1.2 大批量數據插入 大批量插入&#xff1a;&…

Android 開發中需要了解的 Gradle 知識

作者&#xff1a;wkxjc Gradle 是一個基于 Groovy 的構建工具&#xff0c;用于構建 Android 應用程序。在 Android 開發中&#xff0c;了解 Gradle 是非常重要的&#xff0c;因為它是 Android Studio 默認的構建工具&#xff0c;可以幫助我們管理依賴項、構建應用程序、運行測試…

macOS 如何安裝git和nvm

首先&#xff1a;先來安裝git 打開macOS終端 將下面的命令復制粘貼進去&#xff1a; curl -O https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.41.0.tar.gz 版本號可以參考一下官網的 我這里安裝的是目前最新的2.41.0 然后在終端輸入下面的代碼或者雙擊git的…

數據結構:力扣OJ題

目錄 ?編輯題一&#xff1a;鏈表分割 思路一&#xff1a; 題二&#xff1a;相交鏈表 思路一&#xff1a; 題三&#xff1a;環形鏈表 思路一&#xff1a; 題四&#xff1a;鏈表的回文結構 思路一&#xff1a; 鏈表反轉&#xff1a; 查找中間節點&#xff1a; 本人實力…

YOLOv8+ByteTrack多目標跟蹤(行人車輛計數與越界識別)

課程鏈接&#xff1a;https://edu.csdn.net/course/detail/38901 ByteTrack是發表于2022年的ECCV國際會議的先進的多目標跟蹤算法。YOLOv8代碼中已集成了ByteTrack。本課程使用YOLOv8和ByteTrack對視頻中的行人、車輛做多目標跟蹤計數與越界識別&#xff0c;開展YOLOv8目標檢測…

Leetcode每日一題:23. 合并 K 個升序鏈表(2023.8.12 C++)

目錄 23. 合并 K 個升序鏈表 題目描述&#xff1a; 實現代碼與解析&#xff1a; 優先級隊列&#xff1a; 原理思路&#xff1a; 23. 合并 K 個升序鏈表 題目描述&#xff1a; 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表…

Flutter: A RenderFlex overflowed by 42 pixels on the bottom.

Flutter&#xff1a;渲染活動底部上方溢出了42個像素 Flutter 控件超出異常&#xff1a;A RenderFlex overflowed by 42 pixels on the bottom. 解決方案 1.Scaffold內添加 resizeToAvoidBottomInset 屬性&#xff0c;缺點是軟鍵盤下面的控件被擋住 Scaffold( resizeToAvoidBot…

第一百二十七天學習記錄:我的創作紀念日

機緣 今天收到CSDN官方的來信&#xff0c;想想也可以對我前面的學習記錄進行一個總結。 關于來到CSDN的初心&#xff0c;也就是為了讓自己養成一個良好的學習總結的習慣。這里要感謝我C語言視頻教程的老師&#xff0c;是他建議學生們在技術博客中進行記錄。對于技術博客&…

web-Element

在vueapp里<div><!-- <h1>{{message}}</h1> --><element-view></element-view></div> <div><!-- <h1>{{message}}</h1> --><element-view></element-view></div>在view新建個文件 <t…

C++ VTK 8.2 如何繪制彈簧圖形

//創建圓柱 vtkSmartPointer<vtkCylinderSource> spCylinderSource vtkSmartPointer<vtkCylinderSource>::New(); spCylinderSource->SetHeight(m_dCylinderHeight); // 設置圓柱的高度 spCylinderSource->SetRadius(m_dCylinderRadius)…

Spring(12) BeanFactory 和 ApplicationContext 區別

目錄 一、BeanFactory 和 ApplicationContext 區別&#xff1f;二、既然 Spring Boot 中使用的是 ApplicationContext 進行應用程序的啟動和管理&#xff0c;那么 Spring Boot 會用到 BeanFactory 嗎&#xff1f; 一、BeanFactory 和 ApplicationContext 區別&#xff1f; Bea…