题目
<?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";
}
}
}
?>
分析
题目提示中有写register.php login.php 两个地址
一个是注册,一个是登录
分析上面代码,应该是要admin账号登陆,并且c绕过正则表达式传参,才会显示flag
在注册页面发现不允许注册admin,于是注册admin+空格。可以注册,并且可以在登陆页面登录
但是还没回显flag,还需要绕过正则
if(isset($_GET['c'])){
preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);
echo $flag;
}
令c为空即可
得到flag。