上传绕过测试用例

(一)Js客户端认证绕过

Jvascript演示脚本实例

 1 <?php
 2 /**
 3  * Created by 中国联通信息安全中心
 4  * Date: 2015-4-18
 5  * Name: upload1.php
 6   */
 7 //文件上传漏洞演示脚本之js验证
 8 $uploaddir = ‘uploads/‘;
 9 if (isset($_POST[‘submit‘])) {
10     if (file_exists($uploaddir)) {
11         if (move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘], $uploaddir . ‘/‘ . $_FILES[‘upfile‘][‘name‘])) {
12             echo ‘文件上传成功,保存于:‘ . $uploaddir . $_FILES[‘upfile‘][‘name‘] . "\n";
13         }
14     } else {
15         exit($uploaddir . ‘文件夹不存在,请手工创建!‘);
16     }
17     //print_r($_FILES);
18 }
19 ?>
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5     <meta http-equiv="Content-Type" content="text/html;charset=gbk"/>
 6     <meta http-equiv="content-language" content="zh-CN"/>
 7     <title>文件上传漏洞演示脚本--JS验证实例</title>
 8     <script type="text/javascript">
 9         function checkFile() {
10             var file = document.getElementsByName(‘upfile‘)[0].value;
11             if (file == null || file == "") {
12                 alert("你还没有选择任何文件,不能上传!");
13                 return false;
14             }
15             //定义允许上传的文件类型
16             var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|";
17             //提取上传文件的类型
18             var ext_name = file.substring(file.lastIndexOf("."));
19             //alert(ext_name);
20             //alert(ext_name + "|");
21             //判断上传文件类型是否允许上传
22             if (allow_ext.indexOf(ext_name + "|") == -1) {
23                 var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
24                 alert(errMsg);
25                 return false;
26             }
27         }
28     </script>
29 <body>
30 <h3>文件上传漏洞演示脚本--JS验证实例</h3>
31
32 <form action="" method="post" enctype="multipart/form-data" name="upload" onsubmit="return checkFile()">
33     <input type="hidden" name="MAX_FILE_SIZE" value="204800"/>
34     请选择要上传的文件:<input type="file" name="upfile"/>
35     <input type="submit" name="submit" value="上传"/>
36 </form>
37 </body>
38 </html>

红色部分主要是来验证客户端文件扩展名认证,一般允许上传的文件名如下

var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|"。

①实例演示绕过方法

这个是我们上传页面,当我们选择好上传文件以后,比如我们上传一个后缀名为php时,如果是js前端认证的话,没有点上传,会立刻给我们弹出一个alert文本框,图示如下

对于这样的js前段认证,总结方法如下

第一种删除return checkFile()认证函数。

首先用火狐浏览器打开网址,然后打开火狐的工具firebug,把onsubmit验证的函数删除,就可绕过js认证。认证截图如下

菜刀链接路径:localhost:8080/uploads/redBull.php

第二种修改文件上传的扩展名

认证方式如下

修改checkFile函数里面的允许的上传类型,我们修改成我们希望上传的类型,比如我修改成后缀为php后缀的木马文件

文件上传成功。

第三种验证上传表单验证

认证方式如下

这个时候是自己构造的表单,然后把onsubmit删除掉,就可以上传。认证图如下

第四种方式burp修改扩展名绕过

Burp绕过认证方式如下

(二)服务器MINE认证

①MINE认证主要是content-type函数,验证主要是image/jpeg,只有我们对应image/jpeg才会上传成功。

认证代码如下

 1 <?php
 2 if($_FILES[‘userfile’][‘type’]!=”image/gif”)
 3 $uploaddir=’uploads/’;
 4 $uploadfile=$uploaddir.basename($_FILES[‘userfile’][‘name’]);
 5 If(move_uploaded_file($_FILES[‘userfile’][‘name’]);
 6 Echo “文件成功上传\n”;
 7 }else{
 8 Echo “文件上传失败\n”;
 9 }
10 ?>

在这里修改content-type的参数的修改,原为content-type:t e x t / p l a i n ,这里我们改为content-type:image/gif,然后把filename的后缀值改为php木马类型。

服务器验证方法:①黑名单验证方式②白名单验证方式

黑名单验证方式:大小写绕过方式,例如后缀可以是,pHP,Asp;名单列表绕过,如后缀为asa,cer等等这些;特殊文件名绕过方式,如后缀后面加上横线和点等,如后缀为xx.asp_,xx.asp.等等这样的后缀;0x00截断绕过,不过这种方式目前只适合于asp的网站;最后涉及的就是解析漏洞,解析漏洞就是根据不同类型的操作系统而言,如window系统iis6.0服务器,网站的解析漏洞就为xx.asp;.jpg可以轻松绕过,linux的apache服务器为xxx.php.xxx,为不正常的后缀名,就可以轻松绕过。

白名单验证方式:同黑名单绕过方式。

安全狗认证绕过方法

认证代码

<?php
  if ($_FILES["file"]["error"] > 0)
    {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
?>
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

我们通过burp把上传的HTTP包抓下来,然后自己进行一下修改POST数据。经过了一些实验,直接说结果吧,当增加一处文件名和内容,让两个文件名不一致的时候,成功绕过了安全狗的防护,上传了php文件。原因是安全狗进行文件名匹配时候用的是第一个文件名test.jpg,是复合安全要求的,但是webserver在保存文件的时候却保存了第二个文件名test.php,也就是if(security_check(a)){do(b);},导致安全检查没有用,php文件已经成功上传了

SQL注入绕过测试

代码认证

<?php    

if(isset($_GET[‘Submit‘])){

    // Retrieve data

    $id = $_GET[‘id‘];

    $getid = "SELECT first_name, last_name FROM users WHERE user_id = ‘$id‘";
    $result = mysql_query($getid) or die(‘<pre>‘ . mysql_error() . ‘</pre>‘ );

    $num = mysql_numrows($result);

    $i = 0;

    while ($i < $num) {

        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");

        $html .= ‘<pre>‘;
        $html .= ‘ID: ‘ . $id . ‘<br>First name: ‘ . $first . ‘<br>Surname: ‘ . $last;
        $html .= ‘</pre>‘;

        $i++;
    }
}
?>

但是我们加上安全狗以后,就会阻挡一些我们测试的语句。

http://localhost:8080/dvwa/vulnerabilities/sqli/?id=1%2F*%21union*%2F%2F*%21select*%2F1%2C2%2Cversion%28%29&Submit=Submit

成功绕过安全狗,利用/*!union*/这样的方式。

参考文章:

http://www.freebuf.com/articles/web/54686.html

http://drops.wooyun.org/tips/132

http://drops.wooyun.org/tips/4322

时间: 2024-11-05 22:02:54

上传绕过测试用例的相关文章

上传绕过

题目:上传绕过 1,我们打开链接,是个上传题,我们先随便上传点东西,提示   不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件   ,然后我们上传一张图片后缀是.png,结果显示     必须上传成后缀名为php的文件才行啊!  ,现在我们上传php文件,结果显示     不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件. 2,这里我们应该怎么办呢,接下来我们截断上传,我们打开burp suite ,上传一个png文件,使之上传成功,我们会抓到上传的路径,我们在抓到的

Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

Kali Linux Web 渗透测试视频教程—第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali-linux-web-%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE-%E6%89%AB%E6%8F%8Fsql%E6%B3%A8%

(转)多种文件上传绕过手法

相信大家都或多或少遇到过上传的问题,本文讲些小技巧,原理用文字叙述实在麻烦 目录:JS验证实例 /大小写/双重后缀名/过滤绕过/特殊后缀名/文件流类型/文件重写 1.javascript验证突破 查看源代码 在IE中禁用掉即可(火狐的noscript插件也行) 2.大小写突破 他只是把php做了限制,改成Php就可以了 3.双重后缀名突破 在php后面加一个空格即可突破 4.过滤绕过 这个大家应该经常遇到,上传一个php会自动改成gif 我们这样改一下,pphphp,那么就过滤了  第一个php

abcEditor上传绕过

<?php $fileup = 0; //上传功能开关 0打开 1关闭 $filesize = 200; //文件大小单位KB 1M=1024KB $filepath = './pic/'; //文件保存目录 后面要加斜杠/ header('Content-Type: text/html; charset=UTF-8');//页面编码 if(isset($_GET['up'])){ if($fileup) exit ('上传功能已关闭!'); $fileend = end(explode('.'

实验吧题库上传绕过

题目:上传绕过 1.上传尝试,上传jpg,提示需要上传php的2.上传php,提示说只能支持上传jpg,png...3.上神器bp,抓包4.改包,这里利用00截断上传(路径截断) 原理:在上传的时候,当文件系统读到0x00的时候,会认为文件已经结束,这就是程序员在对文件上传的路径过滤不严格造成的. 将路径加上1.php%00(名称任意,类型php),然后,选中%00,ctrl+shift+u(还原).根据我们的构造,上传之后的文件路径就成为:/upload/1.php%00rose.jpg.这时

上传绕过——实验吧

今天有时间就多写几篇解题思路吧,希望能够帮助到那些需要帮助的人,所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找,希望你们不要责怪!!共勉!!! 永远爱你们的----新宝宝 上传绕过分值:10 来源: Justatest 难度:易 参与人数:9296人 Get Flag:4107人 答题人数:4222人 解题通过率:97% bypass the upload 格式:flag{} 解题链接: http://ctf5.shiyanbar.com/web/upload 解题思

[9期]软WAF上传绕过+webshell免杀

安全狗上传绕过 思路: 1.扰乱编码 form-data 替换成 ~form-data           form-data    改成 f+orm-data form-data    改成 form-d+ata          form-data   替换成   " filename="xxx"   改成  filename=xxx; 增减空格 对Content-Disposition,Content-Type,name,filename,form-data http参

Getshell | 文件上传绕过整理

WAF绕过 安全狗绕过 1.绕过思路:对文件的内容,数据.数据包进行处理. 关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php" 将form-data; 修改为~form-data; 2.通过替换大小写来进行绕过 Content-Disposition: form-data; name="file"; filename="yjh.php" C

文件上传绕过知识总结一

前言 重新学习漏洞原理,记录下文件上传的绕过姿势 客户端的检测: 1 function checkFile() { 2 var file = document.getElementsByName('upload_file')[0].value; 3 if (file == null || file == "") { 4 alert("请选择要上传的文件!"); 5 return false; 6 } 7 //定义允许上传的文件类型 8 var allow_ext =