一口气学完upload-labs 文件上传靶场

upload-labs是专门针对文件上传的靶场。总共21关,现在搬起小板凳,让我们一起来学习吧!

图片

靶场环境安装

这里为了方便,我们直接在Windows下用phpstudy来搭建。(Linux环境或php版本过高,可能导致某些关卡不能顺利通过。)

图片

Pass-01

我们直接在kali中生成一个php shell。

<?php 
eval($_GET['a']);
?>

我们直接尝试上传php。提示不是图片格式!

图片

审查元素,发现有js对上传做了限制,换句话来说就是进行了前端限制。我们将相应的js语句删掉,或者将js禁用。便可直接上传。

图片

图片

Pass-02

我们首先在源码中发现,在上传过程中,将信息头的 Content-Type 字段限制在了 image/jpeg,我们需要用burp进行抓包,修改信息头就行了。即,将Content-Type: application/x-php修改为Content-Type: image/jpeg

图片

Pass-03

通过查看源码,我们可以看到,将文件的后缀名进行了限制

$deny_ext = array('.asp','.aspx','.php','.jsp');

但是,在php中.php3、.php4、.php5、.pht、.phtml、.phps 的文件都会被解析为 php 文件。因此,我们需要将原来的kali.php改为kali.phtml即可。当然这种方法也只有低版本的php中才能复现。

图片

Pass-04

通过查看源码,我们发现能把禁用的后缀都禁用了。

图片

这时,我们要使用 .htaccess文件实现攻击。

# 将后缀名为 h-t-m 的文件解析为 php 脚本执行
AddType application/x-httpd-php .h-t-m
# 将后缀名为 h-t-m 的文件用 php处理器 来处理,效果同上
AddHandler php5-script .h-t-m
# 将所有文件解析为 php 脚本执行
SetHandler application/x-httpd-php

将文件直接修改后缀名为 .h-t-m,配置文件内输入上述指令且保证文件名为 .htaccess 即可。

Pass-05

仔细观察黑名单,会发现后面几关的黑名单都比这一关多了一个.iniphp.ini 是 php 的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。

准备文件:创建 .user.ini文件,内容为:

auto_prepend_file=520.h-t-m

修改文件的文件名为 kali.h-t-m和上关一样。上传即可!

Pass-06

仔细观察黑名单,发现漏掉了大写的PHP修改后缀名为kali.PHP上传即可。

Pass-07

在 Burp Suite 中打开靶机,直接上传备好的木马文件,抓包并在上传的文件名末尾加上一个空格。

图片

图片

Pass-08

通过阅读代码,我们发现了这句

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

值得注意的是由于后续语句都基于最后一个点所提取出来的后缀名做的操作,而该语句的删除也导致后缀名提取为空,即 .php. 中最后一个点后面所接的后缀名为空。因此,我们需要在在 BurpSuite 中上传文件抓包修改文件名,只需要在最后加上一个点即可.

图片

Pass-09

通过观察源码,少了

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

关于 ::的作用,在系统中只会以DATA 前的数据当作文件名。因此,如果文件名为 h-t-m.php::

DATA 即可:

图片

Pass-10

在Windows中, .php.执行时却因为自动忽略而变成.php。因此将文件的后缀名修改为.php. .

图片

Pass-11

直接查看源码,重点在这句:

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

那就直接将文件后缀名改成 .pphphp上传即可。

Pass-12

当我们上传一个 jpg 文件,并且指定的路径 save_path 为 ../kali.php%00,连之后就会变成 ../kali.php%00/[随机数].jpg. 而这段字符串在%00就已经被截断了,因此原本将文件上传至 jpg 文件的语句就变成的将文件上传至 kali.php 文件中。

图片

Pass-13

打开 BurpSuite 上传上一关相同的文件(以 .jpg 后缀作为伪装的 php 文件),我们可以在 Raw 模式下编辑好路径,最后留下一个字符便于我们修改,这里预留一个 / 字符:在二进制(Hex)中找到对应字符,将其修改为 00 即可:

图片

Pass-14

制作图片🐎就行了。

copy [图片文件名] /b + [shell文件名] /a [合成后的文件名]

图片

图片

Pass-15

利用Pass-14 的方法,将文件上传靶机,成功。

图片

Pass-16

这关需要开启对应的php模块,才能成功。在 phpstudy 中自带的 php 版本中直接勾选 php_exif 模块即可,也可能叫 exif 上传图片🐎后,利用include.php?file=图片路劲加载即可。

图片

Pass-17

重渲染用到的 imagecreatefrom* 函数需要GD 库的支持,在 phpstudy 中只需将php_gd2勾选即可

图片

Pass-18

在 Burp Suite 中打开靶机,直接上传文件抓包,右键send to Intruder.在 Intruder 下的 Positions 页面就可以看到我们上传文件抓到的包了,现在我们只需一直发送这个包即可。首先在 Positions 页面点击clear §其中 § 用于包裹有效荷载,由于我们不需要修改,因此删除§.之后转到 Payloads 页面修改 Payload type 同样因为我们不需要修改有效荷载,因此选择 Null payloads.

图片

之后该页面就会多一个条目 Payload Option [Null payloads],这里选择 Continue indefinitely,

后点击右上角橙色按钮 Start attack 即开始运作,从而实现上传。

Pass-19

构造一个 .ppt 文件,在原文件后直接添加后缀 .ppt 即可,在 Burp Suite 中打开靶机,上传文件,抓包后发送至 Intruder,具体步骤与 Pass-18 中相同,这里稍加概括,Clear $ 后设置 Payloads 为 Null payloads,并选择 Continue indefinitely 以无限重发,最后在 Resource Pool 中设置适当的最大并发请求数 Maximum concurrent requests 即可 Start attack .

图片

Pass-20

直接在文件名末尾加上/.

图片

Pass-21

Burp Suite 抓包!由于有 MIME 检查,因此原文件名应伪装为合法图片文件。

图片

在 save_name 变量名后加上 [0] 即可,其中 0 表示数组第一个元素,同样后续元素定义则使用 save_name[x] 其中 x 为对应索引。

图片

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值