01
随便上传个文件
发现对于上传类型有限制
查看页面代码发现是js的过滤直接关闭js
上传成功
右键图片在新建标签页打开文件
这里直接抓包改名字也行
02
抓包修改后缀名
03
发现后端做了检测抓包修改失败
大小写绕过失败,php特性php1等会被当成php执行
这里图片的名称已经不是我们传递进去的名称了在响应里面看到
这里是因为phpstudy的http配置文件中没有允许.php3格式所以显示不了
04
这里和上面的差别在于没有对我们传入的文件名做改变
php3也被过滤了使用.htaccess
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
我们在htaccess文件中可以添加
AddHandler php5-script .jpg 使用php5-script将特定的拓展文件映射为php文件
AddType application/x-httpd-php .jpg 将特定的拓展文件映射为php文件
Sethandler application/x-httpd-php 将当前目录下所有文件都映射为php文件
上传.htaccess
05
这里没有对我们传入的文件进行大小写转换
访问
06.
这里没有对文件后面的空格进行处理,可以在文件后面加上空格,由于windows特性,文件名后空格会被直接删除
07
这里没有对文件后面的.做处理
08
这里没有对后缀名有没有::$DATA进行判断,利用windows系统NTFS特征可以绕过上传
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,其实和空格绕过点绕过类似
09
这里对于.和空格的检测只进行一次我们使用. .先进行.的处理再到 的处理就可以逃逸最先的.
10
这里的对于后缀名的处理和之前不一样,这里采用将匹配到的后缀名替换为空使用双写绕过
11
这里使用%00截断
利用条件
php版本小于 5.3.4
php.ini 中magic_quotes_gpc设置为off
原理上传 www.xxx.com/xxx.php%00a.jpg --> www.xxx.com/xxx.php
后面是截断后的成果%00后面不加数据也没关系
12.
第12和11不同在于接收方式不同,12是通过post的方式接收的
这里要对%00进行urldecode编码
13.
制作图片码
14.
和上一题的差别在于通过getimagesize函数对目标的十六进制的前几个字符串进行读取。png的文所以这关和第十三关一样,我们只需要用打开图片马,在前面加上GIF89A,保存为14.png,然后和上题一样
15.
用了exif_imagetype() 读取一个图像的第一个字节并检查其签名和13,14关一样。