upload-labs
实话实说,关于这个upload-labs,我拖了好久,主要一直不理解这是个什么东西,又该上传什么样的文件,自己一直揪着不放,特别执着…看了网上许许多多的题解,对于上传的文件多为php后缀,从而做题也按php后缀走,但就目前理解来看,上传文件应不止这一种,奈何才疏学浅…不会!
题中的文件,只是个文件,看着其他题解中,用了一句话木马什么的,可得到下图这种!
我也尝试过用它做题,结果电脑拦截太负责,它既不让我上传,还删我文件(这一个多月,打开软件,电脑就上不了网;几次,打开网站,网站不安全;全盘查杀,对我近日下的软件提出警告)杀毒软件…我还是不要动了吧,怕了,怕了,还是不要在危险的边缘试探,就放弃了。
做题文件命名为“假装病毒”,由此就牵扯出几个问题:
木马,病毒,蠕虫是什么?
木马病毒的发作要在用户的机器里运行客户端程序,一旦发作,就可设置后门,定时地发送该用户的隐私到木马程序指定的地址,一般同时内置可进入该用户电脑的端口,并可任意控制此计算机,进行文件删除、拷贝、改密码等非法操作。
木马病毒”(Trojan)属于计算机病毒的一个子分类,除了木马病毒以外还有“后门病毒”、“蠕虫病毒”等等。安全软件会检测到病毒类后会显示对应的病毒类型(如下图),一般见到病毒名里有“Trojan”的就是“木马病毒”了。
病毒:平时一般我们所说的病毒,指的是感染型病毒,是编制者在计算机程序中插入的破坏计算机功能或者数据的代码,能影响计算机使用,能自我复制的一组计算机指令或者程序代码。其具有传播性、隐蔽性、感染性、潜伏性、可激发性、表现性或破坏性。一般病毒的生命周期:开发期→传染期→潜伏期→发作期→发现期→消化期→消亡期。与生物病毒有很多的相似的地方,比如说自我繁殖、互相传染以及激活再生等生物病毒特征等等。
蠕虫病毒:与木马病毒有本质区别的是,蠕虫病毒是一种能够利用系统漏洞通过网络进行自我传播的恶意程序,它不需要附着在其他程序上,而是独立存在的。当形成规模、传播速度过快时会极大地消耗网络资源导致大面积网络拥塞甚至瘫痪,这可要比木马病毒恐怖多的多。
木马,病毒二者的区别(发现自己文件命名可能存在错误):
1、 病毒会传染,而木马不会传染;
2、 病毒入侵电脑后会有感觉,而木马不会,主要原因是便其开展后续“工作”;
3、 病毒主要是以“破坏”著称,而木马主要是用来盗取用户信息。
以汉字命名文件在Burpsuite的影响
可能由于我的是英文版,也有可能是程序自身的设定问题,汉字(而后发现用中文输入法)命名的文件在抓包时显示的均为□,对于软件不熟悉的操作者而言,会产生不必要的麻烦,就是不太好找到,其他软件以此类推!
Pass-01
首先将PHP文件直接上传,看看有没有提示(拦截方式是什么?
前端js验证
)
客户端 JavaScript检验(通常为检测文件拓展名)
判断方法:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传 .jpg / .jpeg / .png后缀名的文件,而此时并未发送数据包。
绕过办法:
1.利用BurpSuite之类的代理工具进行抓包。
2.修改webshell后缀类型为允许上传类型。
3.抓包来拦截将其后缀名改为对应服务器可以解析的后缀名。
还有一种修该函数的方法,看了半天,没找到函数,现在连网址也找不到了!
前端js拦截了,将php文件后缀修改成合法的格式(.gif ),上传文件。在使用burpsuite抓包
再修改为.php后缀。点击铅笔图形下方按钮(本人英语废…)
可从此查看,是否上传成功!
Pass-02
尝试上传文件!未能上传!
后端MIME验证
服务器MIME检测:即检测Content-Type的内容(Content-Type 实体头部用于指示资源的MIME类型media type ,在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。)
绕过方法:修改类型为允许上传的类型即可。
无提示,在界面点击查看源码,找思路。这关只是对 content-type进行判断,在burp suite中,修改content-type为允许的类型即可。
即可上传成功!
网上有教程显示,先把.php文件后缀改为.jpg,而后在抓包更改时在连后缀在一起改回来,嗯…似乎没必要。
抓包时尝试发现,点击抓包后,在上传文件,虽然文件显示不能上传,但在抓包显示的代码显示中仍存在文件。
Pass-03
尝试上传php文件,发现这关设置了文件后缀名黑名单。
基于黑名单检测:黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般由个专门的blacklist,里面包含常见的危险脚本文件。
绕过办法:1.文件大小写让绕过(Php ,PhP pHp,等)
2.黑白名单绕过(php,php2,php3,php5,phtml,asp,aspx,ascx,ashx,cer,asa,jsp,
jspx)cdx,\x00hh\x46php
3.特殊文件名绕过
1)修改数据包里的文件名为 test.php 或 test.asp_(下划线是空格)由于这种命名格式在
windows系统里是不允许的,所以在绕过上传之后windows系统会自动去掉.点和空格。Linux和
Unix中没有这个特性。
2)::$DATA(php在windows的时候如果文件名+“::DATA”会把::DATA之后的数据当作文件流处
理,不会检测后缀名,且保持”::DATA”之前的文件名,其目的就是不检查后缀名)
4.0×00截断绕过(5.2 C语言中将 \0 当作字符串的结尾)
5. .htaccess文件攻击(结合黑名单攻击)
6. 解析绕过
大小写绕过
这张…网上搬的,为了更严谨,直接改就行;实在不行就下一种。
注意:这两种方法都会改变文件名称。
双写绕过
与上一个不同,此文件,后缀并不会改变,只改变文件名称。
由于前段时间抓包软件坏了,换了…博客的图片的画风可能也会有所变化,本来写wp的,奈何不会…浅写一下upload-labs吧!
Pass-04
借鉴
文章…
与
文章…
首先查看提示
黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess,所以这一关可以先上传一个.htaccess配置文件,写入规则让服务器把指定的文件格式按照php的格式解析。然后就上传指定文件格式的文件(不在黑名单中的)进行测试。
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
创建.htaccess文件
SetHandler application/x-httpd-php 意思就是让Apache对当前目录中的所有文件都以php的格式进行解析。
AddType application/x-httpd-php .jpg 这个指令代表着.jpg文件会当做php来解析
上传时要注意修改,上传时使用burp抓包修改文件名只有后缀。
修改发到Repeter,发包可得!
上传
上传一个png的内容为<?php phpinfo();?>文件(以此类推,啥都行!)
Pass-05
没思路,看看提示!
参考文章,篇文章!
这个,
还有这个(Pass-05基本就是转载的)
首先查看源码
$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",".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");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
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 . '文件夹不存在,请手工创建!';
}
}
提示,上传的目录存在一个名为readme.php文件
我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
首先需要了解一下.ini 文件
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑ini才方便,一般只有很熟悉windows才能去直接编辑。
因为.ini后缀的文件可以上传,所以我们可以上传一个.user.ini文件来改变服务器配置
.ini的文件内容:auto_prepend_file=shell.jpg(其中shell.jpg是自己上传的木马图片)
然后再上传一个一句话木马文件,名字需要与.user.ini配置的文件名相同
因为jpg没有在黑名单的限制之内,所以可以修改后缀名为jpg绕过上传
服务器端的upload文件夹会存在三个文件
Pass-06
由源码看,没有大小写转换,
使用抓包软件,抓包,改包,发包即可!
Pass-07,06
代码没有进行首尾去空,所以可以通过添加空格绕过黑名单。
Pass-08
代码没有删除文件名末尾的点,可以更改文件名绕过黑名单,但是会提示上传错误。
进而尝试文件名后加\n
Pass-09
查看源码没有
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
我们上传php文件加后缀::$DATA
在php+windows的情况下:如果文件名+“::
DA
T
A
”
会把
:
:
DATA”会把::
D
A
T
A
”
会把
::
DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::
DA
T
A
”
之前的文件名。利用
w
i
n
d
o
w
s
特性,可在后缀名中加”
:
:
DATA”之前的文件名。利用windows特性,可在后缀名中加” ::
D
A
T
A
”
之前的文件名。利用
w
in
d
o
w
s
特性,可在后缀名中加
”
::
DATA”绕过:
Pass-10,11
考察的是双写后缀,将后缀改为pphphp
注意:还有种. .绕过,没用过。
之后的偏代码审计,尽量到网上查询把根本整清。
pass-12(白名单之GET%00截断绕过)
但是%00对PHP版本有要求,
(1)php版本要小于5.3.4,5.3.4及以上
(2)打开php的配置文件php-ini,将magic_quotes_gpc设置为Off这里对环境有要求
参考文章
$img_path=$_GET['save_path']."/".rand(10,99).date("YmdHis").".".$file_ext;
pass-13(白名单之POST%00绕过)
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
我和我的头发都尽力了,后面的也不咋会…先放着