引文
之前文章给大家带来了文件上传的基础内容,今天我给大家带来文件上传漏洞的进阶知识,白名单绕过的总结文章,接下来会详细的带大家解说白名单绕过的一些小套路。
文件包含
文件包含想必大家都已经学过了,所谓包含就是包含可以代码执行的文件,利用包含函数会解析代码的特性去进行命令执行。
文件包含图片马
所谓的图片马,就是在图片中插入一句话木马来达到绕过检测后缀文件WAF的目的。通常图片马都是配合文件包含去用的。图片马制作命令:
copy
1.jpg/b+1.php/a
2.jpg
我们写一个phpinfo命令执行图片马去查看PHP版本信息,我们上传图片马了之后去访问:
成功包含了图片马。
文件包含日志
有时候网站日志网站会记录我们的请求,我们这时候可以想到一个套路,通过构造恶意请求然后去包含日志。日志文件路径举例:
/proc/self/environ
/var/log/auth.log
/var/log/apache2/access.log
包含SESSION
PHP中的session.upload_progress
功能作为跳板,从而进行文件包含
enabled=on
表示upload_progress
功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;
<?php
$b=$_GET['file'];
include "$b";
?>
可以发现,存在一个文件包含漏洞,但是找不到一个可以包含的恶意文件。其实,我们可以利用session.upload_progress
将恶意语句写入session文件,从而包含session文件。前提需要知道session文件的存放位置。
以POST的形式发包,传的文件随意
<!DOCTYPE html>
<html>
<body>
<form action="http://e113b1bc-28b8-4f08-9e60-b74fe3a96ef3.chall.ctf.show/" method="POST" enctype="multipart/form-data"><input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" /><input type="file" name="file" /><input type="submit" value="submit" />
</form>
</body>
</html>
抓包,这里我们添加一个 Cookie :PHPSESSID=flag ,PHP将会在服务器上创建一个文件:/tmp/sess_flag” (这里我们猜测session文件默认存储位置为/tmp),并在PHP_SESSION_UPLOAD_PROGRESS下添加一句话木马,修改如下:
00截断
之前应该也讲过这个知识点,可以00截断原理是因为白名单判断的时候是判断后缀,在进行路径拼接的时候用的其他值,然后在进行move_uploaded_file的时候,这个函数读取到hex值为00的字符,认为读取结束,出现00截断。
Get00截断
get 方式传输可以使用 00 截断,我们拿靶机举一个例子,先上传一个shell文件,抓包,添加00截断:
Post00截断
当是POST接收情况的时候,正确的用法应该是我们需要对 %00 做一个URL编码,也就是URL-decode,与GET不同的点是在 POST 中 %00 不会被 url 解码,所以只能通过 burpsuite 修改 hex 值为 00截断。
解析漏洞
文件解析漏洞,是指Web容器(Apache、Nginx等)在解析文件时将文件解析成脚本文件格式并得以执行而产生的漏洞。攻击者可以利用该漏洞实现非法文件的解析。
Nginx PHP CGI解析漏洞
因为Nginx的特性,当我们访问phpinfo.jpg/1.php
如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了,只要URL中路径名以.php
结尾,直接交给php处理 。
/x.jpg/shell.php
/x.jpg/.php
/x.jpg%00.php
/x.jpg/%20shell.php
IIS 5.0 和 6.0 解析漏洞
文件解析
xx.asp;.jpg
服务器默认不解析;
号后面的内容,因此xx.asp;.jpg
便被解析成asp文件。
.user.ini
如果你目录下有.user.ini会先去识别里面的配置,但是只有 PHP_INI_PERDIR 和 PHP_INI_USER 模式可以找到这两个auto_append_file和auto_prepend_file,作用: 一个相当于在每个php文件尾加上include(“xxxx”) 一个相当于文件头加上 include(“xxx”) 其中xxx就是 auto_append_file的值。因为.user.ini只对他同一目录下的文件起作用,也就是说,只有他同目录下有php文件才可以。
auto_prepend_file = <filename> //包含在文件头
auto_append_file = <filename>//包含在文件尾
.htaccess
与上面php.ini解析文件漏洞相似,这里之前讲过就不具体说了,举一个文件构造代码的例子:
<IfModule >
setHandler application/x-httpd-php #在当前目录下,所有文件都会被解析成php代码执行
</IfModule >
<FilesMatch "xino.jpg">
setHandler application/x-httpd-php
#在当前目录下,如果匹配到xino.jpg文件,则被解析成PHP代码执行
</FilesMatch>
结语
今天比较详细的讲了文件上传白名单绕过原理以及应用方法,可能刚开始学不太好理解。有兴趣的小伙伴可以自己去搭建靶机来进行测试,喜欢的小伙伴不妨一键三连。
学习计划安排
我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!
①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
原文地址:https://blog.csdn.net/Candour_0/article/details/128995457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_23864.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!