- 前端验证 可以禁用js 或者是先改后缀 然后抓包改
- 检查content-type 抓包改
- 在apache文件里面看哪些后缀会被作为php文件解析 php php3 phtml
- .htaccess 是Apache 服务器专属的 “分布式配置文件”(Nginx/ IIS 服务器不支持) 作用是 “局部配置”:不用修改 Apache 的主配置文件,只需把.htaccess 放在某个目录下,就能对这个目录及所有子目录生效;修改后不用重启 Apache 服务器,保存就生效
那么这里的攻击就是先上传恶意的.htaccess 文件修改目录解析规则,再上传伪装成普通文件的恶意脚本,让服务器把这些 “伪装文件” 当作 PHP 等脚本解析执行。前提是上传目录的 Apache 配置中,AllowOverride被设为All(允许.htaccess 覆盖解析规则,默认部分服务器会开启)那么直接加上解析规则
1
| AddType application/x-httpd-php .jpg .png
|
之后传个马
5. .user.ini PHP(CGI/FastCGI 模式)的目录级配置文件 PHP 解释器(PHP-FPM)是独立于 Web 服务器的进程,它会按 “目录” 维度扫描配置文件(比如.user.ini),实现 “不同目录用不同配置”;也就是说这个题只能在这个情况下才有作用 但是所有服务器都支持 与.htaccess不一样
关键配置
1 2
| auto_prepend_file=文件名:每个 PHP 文件执行前,自动包含(引入)指定文件; auto_append_file=文件名:每个 PHP 文件执行后,自动包含指定文件。
|
这里假设我传上去的是1.jpg 然后访问readme.php
服务端把1.jpg 里的内容读出来,跟 readme.php 的代码合并在一起,再执行整个合并后的代码。
6. 大小写绕过 Web 服务器默认不区分文件后缀的大小写,是解析规则导致的
7. 尾部加空格 Windows 自动截断空格,Linux 下服务器解析时忽略末尾空白字符;
8. 尾部加点 Windows NTFS 文件系统专属的文件名解析特性导致的(Linux 系统无此问题)说到NTFS 它是 Windows 管理硬盘文件的 “规则集” —— 规定了文件如何存储、命名、权限控制、数据安全等核心逻辑 包括下面的支持 备用数据流(ADS)::DATA 绕过
9. 在php文件附加数据流不会验证后缀 Windows 解析文件名时,会 自动忽略 ::DATA 及其后面的内容(只识别前面的文件名),所以 shell.php::DATA.jpg 会被当成 shell.php 处理 —— 这就是 ::DATA 绕过的本质。
10. .php. .
11. 双写绕过
12. %00强制截断,他在url编码里面对印的是\0(空字符),可以直接被认为是结束符,不再读取后面的部分,我们看源码,首先首先,还是必须要绕过这个白名单验证,直接改后缀为这三个当中的一个就可以,最重要的是他是get储存路径里面的文件,原来的文件对应的就是upload里面的我们上传的不能被解析为php的东西,我们直接%00截断,在路径后面直接加上.php的文件,然后截断,服务器就会得到的是.php的东西,绕过。(php5.2特有漏洞·)
13. POST 改为00
14. 只检查文件头 因为有文件包含漏洞 所以没必要按着wp做 直接做个图片马也可以 换文件头也可以
15. getimagesize(),这个该函数是获取文件基础信息,依次是宽,高,常量(记录类型的),类型,然后下一个image_type_to_extention(),就用上面得到的常量来得到后缀 图片马
16. exif_imagetype(),是只获取文件类型的函数,相比于getimagetype(),虽然获取的类型更少了,但是获取的准确性和速度都更快了 图片马
17. 二次渲染的地方重新插入一句话木马,就不会被破坏。那么得到二次渲染后的图片,就上传,然后得到时间戳,就用文件本身的include漏洞绕过就可以。
18. 执行move_uploaded_file($temp_file, $upload_file)时,文件已经被上传到服务器的UPLOAD_PATH目录 之后才检查后缀是否合法,即使后缀不合法,文件也已经在服务器上存在了短暂的时间 那么在执行unlink之前 去执行木马文件 这里用的yakit 放一个能生成小马的木马 然后一直放 另一边一直访问就可以
1
| <?php file_put_contents('../1.php', '<?php @eval($_POST["cmd"]);phpinfo();?>');
|
- 也是条件竞争 但是加了一点服务端本身可利用的特性 使用 Apache 的网站解析文件名时从右往左看,如果第一个后缀无法解析将会解析下一个后缀 7z 是 Apache 服务器默认不会解析的后缀名 .php.7z 然后条件竞争去访问 生成小马
- 看黑名单,没有.ini,那么可以向第五关那样子,先自己搞一个.user.ini文件,里面auto_prepend_file=.jpg(要求的都可以),然后上传写的这个带有一句话木马的文件就可以。或者这上面获取后缀的方式是最后一次出现点之后的可以1.php. (加空格绕过),得到的后缀是空的,绕过黑名单。
- 这个检查方式有点奇妙 大概就是以.来分割 然后把储存的文件改成
$file[0].$file[元素个数-1] 还要保证最后一个元素在白名单里面 漏洞原理就是形成一个数组的漏洞 让数组之间有一个是空的 最后指向的是它