PHP特性靶场(web89-103)

目录

1.web89

2.web90 

3.web91

4.web92

5.web93

6.web94

7.web95

8.web96

 9.web 97

10.web98

11.web100


1.web89

 这段 PHP 代码的主要目的是根据用户输入的特定条件来决定是否输出flag的值.

首先include("flag.php")包含一个flag.php文件;

highlight_file(__FILE__)用于对当前PHP文件进行语法高亮显示

if (isset($_GET['num'])) {... }通过GET方法传递了名为num的参数;

$num = $_GET['num']表示用GET传参的方法将参数num的值赋值给变量$num;

if (preg_match("/[0 - 9]/", $num)) { die("no no no!"); }通过正则匹配来检查$num中是否包含0-9中任意数字的一个。如果包含数字,则输出no no no!并终止脚本执行;

if (intval($num)) { echo $flag; }intval函数将$num的值转换为整数。代码会进一步检查是否能够将 $num 转换为整数。如果可以转换(即 $num 是一个整数),则执行 echo $flag语句,输出 flag 。

所以输入?num[]=4.4

2.web90 

这段 PHP 代码主要用于根据用户通过GET方法传递的num参数的值来决定输出内容。

 include("flag.php");:将flag.php文件包含到当前脚本中;

highlight_file(__FILE__);:对当前 PHP 文件进行语法高亮显示;

if (isset($_GET['num'])) {... }:检查是否通过GET方法传递了名为num的参数。如果有,则执行花括号内的代码;

$num = $_GET['num'];:将GET参数num的值赋给变量$num;

if ($num === "4476") { die("no no no!"); }这里"==="的作用为不仅要比较左右两个数的值,还要比较数据类型。如果$num的值是4476并且数据类型是字符串,就会输出no no no!并终止脚本;

if (intval($num, 0) === 4476) { echo $flag; }:这里使用intval函数将$num转换为整数。intval函数的第二个参数0表示根据默认的基数(十进制)进行转换。如果转换后的整数等于4476,则输出flag。这里可以输入4476的八进制010574,十六进制0x117c等;

else { echo intval($num, 0); }:如果intval($num, 0)不等于4476,则输出num转换后的整数值。

所以输入?num=010574或?num=0x117c

3.web91

show_source(__FILE__);:这个函数用于显示当前 PHP 文件的源代码;

include('flag.php');:将flag.php文件包含到当前脚本中;

if(preg_match('/^php$/im', $a)){... }:这里使用preg_match函数和正则表达式/^php$/im$a进行匹配。正则表达式/^php$/im的含义如下:

  • ^表示匹配字符串的开头
  • php是要匹配的内容
  • $表示匹配字符串的结尾
  • i修饰符表示不区分大小写匹配
  • m修饰符表示多行匹配模式,所以需要转行符%0a。

 if(preg_match('/^php$/i', $a)){... }:这里再次使用preg_match函数,但正则表达式是/^php$/i(去掉了m修饰符)对$a进行匹配。如果$a匹配这个正则表达式,,则输出hacker。如果不匹配这个正则表达式,则输出flag;

如果$a不匹配第一个正则表达式/^php$/im,则输出nonononono

所以输入?cmd=%0aphp

4.web92

 

这段 PHP 代码主要用于根据用户通过GET方法传递的num参数的值来决定输出内容。

 include("flag.php");:将flag.php文件包含到当前脚本中;

highlight_file(__FILE__);:对当前 PHP 文件进行语法高亮显示;

if (isset($_GET['num'])) {... }检查是否通过GET方法传递了名为num的参数。如果有,则执行花括号内的代码;

$num = $_GET['num'];:将GET参数num的值赋给变量$num;

if ($num === "4476") { die("no no no!"); }这里"==="的作用为不仅要比较左右两个数的值,还要比较数据类型。如果$num的值是4476并且数据类型是字符串,就会输出no no no!并终止脚本;

if (intval($num, 0) === 4476) { echo $flag; }:这里使用intval函数将$num转换为整数。intval函数的第二个参数0表示根据默认的基数(十进制)进行转换。如果转换后的整数等于4476,则输出flag。这里可以输入4476的八进制010574,十六进制0x117c等;

else { echo intval($num, 0); }:如果intval($num, 0)不等于4476,则输出num转换后的整数值。

所以输入?num=010574或?num=0x117c

5.web93

if(preg_match("/[a - z]/i", $num)){ die("no no no!"); } 这个条件判断是检查$num中是否包含字母(不区分大小写),如果包含,则输出no no no!并终止脚本。故只能输入4476的八进制?num=010574

6.web94

strpos是 PHP 中的一个字符串函数,用于查找一个字符串在另一个字符串中首次出现的位置。 (索引从 0 开始)

strpos($num, "0")返回false时(即字符串$num中没有找到"0"这个字符)。故可以输入?num= 10574(注意前面有空格)或?num=4476.01

7.web95

  • |:这是逻辑或(alternation)操作符。它表示匹配[a - z]或者后面的表达式。
  • \.:这里的.是一个特殊字符,在正则表达式中它通常匹配除了换行符之外的任何单个字符。但是由于前面有反斜杠\进行转义,在这里它只匹配字符.本身。故不能输入类似?num=4476.01

故 num中有0但是开头不能为0,可以输入?num= 10574(注意空格)或?num=+10574或?num=%0a10574

8.web96

如果 u 参数存在:

检查 u 参数是否等于 'flag.php'。如果是,则执行 die("no no no");,终止脚本执行并输出 "no no no";

 如果 u 参数不是 'flag.php',则执行 highlight_file($_GET['u']);,高亮显示用户指定的文件内容。flag肯定在flag.php文件中,想办法绕过,flag在当前目录中,可以输入?u=./flag.php

 9.web 97

if (isset($_POST['a']) and isset($_POST['b'])) {... }:这个条件语句检查是否同时接收到了名为abPOST参数。只有当两个参数都存在时,才会执行花括号内的代码。

if ($_POST['a']!= $_POST['b']):首先检查ab的值是否不相等。这是一个普通的不等比较。

if (md5($_POST['a']) === md5($_POST['b'])):如果ab的值不相等,接着检查它们的MD5哈希值是否严格相等。这里使用===进行严格比较,意味着不仅哈希值要相等,而且哈希值的数据类型也要相同。如果满足这个条件,就会输出flag

else print 'Wrong.';:如果abMD5哈希值不严格相等,就输出Wrong.

哈希值(Hash Value)也被称为散列值,它是通过哈希函数(Hash Function)对任意长度的数据计算得出的固定长度的值。

10.web98

 $_GET? $_GET = &$_POST : 'flag';表示如果$_GET存在(即有值且不为falsenull等),那么$_GET将成为$_POST的引用。如果$_GET不存在,这里返回字符串'flag';

$_GET['flag'] == 'flag'? $_GET = &$_COOKIE : 'flag'; 这里检查$_GET数组中'flag'键的值是否等于'flag'。如果是,$_GET将成为$_COOKIE的引用;否则,同样返回字符串'flag'

$_GET['flag'] == 'flag'? $_GET = &$_SERVER : 'flag'; 类似地,再次检查$_GET数组中'flag'键的值。如果等于'flag'$_GET将成为$_SERVER的引用;否则,返回'flag';

highlight_file($_GET['HTTP_FLAG'] == 'flag'? $flag : __FILE__); 检查$_GET数组中'HTTP_FLAG'键的值是否等于'flag'。如果是,就调用highlight_file函数输出$flag的值)。如果$_GET['HTTP_FLAG']不等于'flag',则输出当前文件(__FILE__)的源代码。

11.web100

 

代码从GET请求中获取v1v2v3三个参数,然后使用is_numeric函数检查这三个参数是否为数字;

接下来检查v2中是否不包含;字符,同时v3中是否包含;字符。如果满足条件,就会执行eval("$v2('ctfshow')$v3");

 输入?v1=1&v2=var_dump($ctfshow)/*&v3=*/;  输出ctfshow里的内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值