ctfshow假赛生

1.代码审计

<?php
session_start();
include('config.php');
if(empty($_SESSION['name'])){
    show_source("index.php");
}else{
    $name=$_SESSION['name'];
    $sql='select pass from user where name="'.$name.'"';
    echo $sql."<br />";
    system('4rfvbgt56yhn.sh');
    $query=mysqli_query($conn,$sql);
    $result=mysqli_fetch_assoc($query);
    if($name==='admin'){
        echo "admin!!!!!"."<br />";
        if(isset($_GET['c'])){
            preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);
            echo $flag;
        }else{
            echo "you not admin";
        }
    }
}
?>

根据代码提示,我们可以知道需要登陆admin账户且通过传递参数c来获取flag。

2.sql约束攻击

题目给出了提示,注册和登陆的地址。这里要我们admin账户登陆,那么我们先注册一个admin的账户。
在这里插入图片描述
他这里说不能等级admin账户。登陆界面试了好像不能注入。
这里用到sql的一个规则。

在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。也就是说我注册admin+空格账户在执行sql时相当于注册了admin账户。

那么我们通过注册admin+空格账户,登陆admin账户时使用我们注册的admin+空格账户的密码即可登陆admin。具体有关sql约束攻击可以阅读:基于约束的sql攻击
在这里插入图片描述

3.正则绕过

最后就是c参数的preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);的绕过。

\w匹配任何单词字符包含下划线 ===>等价于 [A-Z a-z 0-9_]
\W匹配任何非单词字符 (与上面的相反) ===>等价于 [^A-Z a-z 0-9_]

同时过滤了单词字符与非单词字符,但是这里没有对c参数进行非空限制,我们传递一个空格即可绕过。
在这里插入图片描述
得到flag。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值