html調(diào)用chatGPT 某”基于ChatGPT“開(kāi)源項(xiàng)目引發(fā)的交互接口getshell
0X00 前情提要
前段時(shí)間火爆一時(shí),隨著-3.5到4的發(fā)布,誕生出了很多基于API密鑰調(diào)用服務(wù)的第三方開(kāi)源項(xiàng)目。但是不安全的問(wèn)題也隨之出現(xiàn),使用者怎么保護(hù)好自己的API密鑰不被惡意攻擊者獲取,變得尤為重要。
上月某日html調(diào)用chatGPT,網(wǎng)上出現(xiàn)了一款開(kāi)源的第三方項(xiàng)目來(lái)調(diào)用服務(wù)() ,其中某論壇放出了具有后臺(tái)管理功能的二開(kāi)源碼,于是下載了源代碼,在相關(guān)文件中發(fā)現(xiàn)后臺(tái)未嚴(yán)格過(guò)濾用戶輸入的字符,可導(dǎo)致API接口密鑰泄露和獲取權(quán)限。
0x01 代碼分析
先看下作者原版的代碼,是沒(méi)有.php這個(gè)文件的,而二開(kāi)版本中也就是通過(guò)這個(gè)文件實(shí)現(xiàn)了所謂的后臺(tái)管理功能。
下圖是二開(kāi)版本的源碼
打開(kāi).php文件,可以看到進(jìn)行后臺(tái)操作,需要通過(guò)標(biāo)頭的形式進(jìn)行后臺(tái)用戶登錄驗(yàn)證的,同時(shí)源代碼中還寫(xiě)了后臺(tái)的登錄用戶名和密碼。
訪問(wèn) ,并且登錄成功html調(diào)用chatGPT,只有更新API Key和更新代理兩個(gè)功能。但是不論是該源碼的原始版本還是這個(gè)二開(kāi)版本,都是不需要數(shù)據(jù)庫(kù)就可以直接運(yùn)行的,所以它既然能更新Key不排除是寫(xiě)入到了本地文件中再進(jìn)行調(diào)用的。
通過(guò)查看其它文件,印證了前面的推斷。每次通過(guò)后臺(tái)更新的Key被覆蓋寫(xiě)入了.php文件里的$變量中了。
再來(lái)看下.php文件中關(guān)于更新KEY這部分的代碼,標(biāo)簽中name屬性定義的值為,再使用預(yù)定義的$變量拿到標(biāo)簽傳進(jìn)來(lái)的值,也就是用戶輸入的Key,使用函數(shù)正則匹配.php文件中原Key值的位置并替換為新key的值html調(diào)用chatGPT,整個(gè)更新key的過(guò)程沒(méi)有發(fā)現(xiàn)有對(duì)人機(jī)接口做字符過(guò)濾或長(zhǎng)度限制。
0x02 獲取思路
a.使用echo函數(shù)打印.php中的變量獲取API Key。
b.使用注釋法令其部分php代碼部分無(wú)法正常解析,插入新的PHP代碼從而獲取API Key。
0x03 Key密鑰獲取
');echo $OPENAI_API_KEY;/*
此時(shí)我們?nèi)ピL問(wèn)下存放API密鑰的.php這個(gè)文件,已成功回顯sk-開(kāi)頭的密鑰了。
下圖為沒(méi)插入構(gòu)造語(yǔ)句時(shí),訪問(wèn).php文件返回的頁(yè)面
');?>/*
0x04 寫(xiě)入思路
既然能通過(guò)調(diào)用變量獲取API密鑰,那么寫(xiě)馬進(jìn)去是不是也能執(zhí)行呢?嘗試了下顯然沒(méi)有達(dá)到預(yù)期效果,相關(guān)函數(shù)會(huì)執(zhí)行,但到瀏覽器前端不解析了,直接加載出了html代碼,分析下原因應(yīng)該是PHP文件中出現(xiàn)了多個(gè)
免責(zé)聲明:本文系轉(zhuǎn)載,版權(quán)歸原作者所有;旨在傳遞信息,不代表本站的觀點(diǎn)和立場(chǎng)和對(duì)其真實(shí)性負(fù)責(zé)。如需轉(zhuǎn)載,請(qǐng)聯(lián)系原作者。如果來(lái)源標(biāo)注有誤或侵犯了您的合法權(quán)益或者其他問(wèn)題不想在本站發(fā)布,來(lái)信即刪。
聲明:本站所有文章資源內(nèi)容,如無(wú)特殊說(shuō)明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。