Ctfshow - 萌新赛web_假赛生
假赛生
<?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";
}
}
}
?>
提示1是register.php,访问是注册页面
提示2是login.php,访问是登陆页面
从源码看,登陆用户名需要是admin,访问login.php,注册一个admin,密码随意,返回
not register admin
注册的不是admin($name==='admin'),登陆会失败
select pass from user where name="admin2"
那么在admin后面加个空格如何,去登陆就能成功了,显示
admin!!!!!
you not admin
因为没有传参c,所以
echo "you not admin";
有关正则匹配的知识
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次;
因此乍看题目正则匹配过滤了一切字符,其实没有过滤空格
传参c为空格,就能返回flag
[Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你