Lapisan Aplikasi
Aplikasi web dan server web sangat penting bagi keberadaan online kami dan serangan yang diamati terhadapnya mencakup lebih dari 70% dari total serangan yang dicoba di Internet. Serangan ini mencoba mengubah situs web tepercaya menjadi situs berbahaya. Karena alasan ini, pengujian pena server web dan aplikasi web memainkan peran penting.
Pencetakan kaki dari server web
Mengapa kita perlu mempertimbangkan keamanan server web? Pasalnya, dengan pesatnya pertumbuhan industri e-commerce, target utama penyerang adalah web server. Untuk pentesting web server, kita harus tahu tentang web server, software hosting & sistem operasi beserta aplikasi yang sedang berjalan di atasnya. Mengumpulkan informasi semacam itu tentang web server disebut footprinting web server.
Di bagian selanjutnya, kita akan membahas metode berbeda untuk footprinting server web.
Metode untuk footprinting dari web server
Server web adalah perangkat lunak atau perangkat keras server yang didedikasikan untuk menangani permintaan dan melayani tanggapan. Ini adalah area utama bagi pentester untuk fokus saat melakukan pengujian penetrasi server web.
Sekarang mari kita bahas beberapa metode, diimplementasikan dengan Python, yang dapat dieksekusi untuk footprinting server web -
Menguji ketersediaan metode HTTP
Praktik yang sangat baik untuk penguji penetrasi adalah mulai dengan mendaftar berbagai metode HTTP yang tersedia. Berikut ini adalah skrip Python dengan bantuan yang dapat kita hubungkan ke server web target dan menghitung metode HTTP yang tersedia -
Untuk memulainya, kita perlu mengimpor perpustakaan permintaan -
import requests
Setelah mengimpor pustaka permintaan, buat larik metode HTTP, yang akan kita kirim. Kami akan menggunakan beberapa metode standar seperti 'GET', 'POST', 'PUT', 'DELETE', 'OPTIONS' dan metode non-standar 'TEST' untuk memeriksa bagaimana server web dapat menangani input yang tidak terduga.
method_list = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE','TEST']
Baris kode berikut adalah loop utama dari skrip, yang akan mengirim paket HTTP ke server web dan mencetak metode dan kode status.
for method in method_list:
req = requests.request(method, 'Enter the URL’)
print (method, req.status_code, req.reason)
Baris selanjutnya akan menguji kemungkinan cross site tracing (XST) dengan mengirimkan metode TRACE.
if method == 'TRACE' and 'TRACE / HTTP/1.1' in req.text:
print ('Cross Site Tracing(XST) is possible')
Setelah menjalankan script di atas untuk web server tertentu, kita akan mendapatkan 200 respon OK untuk metode tertentu yang diterima oleh web server. Kami akan mendapatkan respons 403 Forbidden jika server web secara eksplisit menolak metode tersebut. Setelah kami mengirimkan metode TRACE untuk pengujian cross site tracing (XST), kami akan mendapatkan405 Not Allowed tanggapan dari server web jika tidak kami akan mendapatkan pesan ‘Cross Site Tracing(XST) is possible’.
Pencetakan kaki dengan memeriksa header HTTP
Header HTTP ditemukan di permintaan dan tanggapan dari server web. Mereka juga membawa informasi yang sangat penting tentang server. Itulah mengapa penguji penetrasi selalu tertarik untuk mengurai informasi melalui header HTTP. Berikut ini adalah skrip Python untuk mendapatkan informasi tentang header server web -
Untuk memulai, mari kita impor pustaka permintaan -
import requests
Kami perlu mengirim permintaan GET ke server web. Baris kode berikut membuat permintaan GET sederhana melalui pustaka permintaan.
request = requests.get('enter the URL')
Selanjutnya, kami akan membuat daftar tajuk yang Anda butuhkan informasinya.
header_list = [
'Server', 'Date', 'Via', 'X-Powered-By', 'X-Country-Code', ‘Connection’, ‘Content-Length’]
Berikutnya adalah mencoba dan kecuali blok.
for header in header_list:
try:
result = request.header_list[header]
print ('%s: %s' % (header, result))
except Exception as err:
print ('%s: No Details Found' % header)
Setelah menjalankan skrip di atas untuk server web tertentu, kita akan mendapatkan informasi tentang header yang disediakan di daftar header. Jika tidak ada informasi untuk header tertentu maka akan muncul pesan 'No Details Found'. Anda juga dapat mempelajari lebih lanjut tentang bidang HTTP_header dari tautan -https://www.tutorialspoint.com/http/http_header_fields.htm.
Menguji konfigurasi server web yang tidak aman
Kita dapat menggunakan informasi header HTTP untuk menguji konfigurasi server web yang tidak aman. Dalam skrip Python berikut, kita akan menggunakan blok try / kecuali untuk menguji header server web yang tidak aman untuk jumlah URL yang disimpan dalam nama file tekswebsites.txt -
import requests
urls = open("websites.txt", "r")
for url in urls:
url = url.strip()
req = requests.get(url)
print (url, 'report:')
try:
protection_xss = req.headers['X-XSS-Protection']
if protection_xss != '1; mode = block':
print ('X-XSS-Protection not set properly, it may be possible:', protection_xss)
except:
print ('X-XSS-Protection not set, it may be possible')
try:
options_content_type = req.headers['X-Content-Type-Options']
if options_content_type != 'nosniff':
print ('X-Content-Type-Options not set properly:', options_content_type)
except:
print ('X-Content-Type-Options not set')
try:
transport_security = req.headers['Strict-Transport-Security']
except:
print ('HSTS header not set properly, Man in the middle attacks is possible')
try:
content_security = req.headers['Content-Security-Policy']
print ('Content-Security-Policy set:', content_security)
except:
print ('Content-Security-Policy missing')
Footprinting dari Aplikasi Web
Di bagian sebelumnya, kita membahas footprinting dari server web. Serupa dengan itu, footprinting dari aplikasi web juga dianggap penting dari sudut pandang penguji penetrasi.
Di bagian selanjutnya, kita akan belajar tentang metode berbeda untuk footprinting aplikasi web.
Metode untuk Footprinting dari Aplikasi Web
Aplikasi web adalah program klien-server, yang dijalankan oleh klien di server web. Ini adalah area kunci lain yang menjadi fokus pentester saat melakukan pengujian penetrasi aplikasi web.
Sekarang mari kita bahas metode berbeda, diimplementasikan dengan Python, yang dapat digunakan untuk footprinting aplikasi web -
Mengumpulkan informasi menggunakan parser BeautifulSoup
Misalkan kita ingin mengumpulkan semua hyperlink dari halaman web; kita dapat menggunakan pengurai bernama BeautifulSoup. Parser adalah pustaka Python untuk menarik data dari file HTML dan XML. Ini bisa digunakan denganurlib karena memerlukan input (dokumen atau url) untuk membuat objek sup dan tidak dapat mengambil halaman web dengan sendirinya.
Untuk memulainya, mari kita impor paket yang diperlukan. Kami akan mengimpor urlib danBeautifulSoup. Ingat sebelum mengimpor BeautifulSoup, kita perlu menginstalnya.
import urllib
from bs4 import BeautifulSoup
Skrip Python yang diberikan di bawah ini akan mengumpulkan judul halaman web dan hyperlink -
Sekarang kita membutuhkan variabel yang dapat menyimpan URL website. Di sini, kami akan menggunakan variabel bernama 'url'. Kami juga akan menggunakanpage.read() fungsi yang dapat menyimpan halaman web dan menetapkan halaman web ke variabel html_page.
url = raw_input("Enter the URL ")
page = urllib.urlopen(url)
html_page = page.read()
Itu html_page akan diberikan sebagai input untuk membuat objek sop.
soup_object = BeautifulSoup(html_page)
Mengikuti dua baris akan mencetak nama judul dengan tag dan tanpa tag.
print soup_object.title
print soup_object.title.text
Baris kode yang ditunjukkan di bawah ini akan menyimpan semua hyperlink.
for link in soup_object.find_all('a'):
print(link.get('href'))
Perebutan spanduk
Spanduk seperti pesan teks yang berisi informasi tentang server dan pengambilan spanduk adalah proses mengambil informasi yang disediakan oleh spanduk itu sendiri. Sekarang, kita perlu tahu bagaimana spanduk ini dibuat. Ini dihasilkan oleh header dari paket yang dikirim. Dan saat klien mencoba menyambung ke port, server merespons karena header berisi informasi tentang server.
Skrip Python berikut membantu mengambil spanduk menggunakan pemrograman soket -
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
targethost = str(raw_input("Enter the host name: "))
targetport = int(raw_input("Enter Port: "))
s.connect((targethost,targetport))
def garb(s:)
try:
s.send('GET HTTP/1.1 \r\n')
ret = sock.recv(1024)
print ('[+]' + str(ret))
return
except Exception as error:
print ('[-]' Not information grabbed:' + str(error))
return
Setelah menjalankan skrip di atas, kita akan mendapatkan informasi yang serupa tentang header seperti yang kita dapatkan dari skrip Python tentang footprinting header HTTP di bagian sebelumnya.