Soft_Job 板


LINE

這週 PHP 圈最熱鬧的不是新版本,而是一個叫「PHP2Shell」的漏洞。 名字聽起來很像加油站,實際上是把你的伺服器直接加滿油、送給駭客開走。 CVE-2026-109618/109619,CVSS 9.2,不用登入就能遠端執行程式。 最可怕的一句話是:「連只印 Hello World 的頁面都會中」。 ━━━━━━━━━━━━━━━ ▍它到底怎麼打進來的?(技術一點點就好) ━━━━━━━━━━━━━━━ 簡單說,攻擊者丟一個特製的超大上傳表單(multipart), 在請求一開始就把記憶體灌爆。 PHP 腦袋當機的那一瞬間,留下一份「做到一半」的資料, 收尾時卻把它當成真的拿來用,於是就能執行任意程式。 重點來了:這一切發生在 PHP「解析上傳表單」的階段。 你寫得再漂亮的登入檢查、簽名驗證、副檔名過濾,通通還沒輪到上場。 等於小偷不是從門進來,是在你蓋房子打地基的時候就先躲進去了。 官方說「唯一可靠的解法是升級 PHP」,修補版本是 8.2.35/8.3.36/8.4.27/8.5.12。 然後我打開公司的主機一看:7.4、7.1…… 官方的回答是:8.1 以下,祝你好運。 ━━━━━━━━━━━━━━━ ▍這不是演習,是已經在發生的事 ━━━━━━━━━━━━━━━ 其實兩週前就有一波大量攻擊。 我們這邊損失大約 24 萬,朋友的公司更慘,一天實際損失百萬。 漏洞公告出來之前,有人早就在用了。 我一個在駭客圈的朋友說得更直接:「這招我們用了十年以上了,一招打天下。」 官方公告是這禮拜才出來,但對某些人來說, 這只是把用了十年的祖傳秘方正式公開而已。 ━━━━━━━━━━━━━━━ ▍「全部升級」聽起來很正確,但…… ━━━━━━━━━━━━━━━ 我們一間公司 20 幾個專案、100 多個站,很多還架在已經停止維護的舊框架上。 光是其中一套支付系統,評估升到 PHP 8.3 就要 6~8 人天。 而且原樣換上去會整站回 500,因為舊框架會把 PHP 8 的一堆警告當成錯誤丟出來。 另外,原本用 error_reporting(0) 藏起來的型別問題, 在 PHP 8 全部會跳出來咬人。 100 多個站一個一個這樣升?升完大概也過年了。 我在某大集團資訊部的朋友,現在就還在熬夜加班升版本。 但其實,按照下面的上策或中策,他可以早點下班。 ━━━━━━━━━━━━━━━ ▍框架老了?其實可以自己改(這段比較硬核一點) ━━━━━━━━━━━━━━━ 很多人把框架當成神主牌,官方不支援就只能整套重寫。 但 PHP 框架說穿了,就是一堆跟著專案一起打包的 PHP 檔。 它是你的程式碼,不是黑盒子,壞了就打開來修。 這次的 ThinkPHP 5.0 就是例子。 換上 PHP 8.3 之後整站 500,追下去發現根因只有一個: 框架會把 PHP 8 新增的「提醒」當成「錯誤」丟出來,等於一張黃牌就直接判出場。 改框架裡一行,告訴它「提醒就記下來,不要判出場」,整站就恢復正常。 全專案真正會死的地方只有 3 處,各改一兩行。 PHP 本身也一樣。 官方雖然不出 7.x 的修補版,但修補的原始碼是公開的。 sury 做的事,就是把修補補進舊版 PHP 再重新打包。 CentOS 沒有現成套件?自己編一份帶修補的 PHP,也不是什麼黑魔法。 這件事我不是第一次做。 當年 PHP 7 剛推出,Laravel 4.2 官方不支援 PHP 7,很多團隊只能整套重寫成 Laravel 5。 我那時候選擇直接改框架,把 4.2 改到能在 PHP 7 上穩定跑。 例如 PHP 7 把一部分錯誤改成新的 Error 類型,舊框架的錯誤處理只接得住舊的 Exception,一出錯就是一整頁空白。 把這些接縫一個一個補起來,比整套重寫便宜太多。 不過升級最可怕的往往不是「會壞」,而是「默默變了」。 舉個例子: "abc" <= 0 這行在 PHP 7 是 true,在 PHP 8 變成 false。 如果你的金額檢查剛好這樣寫,升級後就可能把奇怪的金額放行。 程式不會報錯,帳會錯。 所以我們升級時,是讓 7.4 和 8.3 同時跑同一份程式,把支付回調、 金額路徑的結果逐一比對,確認兩邊一模一樣才算數。 ━━━━━━━━━━━━━━━ ▍上中下三策 ━━━━━━━━━━━━━━━ 【上策】套社群回補套件,程式一行都不用改 Debian/Ubuntu 的 PHP 套件維護者 Ondrej Sury(sury.org)很佛心,替 PHP 5.6 到 8.5 每個版本都出了修補套件。 連 7.4、7.1 這種官方不管的版本都有。版本號不變,只多一個套件修訂號。 apt 升級、重啟 PHP-FPM,收工。 缺點:只限 Debian/Ubuntu。CentOS 的朋友請往下看。 【中策】把圖片上傳獨立成一台新版 PHP(我最推) 既然漏洞的大門是「上傳表單」,那就別讓上傳請求碰到舊 PHP。 ‧原站的 Nginx 只把「上傳圖片」那幾條路徑轉到一台獨立主機(PHP 8.4.27) ‧其他所有 multipart 請求一律 403,舊 PHP 根本收不到 ‧上傳主機負責驗簽名、驗檔案內容、把圖片重新編碼(夾帶的惡意程式碼順便洗掉) ‧存放目錄不能執行程式,主機也沒有任何資料庫權限,被打也拿不到資料 ‧前端網址、欄位一個都不用改,出事拿掉 Nginx 一行轉發就回到原狀 100 多個站要改,升級是處理不來的,不如弄一台共用的圖片上傳服務。 遠古產品切開就好,這應該是改動最小的方案。 【下策】全面升級 PHP 8,必要時連框架一起改 這是唯一的根治法,也是技術債的總清算。 就像上面說的,框架其實改得動,難的是 100 多個站每個都要改、每個都要測。 長期一定要做,但不適合在「駭客已經在門口」的時候當第一步。 順帶一提,「只把 session.upload_progress 關掉」不夠。 它只擋住其中一條路,另一個 CVE 靠的是灌爆記憶體,跟上傳進度無關。 ━━━━━━━━━━━━━━━ ▍其實 15 年前就有人這樣幹了 ━━━━━━━━━━━━━━━ 15 年前我在 Yahoo! 還是個菜比巴。那時 Yahoo! 跟 PHP 之父 Rasmus Lerdorf 有合作,就已經用類似的做法,把上傳這種高風險的東西獨立出去。 前輩特別跟我提過,說是 PHP 之父的建議。當時我聽了還不懂,現在懂了, 而且懂得有點痛。 照 PHP 之父當年的說法:一堆框架架在 PHP 上,早就千瘡百孔, 小漏洞他也管不了了。 (他當時還來台灣招志願者幫忙翻譯中文文件。) 外商那時還教了我另一件事:「最高權限只用一瞬間」。 伺服器啟動的時候,確實需要 root(最高權限)來做幾件事,例如佔用 80/443 這種特殊的埠、讀取 HTTPS 憑證。 但這些事一做完,真正負責接客、執行 PHP 的那些工作程序, 就全部換成權限很小的帳號(例如 nginx、www-data)。 打個比方: 店長早上用萬能鑰匙開完大門,就把鑰匙收進保險箱; 整天在櫃台收錢的是工讀生,他手上只有收銀機的鑰匙。 小偷就算騙倒了工讀生,也拿不到萬能鑰匙,開不了金庫。 PHP2Shell 讓駭客拿到的,就是「正在執行 PHP 的那個帳號」的權限。 如果你的 PHP 是用 root 在跑,那就等於工讀生身上掛著萬能鑰匙, 一被騙就全盤皆輸; 如果是權限很小的帳號,駭客進得來,也只能在一個很小的房間裡打轉。 這次我們的獨立上傳服務也是同一套思路:它用專屬的受限帳號在跑, 只能寫圖片資料夾,連一個資料庫帳號都沒有。 漏洞不一定擋得住,但損害可以先算好上限。 有朋友吐槽:「其他語言也跟著爆啊,總不是同一個人吧?」 說得對,每個語言都有洞,只是 PHP 這次的比較嚴重,而且全世界跑 PHP 的老系統實在太多了。 ━━━━━━━━━━━━━━━ ▍結論 ━━━━━━━━━━━━━━━ 1. 今天就做:關掉 session.upload_progress、Nginx 擋掉不必要的上傳 2. Debian/Ubuntu:套 sury 回補,當天收工 3. 套不了的:把上傳獨立出去,先把大門關上 4. 長期:該升級的還是要升,但可以從容地升 資安不一定要靠熬夜,有時候是靠「把對的那一刀切下去」。 祝大家今晚都能準時下班 XD -- 最喜歡的一句話是? 世界和平 最尊敬的人是? 德蕾莎修女 請說一句話。 大家都要幸福喔~ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.54.124 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1792709592.A.CA3.html
1F:推 nicetw20xx: 推實戰經驗分享 10/23 08:24
2F:推 nicetw20xx: 另外小帳權限不夠、還是可以靠組合技突破 10/23 08:28
3F:→ nicetw20xx: 現在滲透agent太噁心了,希望最後別像魔鬼終結者3那樣 10/23 08:31
4F:推 lchcoding: 推佛心! 10/23 08:37
5F:推 nicetw20xx: 另外os有解感覺也可以考慮換os 10/23 08:42
6F:推 oopFoo: 推分享。這時ai應該就很有用了,port sury到其他os? 10/23 08:46
7F:→ sinclaireche: 發文也修一下吧 ai味太重 10/23 08:57
8F:→ kd992102: ai感真的超重 10/23 09:18
9F:噓 KyuubiKulama: Ai 文 10/23 09:21
10F:→ nh60211as: 不是而是 10/23 10:14
11F:噓 kimi112136: ai ..... 10/23 10:27
12F:推 newbout: 看到開頭直接 end 10/23 10:30
13F:推 workhardplz: 文章有用就好 不懂有ai味又怎樣 10/23 10:44
14F:噓 Obama19: AI餵屎 有人還吃得很香 10/23 10:47
15F:噓 dream1124: AI 10/23 10:55
16F:推 wulouise: 我覺得這篇重點都有講到,沒什麼多餘filler不錯了 10/23 11:43
17F:→ MOONY135: 文章看起來很有ai感 應該是某個地方轉過來的吧 10/23 12:26
18F:噓 fgh81113: ai 10/23 12:58
19F:噓 qwer338859: AI廢文 10/23 13:16
20F:→ shadow0326: 是廢話長說型的AI呢 10/23 13:17
21F:→ yunf: 又不是現在才知道你可以想像他是駭客界的ETF 10/23 14:26
22F:→ yunf: 把所有能用的招都盡可能輸入進去 10/23 14:26
23F:噓 VScode: 真的太長了,這不就交給ai修就好嗎 10/23 14:34
24F:→ yunf: https://tinyurl.com/2xk2m9f7 10/23 14:40
25F:→ yunf: 真的交給ai修會天下大亂 10/23 14:41
26F:→ yunf: 現在是hotfix版的ddos忙中有錯 10/23 14:42
27F:→ yunf: 過不久這些agent的階段性任務就結束變得毫無價值 10/23 14:43
28F:噓 jonathan793: ai幹文 10/23 14:43
29F:→ yunf: 你現在還會用hijackthis嗎? 10/23 14:44
30F:→ yunf: 這是癱瘓MIS的視力和腦力 10/23 14:45
31F:→ yunf: https://tinyurl.com/2dccs5mf 上百洞一次曝 202603 10/23 14:49
32F:→ yunf: https://tinyurl.com/29re5leh 再兩百 202609 10/23 14:50
33F:→ yunf: https://shorturl.at/xxkKG 500洞 10/23 14:52
34F:→ yunf: 還記得heartbleed是怎麼被塞進更新的嗎? 10/23 14:53
35F:噓 bill0205: AI味太明顯 10/23 14:54
36F:→ yunf: 如果我沒猜錯以後這種大量修補更新會變成常態 10/23 14:56
37F:→ yunf: 他就是要把速度加到你沒用ai跟不上 10/23 14:57
38F:→ yunf: 就像垃圾郵件和簡訊一樣 10/23 14:57
39F:→ yunf: SPAM 雖然是老招但你根本不知道裡面有什麼新梗 10/23 14:59
40F:→ yunf: 你覺得現在很快的電腦次世代眼中會慢得像蝸牛 10/23 15:01
41F:→ yunf: 想像一下腳本小子變成口令小子 10/23 15:02
42F:→ yunf: 已經太多漏洞是根本不需要你帳密就能取得權限 10/23 15:07
43F:→ yunf: 所以安全策略在什麼2FA MFA根本就是假議題 10/23 15:08
44F:→ yunf: 只是要讓你相信你是安全的 10/23 15:09
45F:→ yunf: #1f-zuPMS 10/23 15:12
46F:→ yunf: https://tinyurl.com/26ubeaaq 連FBI都擋不住 10/23 15:13
47F:→ nash888: AI文 沒人想看 10/23 15:38
48F:→ lance70176: 已經盡量AI修的給普通人看得懂 AI上限是靠駕駛員 10/23 16:34
49F:→ lance70176: 其實沒AI我也能做 靠AI加速而已 10/23 16:36
50F:→ lance70176: 能AI簡單處理都升級好了 但有大企業不能升級的點 10/23 16:37
51F:→ lance70176: 文章TA是分享給那些卡死再無法升級路上的人 10/23 16:37
52F:→ lance70176: 不是只管一兩個小站 什麼都喊AI幫忙最終遲早失業的人 10/23 16:38
53F:→ Obama19: 哥你推文也是AI文體 你被AI同質化了嗎 怕 10/23 19:02
54F:→ yam276: 哥 你光標題就充滿AI味了 10/23 19:15
55F:→ lance70176: 總感覺推文有人不懂討論技術 跟女版一樣再談感覺... 10/23 19:18
56F:→ lance70176: 是不是AI對我不重要 我只注重實際幫助就是 10/23 19:19
57F:推 workhardplz: 不知道大家的程式有沒有ai感嘻嘻 10/23 19:53
58F:噓 wuyiulin: 你連文章都要 AI寫。 10/23 20:23
59F:→ lance70176: 我都落實 AI 旅遊, AI 原型圖, AI 選酒, AI 買表 10/23 20:37
60F:→ lance70176: 還AI寫工具, AI 寫 APP, 靠 AI 搞技術海外賺不少錢呢 10/23 20:37
61F:推 ikachann: 所以一些老舊專案定期重構是必要的 畢竟很多舊技術也沒 10/23 20:49
62F:→ ikachann: 繼續更新維護 10/23 20:49
63F:→ ella123555: 好AI 10/24 00:12
64F:推 viper9709: 找個解封包的防火牆擋起來有沒有用... 10/24 00:31
65F:推 cancelpc: 內容有價值。我長期寫程式。中英文文法爛的一塌糊塗,現 10/24 00:44
66F:→ cancelpc: 在也都用AI潤飾。 10/24 00:44
67F:→ cancelpc: 其實可以用AI把舊PHP語法的程式,無痛遷移新版PHP。至於 10/24 00:46
68F:→ cancelpc: 其他就看綁多少套件。 10/24 00:46
69F:推 ILoveAMD: 請問駭客已經用了10年以上這個說法 有證據嗎? 10/24 06:00
70F:→ ILoveAMD: 這個漏洞已知 只是認為無法利用 這次是AI寫出攻擊程式 10/24 06:02
71F:推 wizozd84070: 謝分享。這篇有AI味道,但有認真看完內容~ 10/24 06:11
72F:→ sinclaireche: 這就是包裝失敗還要怪人 10/24 10:17
73F:→ lance70176: 駭客十年就是我朋友親身經歷 10/24 10:29
74F:推 kanding255: ai味好重 10/24 13:58
75F:→ Romulus: 寫文章用AI哪有什麼問題 只要內容好又好讀就好 10/24 16:07
76F:→ Romulus: 這篇內容很好 會嫌AI味的就兩種人 一種是徹底反AI 只要扯 10/24 16:09
77F:→ Romulus: 到AI就一律先痛罵一頓強行丟進垃圾桶 10/24 16:10
78F:→ Romulus: 另一種就是不看內容 反正聞到AI味就直接認定是AI slop 10/24 16:10
79F:→ Romulus: 俗稱只能用二分法看世界的人 10/24 16:10
80F:→ Romulus: 至於叫AI修的人 雖然不知道是沒看內容還是看不懂內容 10/24 16:12
81F:→ Romulus: 但這篇就是在教大家該怎麼叫AI修才正確……………… 10/24 16:12
82F:→ Romulus: 喔還可能是以為現在真的只要和agent說一聲「把公司的php 10/24 16:12
83F:→ Romulus: 漏洞修好」就可以睡覺的人 那就good luck 10/24 16:12
84F:噓 lturtsamuel: 連標題都能滿滿ai味真不簡單 10/24 16:14
85F:推 justptt978: 用低權限跑服務 這很重要 10/24 19:26
86F:推 descent: 感謝分享 10/24 22:20
87F:噓 asdfghjklasd: 講那麼多..早就應該升級系統及 php版本了 10/24 22:43
88F:→ asdfghjklasd: 我客戶找兩光的做網站公司 10/24 22:43
89F:→ asdfghjklasd: 用的是 php8.1 我在年初都升升到 8.4了 10/24 22:44
90F:→ asdfghjklasd: 而且我前三四年交給他們的是 freebsd 13.1 10/24 22:44
91F:→ asdfghjklasd: 我都升到新版本了 網站前端也架簡單waf 10/24 22:45
92F:→ yunf: 不升級一定有它們的考量 10/24 23:15
93F:→ yunf: 不然就直接綁定升級就好了 10/24 23:15
94F:→ yunf: 等於說你打一個備份鑰匙給守衛任何洽公都可以直接去開 10/24 23:16
95F:→ yunf: 送瓦斯查水表外賣只要你有裡就可以開你家門 10/24 23:17
96F:噓 acgotaku: 為什麼你的格式跟 gpt 產出這麼像 10/25 03:19
97F:→ lance70176: 客戶同行有月流水破百億的 PHP 5.6 不升自有理由 10/25 03:20
98F:→ lance70176: 我1/3 客戶升級 AI可以半天搞定 有的就是升了會掛 10/25 03:21
99F:→ lance70176: 不是所有工作都可以叫 AI 一句幫我升級搞定 10/25 03:21
100F:→ lance70176: 百億流水敢失誤中斷半天看看 老闆還不劈人 10/25 03:22
101F:→ lance70176: 所以才會有補丁方案 再慢慢升上去 10/25 03:22
102F:→ lance70176: 同樣評估 老闆願意花高薪找我 而不是相信AI是有原因 10/25 03:23
103F:噓 asdfghjklasd: 有百偣流水還不花錢改... 10/25 04:11
104F:噓 angusyu: 我為什麼要在這看AI文 10/25 16:32
105F:推 guanting886: 銀行的房子壞了、網路不通也是要找師傅修啊,有啥稀 10/25 16:53
106F:→ guanting886: 奇的嗎@@ 10/25 16:53
107F:→ guanting886: 若某個行業的流水這麼高,版本卻不敢升,我是建議每 10/25 16:56
108F:→ guanting886: 一個站都去要求佔個一股(外面價值50~200) 10/25 16:56
109F:→ guanting886: 不然原本團隊就可以處理的事情卻不想做寧可讓外人去 10/25 16:57
110F:→ guanting886: 處理核心系統,小心不要婊R 10/25 16:57
111F:→ yunf: 那是你還沒到會被搞的層級 等你到了就知道安全的重要 10/25 17:49
112F:→ yunf: https://tinyurl.com/22n22v5q 10/25 17:55
113F:推 Romulus: ................那你修過實際上銀行的老系統嗎 10/25 18:46
114F:→ Romulus: 有時候不知道這種人是根本沒出過社會在純雲 還是太強了 10/25 18:47
115F:→ Romulus: 沒遇過所謂食古不化不求長進公司的系統 10/25 18:48
116F:→ Romulus: 整條路上只遇過理想上的先進系統 老闆也都對他很好這樣 10/25 18:49
117F:→ yunf: https://tinyurl.com/285m7ho8 等你入圈就知道 10/25 19:03
118F:→ yunf: 沒話語權人家叫你走你就得走 10/25 19:03
119F:→ yunf: 抖出PHP漏洞只是一個手段而已 10/25 19:04
120F:→ yunf: 真正目的是在修理那些不配合的人 10/25 19:05
121F:→ yunf: PHP後面就有一群看穿他手法的人 10/25 19:05
122F:→ yunf: https://tinyurl.com/29dzvxkx 最好是飛機無緣無故會摔 10/25 19:07
123F:推 LoveSports: 大大好強 外媒好幾篇報導工程師熬夜好幾天 10/25 20:59
124F:→ LoveSports: 好奇台灣有沒有 結果跑來這邊看到切一刀下班 10/25 21:00
125F:→ LoveSports: 難怪都沒看到工程師鄉民哀哀叫 10/25 21:00
126F:→ xam: 很久以前服務執行就是降到只有必要權限的帳號去跑啊 10/26 16:07
127F:→ xam: 怎麼現在又回到用root跑一堆服務的生態嗎? 10/26 16:08
128F:噓 papple23g: 不是 而是 簡單說 重點來了 今天就做 10/31 18:22







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS 或 站內搜尋

TOP