PHP伪协议&漏洞利用原理

支持伪协议的函数
include(); include_once(); require(); require_once();

文件包含类函数
include(文件名) ;
作用是如果文件名下的文件中有 PHP 代码,就会执行 PHP 代码,其他的部分直接输出
文件操作类函数
fopen(); file(); readfile(); file_get_contents(); ......
举个例子
file_get_contents(文件名);
作用是直接读出文件名下文件的内容
伪协议
file://
作用是访问本地文件系统
不受 allow_url_fopen 和 allow_url_include 影响
用法:
/path/to/file.ext relative/path/to/file.ext fileInCwd.ext C:/path/to/winfile.ext C:\path\to\winfile.ext \\smbserver\share\path\to\winfile.ext file:///path/to/file.ext
http:// https://
作用是访问 http(s)网址
文件操作函数需开启 allow_url_fopen,文件包含需同时开启 allow_url_include 和 allow_url_fopen。
用法:
http://example.com/file.php?var1=val1&var2=val2 http://user:password@example.com
可以自己搭建一个网站然后利用漏洞
ftp://
作用:访问 ftp(s)URLs
文件操作函数需开启 allow_url_fopen,文件包含需同时开启 allow_url_include 和
allow_url_fopen。
用法:
ftp://user:http://password@example.com/pub/file.txt ftps://http://example.com/pub/file.txt
php://
作用是访问各个输出输出流
php://input
可以访问请求的原始数据只读流
可以理解为这一串话整个是一个特殊的文件名,和 include 搭配的话,因为 include 可以读取文件名下的内容并且有 PHP 代码就执行,可是这个特殊的文件名是找不到的,所以我们就可以自己写文件内容
文件操作函数需开启 allow_url_fopen,文件包含需同时开启 allow_url_include 和
allow_url_fopen。
例题讲解:


做题首先要读懂代码
很明显,这个代码的意思就是说过滤 flag,如果没有 flag 就可以包含文件
具体怎么做呢?


上文所说,我们利用 php://input 可以自己写文件并且执行,那么我们可以传参 php://input 然后在下面写 PHP 代码


php://filter
php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用
本地文件无论 allow_url_fopen,allow_url_include 是否开启都可以使用,allow_url_fopen 开启时文件操作函数里 resource 可以是远程的,allow_url_include 也开启包含 resource 才可以是远程的。
用法:
php://filter/read=convert.base64-encode/resource=c:/windows/win.ini
讲解一下每个部分的作用
read 是要执行的操作
convert.base64-encode 的意思是读出的内容经过一次 base64 编码
resource 后面跟的是读取内容的路径
参数(作为路径的一部分)

名称描述
resource=< 要过滤的数据流 >这个参数是必须的。它指定了你要筛选过滤的数据流。
read=< 读链的筛选列表 >该参数可选。可以设定一个或多个过滤器名称,以管道符(
write=< 写链的筛选列表 >该参数可选。可以设定一个或多个过滤器名称,以管道符(
<;两个链的筛选列表 >任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链。

字符串过滤器

名称描述
string.rot13进行 rot13 转换
string.toupper将字符全部大写
string.tolower将字符全部小写
string.strip_tags去除空字符、HTML 和 PHP 标记后的结果

编码过滤器

convert.iconv.utf-8.utf-7将 utf-8 编码转换为 utf-7 编码,这样再继续使用 base64 编码写文件时候,不会因为特殊符号无法新建文件(windows)
convert.base64-encode/convert.base64-decodebase64 编码解码
convert.quoted-printable-encode/convert.quoted-printable-decodequoted-printable 编码解码

data://
数据流封装器,直接就是数据。
文件操作函数需开启 allow_url_fopen,文件包含需同时开启 allow_url_include 和
allow_url_fopen。
用法
data://text/plain, data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
第一个就直接执行后面的 PHP 代码,第二个的意思是将后面的一串经过 base64 解码后执行(用来绕过过滤)
例题讲解


这里编码完最后其实有一个 +,但是如果 + 不处理就无法执行,所以我们提前 url 编码一次,+ 的 url 编码是 %2b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值