HeroCTF WP

发布于 2021-04-24  1 次阅读


PwnQL#1

打开看f12源码,里面有写login.php.bak

<?php

require_once(__DIR__  . "/config.php");

if (isset($_POST['username']) && isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = "SELECT * FROM users WHERE username = :username AND password LIKE :password;";
    $sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $sth->execute(array(':username' => $username, ':password' => $password));
    $users = $sth->fetchAll();

    if (count($users) === 1) {
        $msg = 'Welcome back admin ! Here is your flag : ' . FLAG;
    } else {
        $msg = 'Wrong username or password.';
    }
}

?>

可以看到是预处理语句,普通的sql注入是用不了了。

可以看到like的sql语句。那就用模糊匹配,用户名admin,密码%,flag就会直接显示了

Mark3ing agency

同样的看源码有admin.php.bak

<?php

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

if (!(isset($_SESSION["logged"]) && $_SESSION["logged"] === true)) {
    header("Location: /index.php?error=You are not admin !");
}

echo "Flag : " . getenv("FLAG_MARK3TING");

查了点资料

PHP_SESSION_NONE要求 会话开始但会话并不存在

换句话说:

“重定向”

一开始的思路是找到logged改一改,但是又没有输入点可以把session=post/get

login也不是单独的php界面用来注入,页面有个error=

测试了一下,ssti和xss都是原样输出。

后来扫一扫目录,

发现直接有个302跳转可以利用,这就抓包

可以知道session被启用,但是不知道为啥logged就直接判断为ture了


间桐桜のお菓子屋さん