Baby_SQL
source.zip文件泄露,审计源码
index.php中对所有输入的参数进行了单双引号以及反斜杆的过滤,这里不可注或者说难以注入。
<?php
session_start();
foreach ($_SESSION as $key => $value): $_SESSION[$key] = filter($value); endforeach;
foreach ($_GET as $key => $value): $_GET[$key] = filter($value); endforeach;
foreach ($_POST as $key => $value): $_POST[$key] = filter($value); endforeach;
foreach ($_REQUEST as $key => $value): $_REQUEST[$key] = filter($value); endforeach;
function filter($value)
{
!is_string($value) AND die("Hacking attempt!");
return addslashes($value);
}
isset($_GET['p']) AND $_GET['p'] === "register" AND $_SERVER['REQUEST_METHOD'] === 'POST' AND isset($_POST['username']) AND isset($_POST['password']) AND @include('templates/register.php');
isset($_GET['p']) AND $_GET['p'] === "login" AND $_SERVER['REQUEST_METHOD'] === 'GET' AND isset($_GET['username']) AND isset($_GET['password']) AND @include('templates/login.php');
isset($_GET['p']) AND $_GET['p'] === "home" AND @include('templates/home.php');
?>login.php主要是对数据库进行SELECT操作,这里的usernmae可控,可以注入,那么我们需要绕过index.php的WAF来直接对login.php进行SQL注入,主要的就是绕过SESSION检测。
由于这里来判断是否登录只是单纯的判断了是否设置了SESSION,那么我们可以自己设置SESSION。这里用到SESSION_UPLOAD_PROGRESS,具体参见这篇文章:https://xz.aliyun.com/t/9545。由于没有回显,用了盲注。写了一个时间复杂度还算可以的脚本,凑合着用吧。
Last updated