反郵箱審查系統(tǒng) - 外網(wǎng)向內(nèi)網(wǎng)發(fā)送任意文件
背景
內(nèi)網(wǎng)完全隔離外網(wǎng)情況下,需要向內(nèi)網(wǎng)發(fā)送一些例如python包等二進制/壓縮包文件。在內(nèi)網(wǎng)完全隔離背景下,信息只能通過內(nèi)網(wǎng)審查郵件系統(tǒng)完成,且附件不超過20MB。
日常工作發(fā)送文本信息文件是不會被攔截,但如果要發(fā)送一些非文檔類的二進制文件時,直接使用壓縮軟件以19MB切分壓縮后發(fā)現(xiàn)郵件被識別攔截,嘗試了使用文件后綴名偽裝、使用pptx套殼在某一頁插入附件后發(fā)送pptx、偽裝后再次壓縮等多種方法,均無法發(fā)送。
最終采用python原生寫法(內(nèi)網(wǎng)有單獨python下載地址,但只有基礎(chǔ)版,且任何pip安裝均無效-無外網(wǎng))將文件以二進制讀入后以十六進制字符進行分隔,并以19MB進行切分;在接收端再以相同的方法批量讀入并恢復(fù)二進制文件。
如果文件較大,產(chǎn)出的小文本文件數(shù)量會比較多,故增加一個自動將文件夾內(nèi)所有文件逐個發(fā)郵件附件的腳本,可酌情使用。
文件說明
- write_split.py
? ? 將某個文件批量轉(zhuǎn)為16進制字符串的txt,并以19MB切分,支持自動清理文件夾/命名.
- read_join.py
? ? 將某個文件夾下的若干文件批量讀入,按照規(guī)則恢復(fù)出原二進制文件
- send_email_split.py
? ? 將某個文件夾下的文件自動逐個以郵件附件形式發(fā)送出去(需提供郵箱賬號和smtp的授權(quán)碼,以及修改接收郵箱地址)
運行方法: python xxx.py即可
TODO
僅使用二進制bytes流轉(zhuǎn)十六進制字符串保存來繞過識別,若仍無法繞過,可采用自定義字典對十六進制字符串再次映射完成加密/偽裝