PHP-三目运算(练习1)

devtools/2025/2/7 23:40:15/

[题目信息]:

题目名称题目难度
PHP-三目运算(练习1)2

[题目考点]:

PHP三目运算

[Flag格式]:

SangFor{Php_speciALHHH}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2028

[题目writeup]:

1、实验主页

2、源码分析

<?php

show_source(FILE);

$v1=0;$v2=0;$v3=0;

$a=(array)json_decode(@$_GET[‘foo’]);

if(is_array($a)){

var_dump($a);

is_numeric(@$a[&quot;bar1&quot;])?die(&quot;nope&quot;):NULL;
if(@$a[&quot;bar1&quot;]){
($a[&quot;bar1&quot;]&gt;2016)?$v1=1:NULL;
}
if(is_array(@$a[&quot;bar2&quot;])){
if(count($a[&quot;bar2&quot;])!5 OR !is_array($a[&quot;bar2&quot;][0])) die(&quot;nope&quot;);
$pos = array_search(&quot;nudt&quot;, $a[&quot;bar2&quot;]);
$pos=false?die(&quot;nope&quot;):NULL;
foreach($a[&quot;bar2&quot;] as $key=&gt;$val){
$val===&quot;nudt&quot;?die(&quot;nope&quot;):NULL;
}
$v2=1;
}

}

$c=@$_GET[‘cat’];
$d=@$_GET[‘dog’];
if(@$c[1]){
if(!strcmp($c[1],$d) && $c[1]!==$d){
echo $c[0];
eregi(“3|1|c”,$d.$c[0])?die(“nope”):NULL;
strpos(($c[0].$d), “sangfor”)?$v3=1:NULL;
}
}
if($v1 && $v2 && $v3){
include “flag.php”;
echo $flag;
}
?>

分析代码逻辑,可以看出foo是一个json对象,经过json_decode()函数解析之后,变量bar1不能为数字,但又要大于2016。所以这里要用到PHP弱类型的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。 bar1为2017a即可。

变量bar2,首先判断$a[“bar2”]是否是一个数组,长度是否为5,数组中第一个元素是否又为数组,令bar2为[[0],0,1,2,3]即可。

然后还通过GET方法传入了变量cat和dog,而array和string进行strcmp比较的时候会返回一个null,令cat为array变量即可。然后将$d和$c[0]进行拼接,然后通过eregi()来做正则匹配,若出现“3”、“1”、“c”则匹配成功直接die,最后进行两个拼接后字符串的查找,利用eregi()函数的的%00截断漏洞即可绕过。

最后是strpos(($c[0].$d), “sangfor”)?$v3=1:NULL;这里就是一个字符串查找工作,但是不能在首位找到,因此构造$cat[0]=00sangfor。

综上最终构造出来的url为:

?foo={"bar1":"2017e","bar2":[[0],1,2,3,0]}&cat[0]=00sangfor&cat[1][]=1234&dog=%00








[题目信息]:

题目名称题目难度
PHP-三目运算2

[题目考点]:

PHP三目运算

[Flag格式]:

SangFor{mPahxsW_SgP58cdqVmR-0wtGNavwVUs_}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2045

[题目writeup]:

1、实验主页

2、源码分析

<?php
include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 
?> 

分析代码,使用到了三目运算符,其语法格式如下:

(expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3

如果条件“expr1”成立,则执行语句“expr2”,否则执行“expr3”。

再回到题目代码,进行分析

$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 

第一行:如果存在get传参,则把post传参地址给get,可以简单理解为post覆盖了get。
第四行: 如果get参数HTTP_FLAG的值为flag,就读取文件,也就是输出flag。

所以可构造如下payload:

?1=2

post:
HTTP_FLAG=flag


http://www.ppmy.cn/devtools/156959.html

相关文章

设计模式 ->模板方法模式(Template Method Pattern)

模板方法模式 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义一个操作的算法骨架&#xff0c;而将一些步骤延迟到子类中实现。它允许子类在不改变算法结构的情况下重新定义算法中的某些步骤 特点 算法骨架&#xff1a; 在基类中定义算法的框架延迟实现&…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

网络安全—DDoS攻防

背景简述&#xff1a;DDoS攻击分为很多类型&#xff0c;有消耗网络带宽的流量攻击&#xff0c;有消耗服务器资源的应用层攻击等。影响巨大&#xff0c;且让无论大公司还是小公司都肃然“起敬”的当属&#xff1a;流量攻击。在流量越来越廉价的今天&#xff0c;攻击流量小则几百…

JavaScript前后端交互-AJAX/fetch

摘自千峰教育kerwin的js教程 AJAX 1、AJAX 的优势 不需要插件的支持&#xff0c;原生 js 就可以使用用户体验好&#xff08;不需要刷新页面就可以更新数据&#xff09;减轻服务端和带宽的负担缺点&#xff1a; 搜索引擎的支持度不够&#xff0c;因为数据都不在页面上&#xf…

【hot100】刷题记录(8)-矩阵置零

题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护&#xff08;Predictive…

基于Java(SpringBoot)+MySQL+Vue实现的平行志愿录取系统

基于spring bootvue实现的平行志愿录取系统 1.项目简介 这两天干上高考出成绩&#xff0c;有不少亲戚家的孩子今年高考&#xff0c;和我询问关于报志愿的问题。老家河北今年是采用所谓的平行志愿。我看了很多的资料才明白什么叫所谓的“平行志愿”。 整个流程好像很是复杂。…

AI开发模式:ideal或vscode + 插件continue+DeepSeek R1

如何在 VSCode 中结合插件 Continue 和 DeepSeek 构建智能货柜AI开发环境的详细指南,涵盖环境配置、算法开发与模型优化全流程: 1. 环境搭建与工具选型 核心工具 工具/插件用途推荐配置VSCode主开发环境,支持多语言与插件扩展安装Python/C++/CUDA扩展ContinueAI代码助手(类…