MySQL 客户端触发读文件在PHP版本下的校验

date
Nov 18, 2021
slug
mysql-readfile-check-php
status
Published
tags
安全研究
PHP安全
summary
挖漏洞的时候突然想到这个点,想去测试一下,去探究一下到底在哪个版本这个东西被修复了,就无法触发读文件/反序列化了
type
Post
用的Mysqlist这个工具进行检验
测试demo:
<?php
class A {
    public $s = '';
    public function __wakeup () {
        echo "pwned!!";
    }
}


$m = mysqli_init();
mysqli_options($m, MYSQLI_OPT_LOCAL_INFILE, true);
$s = mysqli_real_connect($m, '127.0.0.1', 'root', '123456', 'test', 8887);
$p = mysqli_query($m, 'select 1;');

// file_get_contents('phar://./phar.phar');
众所周知,在PHP中,如果伪造的mysql服务可以让客户端读取本地文件,还可以让其读取phar连接的内容,来实现反序列化,只需要把file:///etc/passwd 改成 phar://xxx.phar 即可
这个文章测试一下在哪个版本下还能使用这个攻击

普通客户端5.7.29

可以触发(随便输密码):
notion image

PHP 5.6

notion image

PHP 7.0.33

notion image

PHP 7.2.34

此时变成Not_Found,不可读了
notion image

PHP 7.3.25

同样的结果,也不可读了
notion image
 

总结

PHP7.2 版本以后(包括7.2),这个攻击手法不再有效果了

© 4me 2021 - 2024