# Exploit Public Facing Application Đây là quá trình lợi dụng tấn công vào các điểm yếu của máy tính hoặc các ứng dụng có kết nối internet bằng cách sử dụng các phần mềm, script để gây ra các hành vi không đúng như đã dự tính của các máy tính hoặc ứng dụng đó. Các điểm yếu này có thể là lỗi của ứng dụng hoặc lỗi trong quá trình config. Các đối tượng để tấn công Exploit Public-Facing Application thông thường là website của mục tiêu. Ngoài ra chúng còn có thể bao gồm các dịch vụ khác như CSDL SQL, các dịch vụ như SSH, SMB, giao thức quản lý các thiết bị mạng SNMP, hoặc có thể là bất kì ứng dụng nào khác có thể truy cập Internet như Mobile App, Desktop App,... Sau đây là cách Exploit một số các dịch vụ trên để có thể lấy được foothold trong mạng của mục tiêu ### Web-Application Đây là Public-Facing Application phổ biến nhất, hầu hết các tổ chức dù lớn hay nhỏ đều có một website riêng cho mình dùng để quảng cáo hoặc đăng tin tức. Các web application có thể bị exploit để chiếm được một foothold trong mạng mục tiêu. Thông thường, Web sẽ nằm ở port 80 và 443 trên server. ``` PORT STATE SERVICE 80/tcp open http 443/tcp open ssl/https ``` ##### Recon: ###### [+] Technologies Để có thể tấn công được một trang web, ta cần phải biết được các công nghệ mà website sử dụng là gì, từ đó có thể tìm các exploit sẵn có hoặc tự viết exploit để khai thác. Có rất nhiều tool có thể phục vụ việc Recon technologies, chúng có thể ở nhiều dạng khác nhau như commandline tool, website, extension. Về nguyên lý hoạt động cũng khá giống nhau, đó là phân tích các response header, phân tích source code html, cookie,... + whatweb: ![image-20220726150031214](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726150031214.png) + wappalyzer: ![image-20220726150412298](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726150412298.png) Ngoài ra ta cũng có thể fuzz bằng tay để có thể biết được công nghệ sử dụng trong trang web, một cách rất phổ biến đó chính là trigger lỗi, Các thông báo lỗi có thể đôi khi trả về các thông tin rất có giá trị ###### [+] Web Application Firewall Có rất nhiều website sử dụng WAF, các WAF này có tác dụng ngăn chặn các payload tấn công, hoặc giảm thiểu thiệt hại mà các cuộc tấn công gây ra. Ví dụ nó sẽ block sao cho ta có thực hiện được RCE nhưng chỉ chạy được một số command đơn giản. Nhưng chúng cũng không thể nào hoàn toàn ngăn chặn được được. Do đó ta phải tìm ra loại WAF mà website đang sử dụng, từ đó có thể tìm ra các payload bypass được filter. Có một tool rất chất lượng có thể làm được điều này đó là https://github.com/EnableSecurity/wafw00f.git Cách dùng: ``` wafw00f https://example.org ``` Nguyên lý hoạt động của tool này như sau: ![image-20220726150934713](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726150934713.png) ###### [+] Hidden Content + File/Đường dẫn ẩn: Bằng một cách nào đấy mà các file và đường dẫn mà admin của website không muốn ta nhìn thấy lại nằm trên server và có thể bị truy cập đến. Các file này có thể không có gì ý nghĩa, cũng có thể chứa các thông tin quan trọng như secretkey, chứa source code hoặc một tính năng ẩn nào đó mà có thể được sử dụng để tấn công. Do đó việc ta có thể đào ra được các file/ đường dẫn này là rất quan trọng. Thông thường việc tìm các file này sẽ thông qua việc Brute force bằng wordlist. Có rất nhiều tool có thể được sử dụng để làm điều này, trong đó có một tool rất phổ biến là Dirsearch. Cách dùng: ``` dirsearch -u http://192.168.77.132 -e * ``` ![image-20220726153939797](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726153939797.png) Như ta thấy thì lúc này có rất nhiều đường dẫn đực hiện ra + Tham số ẩn: Trong quá trình tấn công một website, đôi khi ta sẽ gặp những file hay route nào đấy mà không biết nó chứa tham số gì. Nếu ta có thể biết được các tham số này thì sẽ giúp ích cho quá trình tấn công rất nhiều, bởi đôi khi nó là một tính năng nào đấy rất quan trọng, nhưng dev quên chưa authen nó,... Có một tool rất hay có thể làm được điều này đó là arjun. Cách dùng: ``` arjun -u <url> ``` ![image-20220726155952355](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726155952355.png) ###### [+] Subdomain ### SQL ### SSH SSH hay còn gọi là Secure Shell. Đây là một giao thức nằm ở tần Application được sử dụng để đăng nhập và truyền file từ xa. Khác với các giao thức cũ như ftp, telnet dùng plain text để truyền dữ liệu. SSH sử dụng một thuật toán mã hóa riêng rất an toàn, có thể nói là không thể decrypt được, từ đó dẫn đến dữ liệu được bảo toàn, chống các cuộc tấn công man-in-the-middle. Theo mặc định, SSH nằm ở PORT 22. ``` 22/tcp open ssh syn-ack ``` Và PORT này cũng có thể được config bằng cách thay đổi file /etc/ssh/sshd_config.![image-20220726093901925](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726093901925.png) Để có thể connect vào SSH của mục tiêu, điều đầu tiên ta cần phải biết đó chính là IP. Sau đó ta cần phải tìm xem ssh của mục tiêu có open không, và nằm ở PORT nào, điều này có thể được thực hiện bằng cách sử dụng command nmap và option -sV, option này có tính năng thăm dò các cổng đang mở để tìm ra service và version của nó. ``` nmap -sV 192.168.1.132 ``` ![image-20220726094237449](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726094237449.png) Sau khi scan xong ta có thể thấy ssh của mục tiêu nằm ở PORT 2222. Ta có thể connect đến bằng cách dùng command sau: ``` ssh root@192.168.77.132 -p 2222 ``` Để có thể SSH thành công, thông thường sẽ cần có 2 thông tin là username và password của user đó. Ngoài ra còn có thể SSH bằng cách dùng public key. Nhưng việc attack phương pháp này không khả thi cho lắm. ##### Các kĩ thuật phổ biến trong tấn công SSH: ###### [+] Username Enumeration : Có nhiều kĩ thuật có thể được dùng để lấy thông tin về Username. Có thể dựa vào các dịch vụ ở các cổng khác, hoặc có thể sử dụng một hình thức tấn công nhất định, ví dụ như một số version của OpenSSH có thể leak được username dựa vào timing attack. + nmap(port 445) ``` nmap –script smb-enum-users.nse –p 445 192.168.77.132 ``` + metasploit: ``` msf> use scanner/ssh/ssh_enumusers ``` + finger(port 79) ``` finger @192.168.77.132 ``` ###### [+] BruteForce Password: Có nhiều tool có thể được dùng để brute force password của một user trong SSH. Trong đó nổi tiếng nhất có thể kể đến là hydra và medusa. + Hydra: Cách sử dụng như sau: ``` hydra -l root -P password.txt -t 63 192.168.77.132 ssh hydra -l root -P password.txt -e s ssh://192.168.77.132 ``` ![image-20220726142540973](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726142540973.png) Sau khi chạy xong ta có thể thấy password của root là admin. + medusa: Cách dùng ``` medusa -h 192.168.77.132 -u root -P password.txt -e s -M ssh ``` ![image-20220726142743903](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726142743903.png) ###### [+] Default Credentials Với mỗi thiết bị hay loại máy chủ khác nhau sẽ có một thông tin đăng nhập mặc định khác nhau, và ta có thể lợi dụng điều này để có thể connect đến SSH của mục tiêu. Một số Default Credentials trong một số thiết bị:![image-20220726143050545](C:\Users\Vanir\AppData\Roaming\Typora\typora-user-images\image-20220726143050545.png) ###### [+] Exploit Ta sẽ search các lổ hổng có sẵn với version của server SSH sau đó exploit chúng. Ví dụ LibSSH RCE - [CVE-2018-10933](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-10933). Trong khi dùng nmap để scan service của mục tiêu, giả sử ta thấy một thông báo như sau: ``` 22/tcp open ssh libssh 0.8.3 (protocol 2.0) ``` Sử dụng searchsploit để tìm version lỗi ``` searchsploit libssh ............................. LibSSH 0.7.6 / 0.8.4 - Unauthorized Access | exploits/linux/remote/46307.py libSSH - Authentication Bypass | exploits/linux/remote/45638.py ............................. ``` So we can use the exploit to execute a command on the target in order to confirm it is working. ``` $ python 46307.py 192.168.77.132 22 id uid=0(root) gid=0(root) groups=0(root) ``` ### SMB ### RDP