0X00 前情提要

前段時間火爆一時,隨著-3.5到4的發布,誕生出了很多基于API密鑰調用服務的第三方開源項目。但是不安全的問題也隨之出現,使用者怎么保護好自己的API密鑰不被惡意攻擊者獲取,變得尤為重要。

上月某日html調用chatGPT,網上出現了一款開源的第三方項目來調用服務() ,其中某論壇放出了具有后臺管理功能的二開源碼,于是下載了源代碼,在相關文件中發現后臺未嚴格過濾用戶輸入的字符,可導致API接口密鑰泄露和獲取權限。

0x01 代碼分析

先看下作者原版的代碼,是沒有.php這個文件的,而二開版本中也就是通過這個文件實現了所謂的后臺管理功能。

image

下圖是二開版本的源碼

image

打開.php文件,可以看到進行后臺操作,需要通過標頭的形式進行后臺用戶登錄驗證的,同時源代碼中還寫了后臺的登錄用戶名和密碼。

image

訪問 ,并且登錄成功html調用chatGPT,只有更新API Key和更新代理兩個功能。但是不論是該源碼的原始版本還是這個二開版本,都是不需要數據庫就可以直接運行的,所以它既然能更新Key不排除是寫入到了本地文件中再進行調用的。

image

通過查看其它文件,印證了前面的推斷。每次通過后臺更新的Key被覆蓋寫入了.php文件里的$變量中了。

image

再來看下.php文件中關于更新KEY這部分的代碼,標簽中name屬性定義的值為,再使用預定義的$變量拿到標簽傳進來的值,也就是用戶輸入的Key,使用函數正則匹配.php文件中原Key值的位置并替換為新key的值html調用chatGPT,整個更新key的過程沒有發現有對人機接口做字符過濾或長度限制。

image

0x02 獲取思路

a.使用echo函數打印.php中的變量獲取API Key。

b.使用注釋法令其部分php代碼部分無法正常解析,插入新的PHP代碼從而獲取API Key。

0x03 Key密鑰獲取

');echo $OPENAI_API_KEY;/*

image

此時我們去訪問下存放API密鑰的.php這個文件,已成功回顯sk-開頭的密鑰了。

image

下圖為沒插入構造語句時,訪問.php文件返回的頁面

image

');?>/*

image

image

0x04 寫入思路

既然能通過調用變量獲取API密鑰,那么寫馬進去是不是也能執行呢?嘗試了下顯然沒有達到預期效果,相關函數會執行,但到瀏覽器前端不解析了,直接加載出了html代碼,分析下原因應該是PHP文件中出現了多個

免責聲明:本文系轉載,版權歸原作者所有;旨在傳遞信息,不代表本站的觀點和立場和對其真實性負責。如需轉載,請聯系原作者。如果來源標注有誤或侵犯了您的合法權益或者其他問題不想在本站發布,來信即刪。