使用antsword上传文件漏洞到upload靶场之三

发布时间 2023-08-19 01:06:12作者: Kevin_404notfound

使用antsword上传文件漏洞到upload靶场之三

Pass-11

先观察一下代码,发现save_path是一个可控的变量,但是后面还拼接上一个后缀名,也需要绕过。这个时候可以使用%00截断

00截断原理

0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。在PHP5.3之后的版本中完全修复了00截断。并且00截断受限于magic_quotes_gpc,其必须是off的状态

新建一个1.jpg文件,输入读取php版本的一句话木马

上传一个1.jpg,开启bp抓包。在upload后面加1.php%00,然后forward放包

查看返回包,发现文件地址,复制,可以看到php版本,成功

Pass-12

这里观察一下代码,发现请求的方法相比上一关改变为了POST,这里需要在二进制里面修改%00,因为post不会像get对%00进行自动解码

上传1.jpg,使用bp抓包,

发现打开php版本成功

Pass-13

包含:开发人员通常会把重复使用的函数写到单个文件中,使用时直接调用此文件,而无需再次编写,这种调用文件的过程一般称为包含。

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间

include():找不到被包含文件,报错,但会继续运行脚本;

include_once():与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;

require():找不到被包含文件,报错,并且停止运行脚本;

require_once() :与require类似,区别在于,当重复调用同一文件时,程序只调用一次;

include_once()和require_once()这两个函数只包含一次,适用于在脚本执行期想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

查看提示,发现只检查开头两个字节,这个时候我们可以合成图片码来实现

在网上下载一张图片,命名为1.jpg,使用windows命令copy 2.jpg /b + 1.php /a 3.jpg 生成图片码3.jpg

上传生成的图片3.jpg

文件包含漏洞:http://localhost/upload/include.php

图片马地址:http://localhost/upload/upload/7620230818154428.jpg

组合一下:http://localhost/upload/include.php?file=./upload/7620230818154428.jpg

发现得到php版本成功

Pass-14

查看提示,我们来看这个 getimagesize函数,这个函数的意思是:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

这个时候我们同样可以用上一关合成图片码来实现

直接上传3.php,上传成功,得到php版本信息

Pass-15

查看提示,我们来看这个 exif_imagetype()函数,本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像

这个时候我们同样可以用上一关合成图片码来实现

直接上传3.php,上传成功,得到php版本信息

Pass-16

查看提示,这一关做了一次二次渲染

先上传3.php,得到一个新的jpg文件,把它下载下来,用EmEditor打开,两者对比,发现最后一行的一句话木马已经被删掉了,

这原文件一句话木马十六进制的内容复制到下载的二次渲染的文件中

注意,复制的位置要跟原文件位置一样

替换好后,重新上传,得到php版本信息,成功!

编写人:Kevin
2023.8.19