我是靠谱客的博主 灵巧发带,最近开发中收集的这篇文章主要介绍Seccon CTF 2016 biscuiti writeupweb300 biscuiti,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
附dalao链接:https://blog.tinduong.pw/2016/12/11/seccon-quals-2016-biscuiti-web-crypto-300-write-up/
其他题目的wp写在另一篇文章里面:http://blog.csdn.net/qq_19876131/article/details/53675162
web300 biscuiti
这道题我单独挑出来发博客,因为折腾了我快一天,而且遇到的问题都是绝对不该犯的错误,真是暴躁,不过题目质量本身还是相当高的。
一道web+padding oracle的题目。但是我的大部分时间都花在调自己的脚本上了,暴露出平时写代码的习惯太差了,各种细节问题接二连三。真是爆炸
首先拿到源码,本地的sqlite环境有点问题,怎么也连不上,所以简单改了改换成了mysql。应该影响不大吧。。大概。。。
简单改成mysql数据库后源码如下:
<?php
error_reporting(0);
define("ENC_KEY", "abcdcensoreddefg");
define("ENC_METHOD", "aes-128-cbc");
if (!extension_loaded('pdo_sqlite')) {
header("Content-type: text/plain");
echo "PDO Driver for SQLite is not installed.";
exit;
}
if (!extension_loaded('openssl')) {
header("Content-type: text/plain");
echo "OpenSSL extension is not installed.";
exit;
}
/*
Setup:
CREATE TABLE user (
username VARCHAR(255),
enc_password VARCHAR(255),
isadmin BOOLEAN
);
INSERT INTO user VALUES ("admin", "***censored***", 1);
*/
// 加密之后base64
function auth($enc_password, $input) {
$enc_password = base64_decode($enc_password);
$iv = substr($enc_password, 0, 16);
$c = substr($enc_password, 16);
#echo $c."<br>".$v;
$password = openssl_decrypt($c, ENC_METHOD, ENC_KEY, OPENSSL_RAW_DATA, $iv);
return $password == $input;
}
function mac($input) {
$iv = str_repeat("