Seccon CTF 2016 biscuiti writeup

本文详细介绍了Seccon CTF 2016中Web300级别的挑战Biscuiti。题目涉及SQL注入、Padding Oracle攻击和Cookie值的利用。作者首先通过SQL注入控制查询结果,利用Padding Oracle漏洞恢复加密密文,然后修改特定部分的密文以通过反序列化验证,最终成功登陆并完成挑战。文章附带了解决问题的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附dalao链接:https://blog.tinduong.pw/2016/12/11/seccon-quals-2016-biscuiti-web-crypto-300-write-up/
其他题目的wp写在另一篇文章里面:http://blog.youkuaiyun.com/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("\0", 16);
    $c = openssl_encrypt($input, ENC_METHOD, ENC_KEY, OPENSSL_RAW_DATA, $iv);
    return substr($c, -16);
}

function save_session() {
    
    
    global $SESSION;
    $j = serialize($SESSION);
    $u = $j . mac($j);
    setcookie("JSESSION", base64_encode($u));
}

function load_session() {
    
    
    global $SESSION;
    if (!isset($_COOKIE["JSESSION"]))
        return array();
    $u = base64_decode($_COOKIE["JSESSION"]);
    $j = substr($u, 0, -16);
    $t = substr($u, -16);
    if (mac($j) !== $t)
        return array(2);
    $SESSION = unserialize($j);
    //a:3:{s:4:"name";s:9:"bendawang";s:7:"isadmin";s:1:"1";s:8:"password";s:27:"bendawangbendawangbendawang";}
}

function _h($s) {
    
    
    return htmlspecialchars(<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值