Phân tích và hướng dẫn triển khai CVE-2021-43617 (Phần 2)

tuantran

Moderator
Thành viên BQT
27/04/2017
29
76 bài viết
Phân tích và hướng dẫn triển khai CVE-2021-43617 (Phần 2)
Hi mọi người, lâu rồi mới có thời gian để ngồi viết phần còn lại của dạng phân tích và triển khai này. Nếu các bạn chưa đọc bài phân tích của CVE này của mình thì mọi có thể đọc ở đây nhé. Còn nếu đã đọc rồi thì mình cùng tiếp tục với phần 2 và thực hiện việc triển khai để khai thác thôi nào.

1654586711457.png


Chuẩn bị và cài đặt lỗ hổng


Việc đầu tiên là chuẩn bị môi trường cần thiết. Môi trường khai thác bao gồm:​
  • Ubuntu (base on debian)​
  • Php​
  • Apache2​
  • Composer​
  • Laravel version dưới 8.70.2 (hoặc dùng version mới xong xóa bỏ phần vá của cái CVE này là được)​
Cài đặt môi trường

Tắt tường lửa trên ubuntu:

Bash:
Sudo systemctl stop ufw

Cài đặt PHP và các gói hỗ trợ cần thiết:

Mã:
sudo apt install -y php7.4

sudo apt install -y php7.4-mysql php7.4-curl php7.4-json php7.4-cgi php7.4-xsl php7.4-mbstring php7.4-opcache php7.4-gd php7.4-pgsql php7.4-intl php7.4-bcmath php7.4-soap

Còn nếu muốn tự tìm hiểu cách cài thì các bạn có thể tham khảo ở đây nhá. Nó có chưa tất cả các bước cài đặt.
https://www.digitalocean.com/commun...local-development-environment-on-ubuntu-18-04

Cài đặt và cấu hình apache2

Cài đặt qua lệnh dưới đây:

Bash:
sudo apt install apache2 –y

Bật rewrite mode:

Bash:
sudo a2enmod rewrite
1654588050500.png

Bash:
sudo systemctl restart apache2

Sau khi restart thì kiểm tra xem rewrite đã được bật hay chưa bằng lệnh dưới đây:

Bash:
Sudo apachect –t –D DUMP_MODULES | grep rewrite

1654587187111.png


Khi output trả về là shared thì đã ok rồi.

Bật thêm mode AllowOveride tại /etc/apache2/apache2.conf
1654588069208.png

Tiếp theo là tạo một virtualhost mới. Sao chép tệp tin cấu hình mặc định và thay đổi tên thành laravel.conf

Bash:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/laravel.conf

Chỉnh sửa nội dung file như sau:
1654588092122.png

Còn nếu bạn lười thì có thể chỉnh sửa trực tiếp từ 000-default.conf

1654587327395.png


Sau khi thay đổi thì cần phải reload lại nhé. Ngoài ra cần kiểm tra thêm, cấu hình mặc định cho phép thực thi file phar hay chưa nhé.

/etc/apache2/mods-available/php7.4.conf

1654587358531.png


Cài composer

Bash:
curl -sS https://getcomposer.org/installer | php

sudo mv composer.phar /usr/local/bin/composer

sudo chmod +x /usr/local/bin/composer

Cài đặt Laravel

Bạn có thể dùng lệnh composer để tạo project.

Bash:
cd /var/www/html

composer create-project laravel/laravel CVE –prefer-dist

Với phần này bạn cần cấp quyền đầy đủ cho CVE thư mục. Thực ra thì chỉ cần cấp quyền cho một vài thư mục. Nhưng vì lười biếng và muốn nhanh nên mình cấp quyền cho toàn thư mục :)

Bash:
chmod –R 777 CVE
1654588135630.png

Ngoài ra nếu muốn có thêm thử thách như mình thì làm thủ công như sau:

Tải gói larvel từ Github:

Bash:
cd /var/www/html/

sudo git clone https://github.com/laravel/laravel.git

Sau đó, di chuyển tới thư mực laravel. Tập tin composer.json sẽ chỉ định phiên bản các thành phần trong ứng dụng laravel. Mở tập tin vào chỉnh sửa thành 8.70.2
1654588152223.png

Lưu lại và chạy lệnh:

Bash:
sudo composer install

sudo composer fund

Để đổi phiên bản chỉ cần sửa tập tin composer.json và chạy
Bash:
sudo composer update

Vậy là đã xong cài đặt. Để kiểm tra xem nó thành công hay không thì truy cập vào đường dẫn
http://LOCAL_IP:8080 hoặc http://LOCAL_IP:80 cái port này tùy thuộc vào các cấu hình của virtualhost trên apache2 ở trên.

1654587562692.png


1654587588429.png


Ok vậy thì đã hòm hòm rồi, nhưng vì CVE này là phần upload nên cần phải có view để dễ dàng cho việc demo và khai thác. Ở đây, sẽ tạo ra một trang upload đơn giản. Vì laravel hoặt động theo mô hình MVC, nên chỉ cần tạo 3 tập tin tương ứng
Routes/web.php

PHP:
<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\UploadController;

Route::get('upload', [ UploadController::class, 'imageUpload' ])->name('image.upload');

Route::post('upload', [ UploadController::class, 'imageUploadPost' ])->name('image.upload.post'



Route::get('/', function () {

return view('welcome');

});`

tạo controler để xử lý các request:



`<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Validation\Concerns\ValidatesAttributes;`



`Trait Test{

use ValidatesAttributes;

public function tester($a, $b){return $this->shouldBlockPhpUpload($a, $b);}

}`



`Class Validate {

use Test;

}`

`class UploadController  extends Controller

{`



`/**`



`Display a listing of the resource.`



`@return \Illuminate\Http\Response

*/

public function imageUpload()

{

return view('Upload');

}

/*`



`Display a listing of the resource.`



`@return \Illuminate\Http\Response

*/`

`public function imageUploadPost(Request $request)

{

$validate = new Validate;

if(!$validate->tester($request->image,['sfdfsdfdsfs'])){

$re = 'okok';

}

else {$re= 'no ok'; return back()->with('fail','Fail');}

$imageName = time().'.'.$request->image->getClientOriginalExtension();

$request->image->move(public_path('images'), $imageName);`

`/* Store $imageName name in DATABASE from HERE */

return back()

->with('success','You have successfully upload image.'.$re)

->with('image',$imageName)

;

}

Cuối cùng tạo frontend cho nó. Resources/views/Upload.blade.php

PHP:
<!DOCTYPE html>

<html>

<head>

<title>CVE</title>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">

</head>

<body>

<div class="container">

<div class="panel panel-primary">

<div class="panel-heading"><h2>CVE-2021-43617 LoL</h2></div>

<div class="panel-body">

@if ($message = Session::get('success'))

<div class="alert alert-success alert-block">

<button type="button" class="close" data-dismiss="alert">×</button>

<strong>{{ $message }}</strong>

</div>

<img src="images/{{ Session::get('image') }}">

@endif

@if ($message = Session::get('fail'))

<div class="alert alert-success alert-block">

<button type="button" class="close" data-dismiss="alert">×</button>

<strong>{{ $message }}</strong>

</div>

@endif

@if (count($errors) > 0)

        <div class="alert alert-danger">

            <strong>Whoops!</strong> There were some problems with your input.

            <ul>

                @foreach ($errors->all() as $error)

                    <li>{{ $error }}</li>

                @endforeach

            </ul>

        </div>

    @endif

    <form action="{{ route('image.upload.post') }}" method="POST" enctype="multipart/form-data">

        @csrf

        <div class="row">

            <div class="col-md-6">

                <input type="file" name="image" class="form-control">

            </div>

            <div class="col-md-6">

                <button type="submit" class="btn btn-success">Upload</button>

            </div>

        </div>

    </form>

  </div>

</div>

Rồi chạy lại compose và kiểm tra kết quả nào.

Khi ta truy cập vào Http://LOCAL_IP:8080/upload
1654588180955.png
Cuối cùng thì đã xong bước chuẩn bị. Bây giờ thực hành việc khai thác nó thôi.

Khai thác lỗ hổng

Đầu tiên, khi ta upload một hình ảnh bình thường thì nó sẽ trả về như thế này:

1654587666472.png

Khi upload một file PHP thì sẽ báo lỗi.

1654587692680.png

Vì lỗ hổng này do blacklist trong hàm validate không có đuôi file .phar. Nên ta sẽ tạo 1 file đuôi phar với payload như trong hình rồi thực hiện việc upload lên.
1654588192652.png

Trước khi thực hiện việc upload lên thì từ máy tấn công lắng nghe trên cổng 1234 đã tạo trong payload.

Khi upload file phar lên thì máy tấn công nhận được kết quả như hình:
1654588204371.png

Như vậy là chúng ta đã thành công việc thiết lập demo và khai thác lỗ hổng rồi.

Nếu như các bạn có câu hỏi gì hay có những CVE nào mới thì có thể comment hoặc nhắn tin trực tiếp cho mình. Hoặc nếu như muốn trực tiếp phân tích chung với mình thì có thể hợp tác nhé.
Happy Hacking!!!
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Thích
Reactions: Vampires1607
Thẻ
cve-2021-43617 lab-setup laravel web security
Bên trên