0X00 前情提要

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

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

0x01 代碼分析

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

image

下圖是二開版本的源碼

image

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

image

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

image

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

image

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

image

0x02 獲取思路

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

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

0x03 Key密鑰獲取

');echo $OPENAI_API_KEY;/*

image

此時我們?nèi)ピL問下存放API密鑰的.php這個文件,已成功回顯sk-開頭的密鑰了。

image

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

image

');?>/*

image

image

0x04 寫入思路

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

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