php伪协议及其它网络安全相关知识


php伪协议在ctf比赛中常和文件包含,ssrf相关联,再往深的挖甚至还能和反序列化扯上关系。其实网络安全就是如此,所有的知识不是一潭死水,而是一个环。😐

<1>php伪协议

1.1.对更改php.ini文件中‘allow_url_fopen‘和’allow_url_include’的理解

  • ini是(initial’初始化‘)的缩写,ini文件用来对操作系统或特定程序初始化或进行参数设置,也就是说php.ini是PHP的一个配置文件。
  • php.ini中有’allow_url_fopen‘和’allow_url_include’。前者的意思是设置是否允许url中的封装协议打开文件,后者的意思是设置是否允许包含url里的封装协议文件。

1.2.PHP伪协议为什么叫php伪协议

php上的协议是一种自定协议不具有广泛性所以叫伪协议


1.3.对php.ini中的部分语句改变的必要性的理解

  • php.ini的作用是是指导php解析器对php语句的处理方式
  • 将’allow_url_fopen‘改为’allow_url_fopen=on‘;'allow_url_include’改为’allow_url-include=on‘让计算机可以将URL处理。

1.4.file://

  • 条件:allow_url_fopen:off/on;allow_url_include:off/on
  • 作用:读取本地文件
  • 使用格式:file://[文件绝对路径] or [文件相对路劲]

1.5.php://

这一类为协议的作用是访问输入输出流

1.5.1.php://input
  • 条件:allow_url_fopen=off/on;allow_url_include=on
  • 作用:可用于查看源码,同时是要查看未压缩文件的只读流。在post请求中能查看请求的原始数据,并将post请求中的post数据当作php代码执行。(只读流是说只能进行读操作的数据)
  • 用法:直接将想要执行的代码写到post传的参数里并且在file_get_content等函数中使用php://input就可以了
1.5.2.php://filter
  • 条件:allow_url_fopen=off/on;allow_url_include=off/on
  • 作用:用过滤器读写数据流
  • 用法:格式为php://filter/[write] or [read]=[过滤器]/[resource]=[文件路径](某些文章中喜欢把 ‘文件路径‘ 叫做 ’数据流‘,其实这样更准确 )
参数描述
read用读链的过滤器读数据流
write用写链的过滤器写数据流
resorce声明过滤哪一个数据流
不指定读写当不指定读写时会自己根据情况而定
字符串过滤器作用
string.rot13rot13变换
string.toupper将字母变成大写
string.tolower将字母变成小写
string.strip_tags去除html、php的标记
转换过滤器作用
convert.base64-decode将数据流base64解码
convert.base64-encode将数据流base64编码
convert.quoted-printable-encode将数据流quoted-printable编码
convert.quoted-printable-decode将数据流quoted-printable解码
压缩过滤器作用
zlib.deflate按照gzip的格式解压数据流
zlib.inflate按照gzip的格式压缩数据流
bzip2.compress按照bz2的格式压缩数据流
bzip2.decompress按照bz2格式解压数据流
加密过滤器作用
mcrypt按对称加密算法加密
mdecrypt按对称加密算法解密
1.5.3.其它php://
  • 5.3.1.php://fd
    条件:allow_url_fopen=off/on;allow_url_include=off/on
    作用:直接按照文件描述符访问文件
  • 5.3.2.php://memery
    条件:allow_url_fopen=off/on;allow_url_include=on
    作用:将临时数据读写到临时文件中
  • 5.3.3.php://temp
    条件:allow_url_fopen=off/on;allow_url_include=on
    作用:也是读写临时文件不过与php://memery不同的是2mb时写临时数据到指定的临时文件中
  • 5.3.4.php://output
    条件:allow_url_fopen=off/on;allow_url_include=off/on
    作用:将数据写入输出缓冲区

1.6.zip://

  • 条件:allow_url_fopen=off/on;allow_url_include=off/on
  • 作用:直接访问zip文件中的数据流
  • 说明:可以访问任意的子文件,且后缀可以是任意的如jpg、png等,都会按照zip解析
  • 使用格式:zip://[文件的绝对路径]#[压缩文件中的文件]
    例如:zip:///etc/password/forming.zip#forming.php
    这句话能直接访问forming.zip文件中的forming.php文件

1.7.zlib://

  • 条件:allow_url_fopen=pff/on;allow_url_include=off/on
  • 作用:功能类似gzopen(),在php的官方文档中建议用compress.zlib://代替
  • 说明:可以访问任意的子文件,且后缀可以是任意的如jpg、png等,都会按照gz解析
  • 使用格式:compress.zlib://[文件绝对路径]

1.8.bzip2://

  • 条件:allow_url_fopen=off/on;allow_url_include=off/on
  • 作用:功能类似bzopen(),在php的官方说明中建议用compress.bzip://代替
  • 说明:可以访问任意的子文件,且后缀可以是任意的如jpg、png等都会按照bz解析
  • 使用格式:compress.bzip2://[文件绝对路径]

1.9.data://

  • 条件:allow_url_fopen=on;allow_url_include=on
  • 作用:作为一个封装器对进行数据流读写
  • 使用格式:data://text/plain,[code]                   data://text/plain,base64,[code]

1.10.phar://

  • 条件:allow_url_fopen=off/on;allow_url_include=off/on
  • 作用:类似zip可以直接访问zip文件中的子文件
  • 使用格式:phar://zip文件路径/子文件

伪协议与反序列化的碰撞


<2>其它网络安全相关知识

2.1.弱比较

2.1.1.对强类型与弱类型语言的理解

​ 1.强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java 、Python、C++等语言。

​ 2.弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言

2.1.2.对“三等号”“双等号”的区别的理解

1.===是恒等,两个数要类型相同且数值相同

2.==是比较运算,不会检查两个数的类型

2.1.3.比较操作

数字和字符串比较,php会把字符串转换成数字再比较。php转换原则是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0


2.2.md5

2.2.1.md5是什么

有人认为是一种加密的方式,因为md5将原文件改变。但是也有人不认为,因为md5加密出的文件无法复原。

2.2.2.实现的方法(笼统)

一串数据占用的位数与512bit取余,如果余数不是448,则要补位(部位的方式为一位是1剩下的全补成零)。之后再将没有补位前的数据长度用64位表示。装入***标准幻数***。此时数据长度为(n+1)512,之后将每一个512分为16个32子分位,进行四轮运算,最后得出一个128位的散列值。


2.3.为什么0exxx恒为零的原因

0exxx是指数表达形式,其中e前面是指数的实数位,而e后面是指数表达式的指数位,进行科学计数法转换以后,0无论乘多少次方都为零,所以0exxx的结果是0


2.4.URL的标准格式

  • URL的标准格式为protocol://hostname[:port]/path[?query#fragment]

    举例:”http://www.baidu.com/movie/movieshow?id=234&number=1314#name“

    • protocol是指网络传输协议(如:http、https、file等)。
    • hostname是指存放资源的与域名、主机名或IP地址。
    • port是指端口,有时用默认端口所以不显示。
    • path是指一个主机上的一个目录或者文件地址,它决定了服务器如何处理这个请求。
    • query从?到#之间是参数(也叫搜索部分),参数之间用&来间隔。
    • fragment用于指定网络资源中的片段,搜索部分搜索出的信息多种多样,通过fragment可以明确指出哪些信息是我们需要 。

2.5.base64

对base64与ASCII码转换的理解。

  • base64是用64个打印字符表示二进制数据。
  • 64个打印字符对应64个数字,所以只需6个bit就能表示任意一个打印字符,而一个byte的8个bit有两个就要一直表示0。
  • 三个传统字节可以用四个base64字符来表示。
  • 当只有一个传统字节时,用两个base64字符表示多余的bit用0来填补,同理三个也是一样的情况。
  • 详细讲解
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperForming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值