• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Pentest Wiki Part 7 滲透報告&amp;逆向IDA入門&amp;快速搭建系統服務

    滲透報告

    前言

    本文檔旨在定義滲透測試報告的基本標準。 雖然高度鼓勵使用自己的定制和品牌格式,但以下內容應提供對報告中所需項目的高層次理解以及報告結構,以便為讀者(客戶)提供價值。

    報告是滲透測試中最重要的一環。 您將使用報告來傳達您所做的事情,說明您是如何做到的,最重要的是,讓你所測試機構知道應如何修復滲透測試期間發現的漏洞。

    報告結構

    報告分為兩個主要部分,以向不同的受眾介紹測試的目標,方法和結果。

    執行摘要

    本部分將向讀者(客戶)傳達滲透測試的具體目標和滲透測試的高級結果。目標受眾是那些負責安全方案的監督的人員以及可能受到威脅的組織中的任何成員。執行摘要應包含大部分以下部分:

    • 背景:
      背景部分應向讀者(客戶)解釋滲透測試的總體目的。 測試部分確定的風險,對策和滲透測試有關的術語的詳細信息應該提供給讀者(客戶),以使讀者(客戶)了解整體的滲透測試和相關結果。

    整體來說這個領域將是展現測試的整體效果和滲透測試師實現先前會議中提出的目標的能力的敘述。 對測試過程確定的系統性問題(例如系統性問題--缺少有效的補丁=找到的MS08-067)進行簡要描述,以及實現對目標信息的訪問和識別 對業務的潛在影響。

    風險排名/資料

    整體風險排名/概況/分數將在這個區域被識別和解釋。 在預備階段,Pentester將確定評分機制和追蹤/分級風險的個體機制。 FAIR,DREAD和其他自定義排名中的各種方法將被合并到環境分數中并進行定義。


    (客戶)的總體風險評分目前是七(7)。 這個評級意味著安全控制的風險會隨著潛在的重大財務損失而受到損害。 顧問根據一個高風險和幾個中等風險漏洞確定了這個風險評分,并且定向攻擊的成功。 識別出的最嚴重的漏洞是在面向企業公開的網站上存在默認密碼,該密碼允許訪問許多敏感文檔并能夠控制設備上的內容。 此漏洞可能導致用戶帳戶被盜,敏感信息泄露或完全系統泄露。 幾個較小的嚴重漏洞可能導致盜竊有效的帳戶憑證和泄露信息。
    總體發現:
    一般調查結果將提供基本和統計格式的滲透測試中發現的問題的概要。 測試目標用圖形表示,測試結果,過程,攻擊情景,成功率以及在測試前會議中定義的其他可測量指標應該存在。 此外,問題的原因應該以易于閱讀的格式呈現。 (例如,顯示被利用問題的根本原因的圖表)


    這一領域還應包括描述環境內對策有效性的指標。 (例如,我們運行了x次攻擊和IPS攔截了y,其他對策也應該具有相似的設計和效果指標。)

    推薦摘要:
    報告的建議部分應使讀者(客戶)高度了解和解決所確定的風險所需的任務,以及實施解決方案建議所需的一般工作量。 本節還將確定用于優先考慮后續路線圖順序的權重機制。

    戰略路線圖

    路線圖應該包括一個優先計劃,用于修復發現的不安全物品,并且應該根據商業目標/潛在影響水平來衡量。 本節應直接映射到已確定的目標以及PTES-Threat建模部分中創建的威脅矩陣。 通過分解為預定義的時間/目標為基礎的目標,本節將創建一個行動的路徑,以不同的增量。 例:



    技術報告

    本部分將向讀者(客戶)傳達測試的技術細節以及商定前的所有方面/內容,作為參與前活動的關鍵成功指標。 技術報告部分將詳細描述測試的范圍,信息,攻擊路徑,影響和修復建議。

    介紹:

    技術報告的引言部分旨在作為初步清單:

    滲透測試團隊的測試
    聯系信息
    涉及測試的資產
    測試的目的
    測試范圍
    測試的強度
    途徑
    威脅/分級結構

    本部分應作為測試涉及的具體資源和測試的總體技術范圍的參考。

    信息收集:

    情報收集和信息評估是良好滲透測試的基礎。測試人員對環境的了解越多,測試的結果就越好。在本節中,應編寫若干項目,向客戶展示通過執行PTES情報收集階段可獲得的公共和私人信息的范圍。至少,確定的結果應該分為4個基本類別:

    被動情報:

    從間接分析收集到的情報,如DNS,谷歌IP /基礎設施相關信息。本節將重點介紹用于在CLIENT環境中剖析技術的技術,而不直接向資產發送任何流量。

    主動收集:

    本節將介紹基礎架構映射,端口掃描,體系結構評估等腳步打印活動的方法和結果。本節將重點介紹通過直接向資源發送流量來在CLIENT環境中分析的技術。

    企業情報:

    有關組織結構,業務單位,市場份額,垂直和其他企業職能的信息應該映射到業務流程和先前確定的被測試的實物資產。

    人員情報:

    在情報收集階段發現的將用戶映射到CLIENT組織的任何和所有信息。本部分應顯示用于收集情報的技術,例如公共/私人員工倉庫,郵件儲存庫,組織結構圖和其他導致員工/公司聯系的項目。

    漏洞評估:

    漏洞評估是識別TEST中存在的潛在漏洞和每個威脅的威脅分類的行為。在本節中,應該提供用于識別漏洞的方法的定義以及漏洞的證據/分類。另外這個部分應該包括:

    • 漏洞分類級別
      • 技術漏洞
    • OSI層漏洞
    • 掃描器的發現
    • 手動識別
    • 整體公開
    • 邏輯漏洞
    • 非OSI漏洞
    • 漏洞的類型
    • 如何/在哪里找到
    • 公開的
    • 結果摘要
    • 開發/漏洞確認:

    利用漏洞或漏洞確認是觸發前面部分中確定的漏洞以獲得對目標資產的特定訪問級別的行為。本節應詳細回顧為確認定義的漏洞所采取的所有步驟以及以下內容:

    • 滲透時間表
    • 選定的滲透目標
    • 滲透活動
    • 定向攻擊
    • 目標主機無法被利用
    • 目標主機能夠被利用
    • 個人主機信息
    • 進行攻擊
    • 攻擊成功
    • 訪問級別授予+升級路徑
    • 整理
    • 漏洞部分參考
    • 額外的緩解技術
    • 補償控制建議
    • 間接攻擊
    • 網絡釣魚
    • 時間表/攻擊細節
    • 確定目標
    • 成功/失敗比率
    • 授予訪問級別
    • 客戶端
      • 時間表/攻擊細節
      • 確定目標
      • 成功/失敗比率
      • 授予訪問級別
    • 瀏覽器端
      • 時間表/攻擊細節
      • 確定目標
      • 成功/失敗比率
      • 授予訪問級別

    后滲透

    所有測試中最關鍵的項目之一是與正在測試的客戶端的實際影響的聯系。雖然上面的章節中介紹了漏洞的技術性質和成功利用漏洞的能力,但是后滲透部分應該將開發能力與業務的實際風險聯系起來。在這個領域,應該通過使用截圖,豐富的內容檢索以及真實世界特權用戶訪問的例子證明以下幾點:

    • 權限升級路徑
    • 使用的技術
    • 獲取由客戶定義的關鍵信息
    • 信息的價值
    • 訪問核心業務系統
    • 訪問合規性保護的數據集
    • 附加信息/系統訪問
    • 持久的能力
    • 能力滲透
    • 對策有效性

    本節應涵蓋范圍內系統的對策措施的有效性。其中應包括有效(主動)和被動(被動)對策部分,以及在測試階段觸發的任何事件響應活動的詳細信息。有效抵制評估活動的對策列表將有助于客戶更好地調整檢測系統和流程,以處理未來的入侵企圖。

    • 檢測能力
      • FW/WAF/IDS/IPS
      • DLP
      • 日志
      • 響應和有效性
        風險:

    一旦通過后滲透確認存在的漏洞對業務的直接影響進行評估,就可以進行風險量化。在本節中,上述結果與預先接觸部分的風險值,信息危急程度,企業評估以及派生的業務影響相結合。這將使客戶能夠識別,可視化并通過測試找到的漏洞獲利,并有效地加強對客戶業務目標的解決方案。本節將涵蓋以下小節中的業務風險:

    • 評估事件頻率
    • 可能的事件頻率
    • 估計威脅能力(從3 - 威脅建模)
    • 估算控制強度(6)
    • 復合漏洞(5)
    • 所需技能水平
    • 需要訪問級別
    • 估算每個事件的損失量
    • 主要損失
    • 二次損失
    • 識別風險根源分析
    • 根本原因永遠不是一個補丁
    • 識別失敗的進程
    • 導出風險
    • 威脅
    • 漏洞
    • 交疊
    • 結論:

    最后的測試概述。建議本部分回顯整個測試的部分內容,并支持CLIENT安全狀態的增長。應該以積極的方面結束,提供支持和指導,使安全方案能夠取得進展,未來的檢測/安保活動也將取得進展。

    參考鏈接

    http://www.pentest-standard.org/index.php/Reporting
    https://github.com/juliocesarfort/public-pentesting-reports
    https://www.offensive-security.com/reports/sample-penetration-testing-report.pdf

    ****

    IDA

    插件選項

    -O 命令行參數允許用戶將設置傳遞給插件。
    一個使用設置的插件會調用get_plugin_options()函數來獲得參數。

    由于可能有獨立編程人員編寫的插件,每個插件的設置都需要單獨加上-O前綴

    例如,一個名為“decomp”的插件規定它的參數具有以下格式:

    -Odecomp:option1:option2:option3

    在這種情況下,get_plugin_options("decomp")將返回選項字符串的"option1:option2:option3"部分。

    如果在命令行中存在多個-O參數,那么它們會被之間的":"連接起來。

    函數名窗口

    “Name”窗口提供二進制文件中所有全局名稱的摘要列表。
    函數名就是對程序虛擬地址的符號描述。
    (譯者注:指的是View-Open Subviews-Names窗口,也可通過快捷鍵Shift+F12打開)

    IDA最初在文件的初始加載過程中從符號表和簽名分析中導出名稱列表。
    名稱可以按字母順序排列,也可以按虛擬地址順序(升序或降序)排序。

    “名稱”窗口對于快速導航到程序列表中的已知位置非常有用。
    雙擊任何名稱窗口條目將立即跳轉反匯編視圖顯示選定的名稱。

    顯示的名稱會被調整為不同的顏色和字母。
    方案概述如下:

    F 常規功能。這些是IDA不能識別為庫函數的功能。

    L 庫函數 IDA通過使用簽名匹配算法識別庫函數。
    如果給定的庫函數不存在簽名,則該函數將被標記為常規函數。

    I 導入的名稱,通常是從共享庫導入的函數名稱。
    這和庫函數的不同之處在于,導入的名稱不存在任何代碼,而庫函數的主體將出現在反匯編中。

    C 無名代碼(Named code)。IDA不認為這些代碼是某個函數的一部分。
    當IDA在程序的符號表中找到了一個函數名,但是卻沒有發現對該函數的調用時,就會把他們判定為無名代碼。

    D 數據。命名的數據位置通常代表全局變量。

    A 字符串數據。這是一個引用的數據位置,包含一系列符合IDA已知字符串數據類型的字符序列,例如以空字符結尾的ASCII C字符串。

    命令行模式


    可以使用以下命令之一啟動IDA:

    idaq input-file(所有平臺:啟動圖形界面)
    idaw input-file(Windows:啟動文本界面)
    idal input-file(Linux / Mac:啟動文本界面)

    將“64”后綴添加到命令名稱中,以啟動64位版本的IDA。例如:

    idaq64 input-file

    將啟動64位圖形界面。

    命令行的參數包括以下幾種:

    -a 禁用自動分析
    -A 自主模式。 IDA不會顯示對話框。
       設計與-S開關一起使用。
    -b + #### 加載地址。后加上一個十六進制的數字。(中間無空格,下略)
    -B 批處理模式。 IDA將自動生成.IDB和.ASM文件
    -c 反匯編新文件。(刪除舊數據庫)
    -d + directive
       指示首要加載的配置。
       例如:
           -dVPAGESIZE=8192
    -D + directive
      指示次要加載的配置。
    -f 禁用FPP指令 (僅在IBM PC下可用)
    -h 幫助頁面
    -i + #### 程序入口點(十六進制)
    -I + #將IDA設置為即時調試器(0禁用,1啟用)
    -L + #### 指定log的文件名
    -M 禁用鼠標(僅限文本)
    -O + #### 傳遞給插件的選項
    -o + #### 指定輸出數據庫(隱含-c)
    -p + #### 指定處理器類型
    -P+ 壓縮數據庫(創建壓縮的IDB)
    -P 打包數據庫(創建未壓縮的IDB)
    -P-不打包數據庫(不要重新編譯,看Abort命令)
    -r + ###  立即運行內置的調試器(格式在###中設置)
    -R 加載MS Windows exe文件資源
    -S###  數據庫打開時執行腳本文件。 
       腳本文件擴展名用于確定哪個extlang將運行腳本。 
       可以在腳本名稱之后傳遞命令行參數。 
       例如:
            -S"myscript.idc argument1 \"argument 2\" argument3" 
           傳遞的參數存儲在“ARGV”全局IDC變量中。 
           使用“ARGV.count”來確定參數的數量。 
           第一個參數“ARGV [0]”包含腳本名稱
    -T###  將輸入文件作為指定的文件類型解釋 
       在“加載文件”對話框中可見
    -t     創建一個空的數據庫文件
    -W###  指定MS Windows目錄
    -x 不要創建分段
        (與Dump數據庫命令配對使用) 
         此開關僅影響EXE和COM格式文件。
    -z debug:
                   00000001 drefs
                   00000002 offsets
                   00000004 first
                   00000008 idp module
                   00000010 idr module
                   00000020 plugin module
                   00000040 ids files
                   00000080 config file
                   00000100 check heap
                   00000200 checkarg
                   00000400 demangler
                   00000800 queue
                   00001000 rollback
                   00002000 already data or code
                   00004000 type system
                   00008000 show all notifications
                   00010000 debugger
                   00200000 Appcall 
                   00400000 source-level debugger
    -? 適用于下一個版本
    ?  適用于下一個版本

    對于批處理模式,必須使用以下命令行調用IDA:

    idaq -B input-file

    相當于

    idaq -c -A -Sanalysis.idc input-file

    文本界面(idaw.exe / idal)更適合批處理模式,因為它使用較少的系統資源。
    但是,請注意,常用插件不會自動加載到批處理模式,因為analysis.idc文件會退出,內核沒有機會加載它們。

    有關更多信息,請參閱IDC子目錄中的analysis.idc文件。

    主要功能

    IDA是一個交互式反匯編程序。用戶可以主動參與反匯編過程。
    它不能自動分析程序,而是向你提示可疑的地方,未解決的問題等。
    而你的工作就是指揮IDA進行分析。

    如果你第一次使用IDA,下面是一些你會發現非常有用的命令:

    轉換為指令(Code):熱鍵是“C”
    轉換為數據(Data):熱鍵是“D”

    所做的所有更改都保存到磁盤
    (譯者注:即.idb數據庫文件。IDA不會對原程序做任何改動。除非使用Patch Program插件)。
    當您再次運行時,IDA會從磁盤讀取被分析文件的所有信息,以便可以繼續您的工作。
    (譯者注:同樣指的是.idb數據庫文件,無論原程序被改動甚至是刪除都不影響)

    CODE:00401000 6A 00 push0  
    CODE:00401002 E8 64 02 00 00callGetModuleHandleA ; Call Procedure

    按下D,你會看到:

    CODE:00401000 6A 00 push0
    CODE:00401000   ;   
    ---------------------------------------------------------------------------
    CODE:00401002 E8db 0E8h
    CODE:00401003 64db  64h ; d
    CODE:00401004 02db2
    CODE:00401005 00db0
    CODE:00401006 00db0
    CODE:00401007   ; 
    ---------------------------------------------------------------------------

    逆向的不是很友好,只有ida的介紹使用,建議大家去ctf-wiki里面看看re這塊的。

    快速搭建系統服務

    如何快速設置FTP服務器

    請用pip或easy_install安裝pyftpdlib。

    sudo easy_install pysendfile
    sudo easy_install pyftpdlib

    或者

    sudo pip2 install pysendfile
    sudo pip2 install pyftpdlib

    如果您已經成功安裝了pyftpdlib,請按以下步驟啟動:

    root@lab:/tmp/pyftpdlib# python -m pyftpdlib -w -p 21
    pyftpdlib/authorizers.py:240: RuntimeWarning: write permissions assigned to anonymous user.
      RuntimeWarning)
      [I 2016-03-06 10:00:11] >>> starting FTP server on 0.0.0.0:21, pid=2090 <<<
      [I 2016-03-06 10:00:11] concurrency model: async
      [I 2016-03-06 10:00:11] masquerade (NAT) address: None
      [I 2016-03-06 10:00:11] passive ports: None
      [I 2016-03-06 10:00:40] 192.168.1.103:52874-[] FTP session opened (connect)
      [I 2016-03-06 10:00:40] 192.168.1.103:52874-[anonymous] USER 'anonymous' logged in.
      [I 2016-03-06 10:00:45] 192.168.1.103:52874-[anonymous] FTP session closed (disconnect).
      [I 2016-03-06 10:01:42] 192.168.1.101:49312-[] FTP session opened (connect)
      [I 2016-03-06 10:02:12] 192.168.1.101:49312-[] FTP session closed (disconnect).
      [I 2016-03-06 10:02:24] 192.168.1.101:49313-[] FTP session opened (connect)
      [I 2016-03-06 10:02:31] 192.168.1.101:49313-[anonymous] USER 'anonymous' logged in.
      [I 2016-03-06 10:06:28] 192.168.1.101:49313-[anonymous] RETR /tmp/pyftpdlib/setup.py completed=1 bytes=5183 seconds=0.004
      [I 2016-03-06 10:07:29] 192.168.1.101:49313-[anonymous] FTP session closed (disconnect).
      [I 2016-03-06 10:08:11] 192.168.1.104:1033-[] FTP session opened (connect)
      [I 2016-03-06 10:08:17] 192.168.1.104:1033-[anonymous] USER 'anonymous' logged in.
      [I 2016-03-06 10:10:43] 192.168.1.104:1033-[anonymous] FTP session closed (disconnect).

    Windows FTP控制臺客戶端:

    C:\Documents and Settings\test\Desktop>ver
    
    Microsoft Windows XP [Version 5.1.2600]
    
    C:\Documents and Settings\test\Desktop>ftp 192.168.1.103
    Connected to 192.168.1.103.
    220 pyftpdlib 1.5.0 ready.
    User (192.168.1.103:(none)): anonymous
    331 Username ok, send password.
    Password:
    230 Login successful.
    ftp> ls
    200 Active data connection established.
    125 Data connection already open. Transfer starting.
    .ci
    .coveragerc
    .git
    ...

    您也可以使用其他客戶端,例如:ncftp。

    Twistd

    如何用Twisted啟動一個ftp服務器。

    root@lab:/tmp# twistd -n ftp --help
    Usage: twistd [options] ftp [options].
        WARNING: This FTP server is probably INSECURE do not use it.
    Options:
      -p, --port=            set the port number [default: 2121]
      -r, --root=            define the root of the ftp-site. [default:
                             /usr/local/ftp]
          --userAnonymous=   Name of the anonymous user. [default: anonymous]
          --help             Display this help and exit.
          --help-auth-type=  Show help for a particular authentication type.
          --auth=            Specify an authentication method for the server.
          --password-file=   Specify a file containing username:password login info
                             for         authenticated connections. (DEPRECATED; see
                             --help-auth instead)
          --version          Display Twisted version and exit.
          --help-auth        Show all authentication methods available.
    
    sroot@lab:/tmp# tudo easy_install twisted
    root@lab:/tmp# twistd -n ftp -p 2121 --userAnonymous=anonymous 
    2016-03-06 11:24:24-0500 [-] Log opened.
    2016-03-06 11:24:24-0500 [-] twistd 15.5.0 (/usr/bin/python 2.7.11) starting up.
    2016-03-06 11:24:24-0500 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
    2016-03-06 11:24:24-0500 [-] FTPFactory starting on 2121
    2016-03-06 11:24:24-0500 [-] Starting factory <twisted.protocols.ftp.FTPFactory instance at 0xb6c2474c>
    版權聲明:本文為Fly_hps原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/Fly_hps/article/details/80970779

    智能推薦

    media wiki搭建

    準備環境 準備LAMP環境 所需安裝包:鏈接:https://pan.baidu.com/s/1GKoz4IWc4KaMLiDZVuK0XA 提取碼:erd0 復制這段內容后打開百度網盤手機App,操作更方便哦 安裝Apache 安裝mysql 使用yum安裝所需環境 配置 編譯安裝 創建用戶給予權限 創建wiki數據庫以及用戶和權限 安裝PHP 安裝環境 配置 編譯安裝 復制配置文件 啟動 修改...

    搭建 confluence wiki

    1.安裝mariadb,啟動并設置開機自啟 yum -y install mariadb mariadb-server systemctl start mariadb 啟動mariadb systemctl enable mariadb 設置開機自動啟動 2.接下來進行MariaDB的相關配置,輸入以下命令開啟簡單配置 mysql_secure_installation 3:?先是配置?件/etc...

    個人WiKi搭建教程

    安裝源 yum install centos-release-scl-rh 安裝ruby yum install rh-ruby24  -y 設置ruby啟動路徑 安裝依賴包 yum install rh-ruby24-ruby-devel rh-ruby24-rubygems -y 刪除它原本的,加上我們自己的就可以加速了 gem sources -r http://rubygems....

    wiki

    gulp(注:mac系統中用到了管理員權限,故命令行開頭要加上sudo) ps:以下屬于偽代碼 1.常用步驟: (1)因為gulp是基于node開發的,所以要先全局安裝node,若已安裝,則下一步: (2)在桌面新建文件夾gulp-jinge,并在該文件里打開終端, 接著按要求填寫項目信息(version:0.0.1),再確認 (3)在項目根目錄下創建gulpfile.js文件,在gulpfile...

    <Android開源庫> MPAndroidChart Wiki(譯文)~Part 1

    1. 基礎入門 1.1 添加依賴 Gradle 工程添加依賴 (推薦使用) 項目級build.gradle中添加: App下的 build.gradle中添加: Maven pom.xml中添加如下repositories: pom.xml中添加如下dependencies 直接使用Jar包文件 下載最新的.jar包,拷貝下載的文件到你的Android項目libs文件夾下然后開始使用這個開源庫。 ...

    猜你喜歡

    <Android開源庫> MPAndroidChart Wiki(譯文)~Part 2

    7. 填充數據 這一章節將講解給各式各樣的圖表設置數據的方法。 7.1 LineChart(線形圖) 想給圖表添加數據,使用如下方法: 基類ChartData囊括所有圖表在渲染過程中所需要的信息。針對不同的圖表,有不同的ChartData的子類來為對應的圖表設置數據,例如針對LineChart,你可以使用LineData。在構造函數中,你可以傳遞List 那么,什么是DataSet?為什么你需要使...

    centos7 編譯安裝amp

    轉載自: http://blog.51cto.com/11010461/2113093 略有修改(......)   centos7.4編譯安裝lamp lamp簡介 Linux+Apache+Mysql/MariaDB+PHP一組常用來搭建動態網站或者服務器的開源軟件,本身都是各自獨立的程序,但是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應用程序...

    lnmp服務一搭建wiki

    1.創建wiki數據庫與用戶并授權 2.將前面配置文件放到一個目錄中 3.下載wiki安裝包 4.解壓wiki安裝包 5.授權 6.網頁訪問,安裝 1.創建wiki數據庫與用戶并授權 2.將前面配置文件放到一個目錄中 3.下載wiki安裝包 4.解壓wiki安裝包 5.授權 6.網頁訪問,安裝...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡