new 由PHP SECURITY CALENDAR 2017引发的思考总结

0x01 起因

Day 1 - Wish List

Can you spot the vulnerability?

class Challenge {
  const UPLOAD_DIRECTORY = './solutions/';
  private $file;
  private $whitelist;

  public function __construct($file) {
    $this->file = $file;
    $this->whitelist = range(1, 24);
  }

  public function __destruct() {
    if (in_array($this->file['name'], $this->whitelist)) {
      move_uploaded_file(
        $this->file['tmp_name'],
        self::UPLOAD_DIRECTORY . $this->file['name']
      );
    }
  }
}

$challenge = new Challenge($_FILES['solution']);

这里的关键问题在in_array()函数,可以先看看In_array()的函数定义:

- 阅读剩余部分 -

typecho搬家后出现的一些问题解决方法

起因

阿里云到期,不得已搬家了~
搬家的过程中,遇到一些问题,提供一些解决方法

1、出现"500Database Query Error"

config.inc.php 里面的55行左右的数据库类型Mysql改为Pdo_Mysql,
图片 1.png

2、出现"Error establishing a database connection"错误

  • 数据库服务是否运行
  • 是否启动了数据库服务
  • 数据库配置没有配置正确
  • 检查config.inc.php配置,看看config.inc.php中数据库配置是否正确,
  • 数据库版本太高(8.0以上就会出错)
    这是个巨坑,一开始我直接yum search mysql 然后找了一个版本的MySQL安装,结果发现是8.1版本的……当时就感觉不好,果然,无论怎么测试连接,都是出现Error establishing a database connection"错误,然后把这个版本的MySQL给卸载了,重新安装了5.7版本的MySQL,恢复正常。



- 阅读剩余部分 -

精读:REDQUEEN: Fuzzing with Input-to-State Correspondence

00 - About

作者:Cornelius Aschermann, Sergej Schumilo, Tim Blazytko, Robert Gawlik and Thorsten Holz

01 – Why

近年来,基于模糊的抽象自动化软件测试经历了一次复兴,特别是反馈驱动模糊以其在有限输入语料库下高效地进行随机测试的能力而闻名(such afl)。尽管取得了许多进展,但有两个常见的问题是 magic numbers 和 checksums,这些问题通常使用 taint tracking 和symbolic execution 等计算开销较大的方法来克服这些障碍。不幸的是,这样的方法通常需要访问源代码、对环境的需求较高(例如,库调用或底层操作系统的行为)或平台指令集的确切语义。

1.png

因此,本文介绍了一种轻量级的、但非常有效的方法来替代 taint tracking 和 symbolic
execution,以方便和优化最先进的反馈模糊处理,这种模糊处理很容易扩展到大型二进制应用程序和未知环境。


- 阅读剩余部分 -

精读:CollAFL: Path Sensitive Fuzzing

0x01 Why

目前流行的fuzzing(如AFL)通常使用较为简单的coverage information,这种覆盖的不准确和不完整给fuzzing带来了严重的局限性。首先,它会导致路径冲突,从而影响fuzzing挖掘出导致新崩溃的潜在路径。更重要的是,它也会影响fuzzing的最优决策。此外,学术界的大部分研究的是Coverage-guided fuzzing,很少有目光真正的投在Coverage上,所以CollAFL做了这一块的内容。

0x02 What

对AFL中的coverage inaccuracy 和seed选择策略做了改进,改进后的工具称为CollAFL

0x03 How

本文主要做了两个改进。第一,在AFL中,AFL要用到一个64KB bitmap来保存Coverage的信息,在AFL进行fuzzing的时候,会发生碰撞,两个快构成一个边,AFL为边赋了hash值,这个hash就代表这条边,可是不同的边计算出的hash可能是一样的,于是就发生了Collision , Collision可能会导致某些input到达新的路径,但AFL却没有将该input作为seed,本文主要针对这一点,采用了一个新的算法,解决了路径hash collision问题。第二,在seed选择的时候,CollAFL会优先选择对Coverage有贡献的seed。

CollAFL的具体做法如下。

- 阅读剩余部分 -