导航
导航
文章目录
  1. 宽字节注入
  2. PHP://的应用

php协议的应用

宽字节注入

前提条件:set character_set_client=gbk。

作用:当注入的参数中带有%df%27时,可把过滤的\(%5C)去掉。

原理:在注入时,‘被过滤自动转义为\’,加上%df后可以与\(%5c)形成“運”字单引号还在,成功闭合。

PHP://的应用

常见访问方式:(加粗为常用)

php://stdin

php://stdout

php://stderr

php://input

php://output

php://fd

php://memory

php://temp

php://filter

解析

php://input:只读流,可直接读取POST没经过解析的原始数据,不能获取“multipart/from-data方式提交的数据。

php://output:只写流,将流数据输出。

php://filter:可对磁盘文件进行读写操作,类似于readfile(),file()等,他有多个参数可以选择:

名称 描述
resource=<要过滤的数据流> 必需。指定要筛选过滤的数据流。
read=<独链的筛选列表> 可选。设置1个或多个过滤器名称,以管道符|分隔
该参数可选。设置1个或多个过滤器名称,以管道符|分隔 可选。设置1个或多个过滤器名称,以管道符|分隔
<;两个链的筛选列表> 任何没有以read=或write=做前缀的筛选列表视情况用作读或写链

php://filter使用:

XXE

由于XXE漏洞的特殊性,我们在读取HTML、PHP等文件时可能会抛出此类错误parser error : StartTag: invalid element name 。其原因是,PHP是基于标签的脚本语言,<?php ... ?>这个语法也与XML相符合,所以在解析XML的时候会被误认为是XML,而其中内容(比如特殊字符)又有可能和标准XML冲突,所以导致了出错。为了读取包含有敏感信息的PHP等源文件,我们就要先将“可能引发冲突的PHP代码”编码一遍,这里就会用到php://filter,这样就能有效规避特殊字符造成混乱。例如:php://filter/read=convert.base64-encode/resource=./xxe.php

编码解码

base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。使php://filter/write=convert.base64-decode 可以绕过<? php exit; >的限制。

字符串

实际上是一个XML标签,既然是XML标签,我们就可以利用strip_tags函数去除它。使用 **php://filter/read=string.strip_tags/resource=php://input**即可去除。又因为需要写入webshell,在调用完成strip_tags后再进行base64-decode。 **PS:php://filter允许使用多个过滤器,以管道符(|)分隔。** 参考资料: https://www.leavesongs.com/PENETRATION/php-filter-magic.html
支持一下
扫一扫,支持13m0nade
  • 走过路过不要错过~