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了
Comments | NOTHING