upload-labs1~21通关Pass -01
“js验证”
根据源码我们可以看到本题是要绕过js验证,我们先将上传的⽂件格式从.php改为.jpg
⽂件上传后,在burp中将⽂件格式改回为原来的.php
就可以打开我们上传的⽂件了
改为
或者可以直接打开about:config在设置中直接禁⽤js
我们上传的⽂件内容
Pass- 02
“验证Content-type”
根据源代码我们可以看到本题是要验证Content-type
所以⽂件上传之后,在burp中将Content-type改为代码中限制的形式如’image/jpeg’就可以打开我们上传的⽂件了
改为
上传成功。
知识点:
1. 在Http协议消息头中,使⽤Content-Type来表⽰具体请求中的媒体类型信息。
2. 常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯⽂本格式
text/xml : XML格式
image/gif :gif图⽚格式
image/jpeg :jpg图⽚格式
image/png:png图⽚格式
Pass-03
“⿊名单绕过”
根据源代码我们可以看到⿊名单⾥不允许上传.asp、.aspx、.php、.jsp
但是是可以上传.phtml、.phps、.php5、.pht
⽂件上传后,在burp中将⽂件格式改为.php5
改为
这⾥有上传路径,通过打开上传路径我们就可以看到⽂件内容了
Pass-04
“.htaccess绕过”
根据源代码我们可以看到⿊名单中拒绝了⼤部分有问题的后缀上传
但是可以上传.htaccess⽂件
我们构造.htaccess⽂件:AddType application/x-httpd-php //所有⽂件都会被当成php⽂件来解析
如图所⽰,就代表着上传成功了
这⾥是要把⽂件名全部去掉,只留下.htaccess后缀
Pass-05
“.user.ini.绕过”
根据源代码,我们可以看到基本上都过滤了,但是我们还可以通过利⽤ini配置⽂件来进⾏绕过。
先上传⼀个以auto_prepend_file=1.jpg为内容的.user.ini⽂件,然后再上传⼀个内容为php的⼀句话的脚本,命名为1.jpg,.user.ini⽂件⾥的意思是:所有的php⽂件都⾃动包含1.jpg⽂件。.user.ini相当于⼀个⽤户⾃定义的php.ini。
在复制图像地址后,将⽂件名改为readme.php
⽂件上传成功。
Pass-06
“⼤⼩写绕过”
根据源代码我们可以看到,相⽐较于之前的,过滤了htaccess,但是对于后缀名没有进⾏统⼀转换为
⼤⼩写了。所以我们可以通过将后缀名进⾏⼤⼩写绕过。
将⽂件名称由1.php改为1.Php即可上传成功。
改为
上传成功。
Pass-07
“加空格绕过”
根据源代码,我们可以看到没有对后缀进⾏⾸位去空处理,所以我们在⽂件后缀中加⼊空格进⾏绕过
改为
上传成功
Pass-08
“加点绕过/windows 解析漏洞
根据源代码,我们可以看到没有进⾏去‘.‘处理即没有删除⽂件末尾的点,所以我们可以在⽂件末尾进⾏加点绕过
改为
上传成功
Pass-09
“加::DATA绕过”
根据代码我们可以看到,代码中没有进⾏去除字符串::DATA的⽅式,使其不检查后缀
名。
改为
上传成功
知识点:
在php+windows的情况下:如果⽂件名+"::DATA之后的数据当成⽂件流处理,不会检测后缀名.且保持"::$DATA"之前的⽂件名。
只能是Windows系统,并且只能是php⽂件。
Pass-10
“点+空格+点绕过
根据代码我们可以看到这⾥进⾏了去点、去字符串、去空、转换为⼩写等操作
但是我们可以看到这⾥去点、去空的操作都只进⾏了⼀次,并且是先进⾏去点操作之后进⾏去空操作。我们在⽂件后缀中加⼊“点+空格
+点”,只过滤了最后的点和空格,还有⼀个点没有进⾏删除,这就使得本题⼜转化为Pass-08问题
改成
上传成功
Pass-11
“双写绕过”
根据源码可以看到,str_ireplace()函数替换$file_name中的字符串即替换上述⽂件后缀名为空,但是只执⾏⼀次,所以我们可以进⾏双写
绕过
改为
⽂件上传成功
DATA 处理,所以我们可以通过加字符串::DATA "会把::
知识点:
str_ireplace() 函数替换字符串中的⼀些字符(不区分⼤⼩写)。
语法:str_ireplace(find,replace,string,count)
Pass-12
“%00截断绕过——GET⽅式”
根据源码,我们可以看到file_ext进⾏拼接。我们可以在中间加⼊php后缀,再⽤%00进⾏截断,那么就可以将⽂件当作是php⽂件进⾏解析。
$_GET[‘save_path’]的意思是需要请求参数save_path。使⽤GET⽅法,我们可以拦截下包之后更改save_path的值,使⽤%00将后缀
名.jpg截断,以此来运⾏php⽂件。
也可以直接在前端直接对参数save_path修改为.php+%00截断的格式
知识点:
1. substr()函数:返回字符串的⼀部分。
2. strrpos() 函数:查字符串在另⼀字符串中最后⼀次出现的位置,对⼤⼩写敏感。
3. get请求: 请求的数据会附加在url之后并且以“?”分隔url和传输的数据,多个参数之间⽤“&”连接,会在URI中暴露出来。
4. 截断条件:php版本⼩于
5.3.4,php的magic_quotes_gpc为OFF状态。
Pass-13
“%00截断绕过——POST⽅式”
根据源代码我们可以看到,我们可以看到file_ext进⾏拼接。因为POST请求不会像GET请求那样对%00进⾏⾃
动解码,且POST请求是以⼆进制流的⽅式发送⽂件,所以我们可以在⼆进制中进⾏修改。
改为
这⾥的“+”只是⼀个记号,我们需要在⼆进制中到“+”的⼆进制码2b,将其改为00
上传成功
知识点:
POST请求不会像GET请求那样对%00进⾏⾃动解码,且POST请求是以⼆进制流的⽅式发送⽂件,所以我们可以直接在⼆进制中进⾏修改。
Pass-14
“图⽚马绕过
img ath 是直接将后缀名p img ath 是直接将后缀名p
根据源码我们可以知道,这是通过读⽂件的前2个字节判断⽂件类型,因此直接上传图⽚马即可。
制作图⽚马: copy 1.jpg/b + 1.php/a 2.jpg //⽣成的2.jpg即为图⽚马
但是直接访问图⽚并不能把图⽚当做PHP解析,我们还需要利⽤⽂件包含漏洞
其中file为图⽚所在位置
⽂件上传成功。
知识点:
1. 图⽚马的制作:要在1.jpg和1.php的⽬录下运⾏cmd命令
2.
这段代码的意思是读取上传⽂件的前两个字节内容,unpack解码后,使⽤intval转换为⼗进制,默认为⼗进制,根据转换后的结果判断图⽚类型。“rb”代表着读取⼆进制⽂件。
Pass-15
“getimagesize()-图⽚马”
根据源代码,我们可以知道这是通过使⽤getimagesize()来检查是否为图⽚⽂件
上传图⽚马进⾏绕过
同Pass-14
⽂件上传成功
知识点:
1. stripos()函数:查字符串在另⼀字符串中第⼀次出现的位置(不区分⼤⼩写)
语法:stripos(string,find,start)
2. getimagesize()函数:通过检查图像⽂件的⼤⼩并返回图像的尺⼨以及⽂件类型
3. image_type_to_extension()函数:根据指定的图像类型返回对应的后缀名
Pass-16
“exif_imagetype()-图⽚马”
根据源代码,我们可以知道这是读取⼀个图像的第⼀个字节并检查其签名。
所以我们通过上传图⽚马进⾏绕过
同Pass-14
⽂件上传成功
知识点:
1. exif_imagetype(string $filename)//读取⼀个图像的第⼀个字节并检查其签名
getsavefilename
2.此函数需要开启php_exif模板
但是只打开扩展会出现如下现象
我们还需要修改php.ini中的配置,将;extension=php_exif.dll前⾯的;去掉,然后保存重启。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。