CTF Web PHP弱類型比較與布爾值判斷

題目源碼與注釋

<?php
show_source("index.php"); // 顯示自身源碼,方便分析
include("flag.php");      // 包含flag變量
$a = @$_GET['a'];         // 獲取GET參數a,@抑制報錯// 關鍵判斷
if($a == 0 and $a){echo $flag;           // 滿足條件則輸出flag
}

題目考點
  • PHP弱類型比較(==
  • PHP的布爾值判斷
  • GET參數類型轉換
關鍵條件分析

1. $a == 0
PHP中==是弱類型比較

  • 字符串與數字比較時,PHP會嘗試將字符串轉為數字。
  • 轉換規則:
    • 字符串以數字開頭(如"0abc""0.0foo")會被轉為數字(如"0abc"→0)。
    • 字符串不以數字開頭(如"abc")會被轉為0

示例:

"0abc" == 0 為true
"abc" == 0 為true

2. $a的布爾值
PHP中以下值會被當作false

  • 0(整數0)
  • 0.0(浮點數0)
  • "0"(字符串0)
  • ""(空字符串)
  • null
  • false
  • [](空數組)

其他值(如"0abc""abc"" "(空格字符串))均為true

條件交集與payload分析
$a$a==0$a為真能否通過
0truefalse
"0"truefalse
""truefalse
nulltruefalse
falsetruefalse
[]truefalse
"abc"truetrue
"0abc"truetrue
" "falsetrue
"1"falsetrue

有效payload

  • ?a=abc
  • ?a=0abc
  • ?a=test
  • ?a=123abc
代碼執行流程

常見陷阱(就是提醒大家要兩個點都要兼顧)

  • 傳遞?a=0?a=0.0?a="0"?a=(空):雖然==0true,但布爾值為false
  • 傳遞?a=1:布爾值為true,但1==0false

總結

本題主要考察PHP語言中的兩個關鍵特性:

  1. 弱類型比較機制:PHP在比較不同類型變量時會進行自動類型轉換
  2. 布爾值判斷規則:PHP對變量轉換為布爾值的特殊規則

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89901.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89901.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89901.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AntV G6動態連線

完整代碼如下 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AntV G6 動態連線</titl…

puppeteerSharp html轉pdf

部屬到linux 上報錯&#xff1a; Failed to launch browser! /wwwroots/xxx/Chrome/Linux-138.0.7204.92/chrome-linux64/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory 問題服務包缺少依賴&…

springBoot接口層時間參數JSON序列化問題,兼容處理

背景&#xff1a;解決前端傳入時間參數格式不固定場景&#xff0c;避免接收參數報錯時間格式不能序列化。一、概述在 Java 后端開發中&#xff0c;處理 JSON 數據時&#xff0c;經常需要對日期時間字段進行反序列化。Java 中常用的日期時間類型是 java.time.LocalDateTime&…

List、Set、Map三者之間的關系

1、數據結構與核心特性接口數據結構順序性唯一性鍵值對null 元素List動態數組/鏈表有序&#xff08;插入順序&#xff09;允許重復否允許多個 nullSet哈希表 / 紅黑樹無序&#xff08;HashSet&#xff09;有序&#xff08;LinkedHashSet/TreeSet&#xff09;不允許重復否僅 Has…

進程控制----進程終止

一、進程終止的核心場景正常終止&#xff08;代碼完整運行完畢&#xff09;成功&#xff1a;進程執行到main函數結束或調用exit()&#xff0c;返回退出碼 0&#xff08;約定為執行成功&#xff09;。失敗&#xff1a;代碼執行完畢但結果異常&#xff0c;返回非零退出碼&#xf…

Milvus docker-compose 部署

文章目錄 前言Milvus docker-compose 部署1. 下載2. 修改配置3. 啟動4. 測試 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實在白嫖的…

EveryThing搜索具體路徑下文件中的內容

1.打開EveryThing 2.點擊搜索&#xff0c;選擇高級搜索 3.選擇需要搜索的文件的路徑以及文件中需要包含的內容 4.之后就可以搜索到對應的目標文件

【算法】寬度優先遍歷BFS

二叉樹的寬搜 429、N叉樹的層序遍歷 題解 BFS核心思想 二叉樹的寬搜一般都是借助隊列來實現的&#xff0c;實現的原理為首先將根節點進行放入隊列中&#xff0c;然后將根節點進行彈出的時候&#xff0c;將這個節點的孩子節點進行放入隊列中&#xff0c;然后繼續彈出隊頭的元…

【STM32】通用定時器基本原理

STM32 通用定時器基本原理&#xff08;基于 STM32F1&#xff09;參考資料&#xff1a;STM32F1xx官方資料&#xff1a;《STM32中文參考手冊V10》-第14章通用定時器STM32 定時器分類 STM32F103 系列共有三類定時器&#xff1a;&#x1f50e; 通用定時器&#xff08;TIM2~TIM5&…

【Go語言-Day 14】深入解析 map:創建、增刪改查與“鍵是否存在”的奧秘

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

Vue腳手架搭建項目+基礎知識

1. 使用腳手架創建項目1.1 準備工作winR&#xff0c;在彈出的數據框中輸入cmd&#xff0c;數據命令查看node以及npm版本 下載vue cli1.2 創建項目1.2.1 創建一個英文目錄文件夾&#xff0c;cmd打開命令命令提示符1.2.2 vue ui命令打開控制臺1.2.3 創建項目創建成功1.3 項目結構…

微信小程序下單頁—地址列表頁—新增地址頁 頁面交互

新增地址流程&#xff1a; 下單頁 → 地址列表頁 (1次跳轉)地址列表頁 → 新增地址頁 (1次跳轉)保存地址 → 返回地址列表頁 (1次返回&#xff0c;自動刷新列表) 選擇地址流程&#xff1a; 地址列表頁 → 選中地址 → 返回下單頁 (1次返回) 更換地址&#xff1a; 下單頁 → 地址…

JVM與JMM

為了更清晰地對比JVM和JMM&#xff0c;我們可以采用表格形式&#xff0c;從定義、功能、結構、與多線程關系等方面進行詳細比較&#xff1a; 對比項JVM&#xff08;Java Virtual Machine&#xff09;JMM&#xff08;Java Memory Model&#xff09;定義一種虛構的計算機&#x…

【Docker基礎】Docker數據卷管理:docker volume rm及其參數詳解

目錄 1 引言&#xff1a;Docker Volume 的生命周期管理 2 docker volume rm命令基礎 2.1 命令作用 2.2 命令語法 3 參數深度解析 3.1 基礎參數表 3.2 高級參數詳解 3.2.1 --force&#xff08;-f&#xff09; 4 Volume刪除前置條件 4.1 可刪除狀態判斷 4.2 常見報錯處…

嵌入式系統內核鏡像相關(十)

文章目錄 前言一、點亮多個led燈的基礎實驗以及其中的問題1.1 基礎流程1.1.1 alinx教程的問題1.1.1.1 驅動程序中的亮/滅邏輯修改&#xff01;1.1.1.1.1 邏輯錯誤的修改1.1.1.1.2 多燈亮/滅 1.1.1.2 驅動程序中引腳的問題以及與裸機開發的區別&#xff08;重要&#xff09;1.1.…

Word和Excel批量轉PDF新方法,操作簡單

PDF是一種跨平臺的文檔格式&#xff0c;無論在任何設備上查看&#xff0c;其排版、字體和圖像都不會發生變化。這確保了文檔的一致性&#xff0c;避免了由于不同軟件版本或操作系統引起的顯示問題。這款小巧的工具大小不到2MB&#xff0c;使用起來異常簡單。只需要把需要轉換的…

AI搜索 MCP最佳實踐

背景 那些 LLM 不知道的事 嘗試直接詢問LLM“今天天氣如何”時&#xff0c;會發現LLM無法回答——它既不知道“今天”是哪天&#xff0c;也無法獲取地理位置信息。這揭示了LLM的局限&#xff1a;缺乏與外部工具和實時數據的交互能力。 為解決這一問題&#xff0c;MCP&#x…

JVM 簡介與作用

&#x1f680; JVM 簡介與作用 &#x1f4da; 深入理解 Java 虛擬機的核心概念與重要作用 &#x1f4d6; 目錄 &#x1f914; 什么是 Java 虛擬機&#xff08;JVM&#xff09;&#x1f310; JVM 在 Java 生態中的核心地位&#x1f500; JVM 跨平臺原理剖析&#x1f4dd; 總結 …

? OpenAudio S1:影視級文本轉語音與語音克隆Mac整合包

? OpenAudio S1&#xff1a;影視級文本轉語音與語音克隆Mac整合包 &#x1f680; OpenAudio S1 簡介 OpenAudio S1 是由 Fish Audio 開發的 Fish Speech 系列的最新一代人工智能語音生成模型。該模型旨在大幅提升 AI 語音生成的技術水平&#xff0c;為用戶提供更加自然、富有表…

spring加載外部properties文件屬性時,讀取到userName變量值和properties文件的值不一致

問題 使用spring DI注入外部properties文件屬性時&#xff0c;讀取到userName變量值和properties文件的值不一致。 bean屬性注入&#xff1a; <!--加載配置文件--> <context:property-placeholder location"classpath:*.properties"/><bean id"…