Quá trình tìm kiếm lỗ hổng bảo mật

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin:Bộ khung kiểm thử bảo mật tự động tích hợp cơ chế giăng bẫy và chia sẻ thông tin tình báo mối đe dọa (Trang 79 - 83)

KIỂM THỬ XÂM NHẬP

T- Pof?| là một nền tang honeypof| đa chức năng và linh hoạt, giúp mô phỏng

5.1 Hiện thực hóa quá trình

5.1.3. Quá trình tìm kiếm lỗ hổng bảo mật

Sau khi job Host Control đã hoàn thành thực thi, job Web Control được khởi chạy.

Theo mô tả trong mục|4.2} khi job Web Control được khởi chạy, chương trình sẽ

tiến hành chờ cho tới khi tat cả các job được tao ra từ job Host Control được hoàn thành theo luồng sau:

© Lay các đối tượng job Host Control từ hàng đợi Redis.

© Lấy kết quả trả về từ các job Host Control, từ đây lay được các đối tượng

subHost_jobs từ hàng đợi Redis.

# get jobs from host control job

redis =Redis(host=self.redis_host, port=self.redis_port)

q = Queue(connection=redis)

hostsControl_job =q.fetch_job(self.jobs_id)

subHost_jobid =hostsControl_job.result

subHost_jobs =[q.fetch_job(id) for id in subHost_jobid]

* Chờ tới khi tat cả các job subHost_jobs được hoàn thành.

“https: //github.com/s0md3v/Smap

70

Chương 5. Hiện thực và Thực nghiệm

e Tiếp theo, chương trình tổng hợp dữ liệu trả về từ các job subHost_jobs và

lưu trữ chúng xuống cơ sở đữ liệu.

Sau khi đã lưu dữ liệu bao gồm cổng va dịch vụ đang hoạt động của hệ thống xuống cơ sở dữ liệu, chương trình thực hiện:

¢ Chương trình truy vấn cơ sở đữ liệu để lay các dữ liệu bao gồm: tên miền

con và các địa chỉ IP ứng với nó, địa chỉ IP và các cổng đang mở.

° Dựa trên dữ liệu về địa chỉ IP và các cổng đang mở, chương trình sử dụng

công cụ HTTPX để xác định xem cổng đó có phải đang chạy một ứng dụng web hay không, và nếu có, liệu ứng dụng đó sử dụng giao thức HTTPS hay

HTTP

Bây giờ, chương trình đã có danh sách các đường dẫn URL, nó tiến hành tạo ra 5 job mới với mỗi đường dẫn URL với mục đích tìm kiếm các lỗ hổng bảo mật (như

Hình :

1. Nuclei: Tại đây, chương trình thực thi công cu nuclei, ghi kết quả vào một

tệp tạm rồi đọc nó và trả về kết quả:

def run(self) : print("Nuclei scan: ", self.urls)

outfile =f£"TEMPLATES-FILE"

cmd =f"nuclei -silent -u {self.urls} -t TEMPLATES-PATH -no-color -je

{outfile}"

proc =subprocess.Popen(

shlex.split(cmd),

stderr=subprocess.DEVNULL,

stdout=subprocess.PIPE)

try:

stdout, stderr =proc.communicate()

except Exception as e:

proc.kill() raise (e)

if os.path.isfile(outfile):

return json.load(open(outfile, "r")) return []

71

Chương 5. Hiện thực và Thực nghiệm

2. Các job SQli, XSS, OS-Injection, LFI: Các job này có chung luồng hoạt động

như Hình|4.5

e Chương trình tìm các đường dẫn bằng cách sử dụng công cụ dirsearch

và gospider:

def run(self):

if exists(f"CACHE-FILE"):

return 1

cmd =f"python3 Modules/Webs/dirsearch/dirsearch.py -u {self.url}

--format plain -o CACHE-FILE -i 200"

process =subprocess.Popen(cmd, shell=True, stdout=open(os.devnull,

tự)

process.wait ()

def run(self):

cmd =f"~/go/bin/gospider -s {self.target_urls} -o .cache/web/

-c 10 -d 3 -q"

print (cmd) process =subprocess.Popen(cmd,

shell=True,

stdout=subprocess.PIPE) process.wait()

® Sau khi có các thư mục trên trang web, tiến hành tìm kiếm các đối số

đầu vào bằng cách phân tích các thẻ form và thẻ <a>:

forms =sourp.findAl1('form')

for form in forms:

temp ={}

temp["ur1"] =url if (str(form.get ("action") )=="#" or

str(form.get ("action") )=="" or str (form. get ("action") )=="None")

else

urljoin(url, str(form.get("action")))

if not temp["url"].startswith("http"):

temp["url"] =self.nomal_url(temp["url"] ) temp["method"] =form.get("method") and

form.get ("method") or "GET"

72

Chương 5. Hiện thực và Thực nghiệm

temp["param_name"] =[]

inputs =form.findAll("input") button =form.find("button")

if button:

temp ["param_name"] .append(button. get ("name") ) for i in range(len(inputs)):

temp ["param_name "] .append (inputs [i] .get ("name") ) temp["param_name"] =[i for i in temp["param_name"] if i !=None] temp ["param_name"] .sort ()

data.append(str (temp) )

def parse_link(self,sourp): # parse link in tag a

links =sourp.findAl1("a"

path = []

for link in links:

1 =link.get("href")

if 1:

if "=" not in l1:

continue

if not 1.startswith("http"):

if 1.startswith("mailto: "):

continue

1 = parse.urlparse(self.url).scheme +

"://"+parse.urlparse(self.url).netloc +

"/" +1

1 =self.nomal_ur1(1) path.append (1)

return self.parse_href (path)

def parse_href (self,data) : final =[]

for i in data:

href ={}

u =i.split("?") [0]

method ="get"

params =i.split("?") [1] .split("&") param =[j.split("=")[0] for j in params]

href ["url"] =u href ["method"] =method href ["param_name"] =param

73

Chương 5. Hiện thực và Thực nghiệm

final.append(str (href))

return final

® Sau khi đã có các thư mục và các đối số đầu vào tương ứng, chương

trình sẽ kiểm tra các lỗ hổng bảo mật (mỗi job kiểm tra một loại lỗ

hổng bảo mật) bằng cách lần lượt đưa các tải trọng vào các đối số đầu vào và quan sát hành vi của máy chủ để xác định xem máy chủ có ton tại lỗ hổng hay không. Ví du, job LEI có nhiệm vụ tìm kiếm các 16 hổng LEI, chương trình đưa vào các trọng tải với mong muốn đọc tệp

/etc/passwd:

self.payload =[

h,./../../../../../../../../../../../../../etc/passwd",

"/proc/self/root/etc/passwd",

"/,./.,./../../../../../../etc/passwd"]

Với hành vi đọc tệp của lỗ hổng LFI, để xác định xem máy chủ có chứ lỗ hổng LFI hay không, chương trình sẽ kiểm tra xem phản hồi của máy

chủ có chứa chuỗi "root :x:0:0:root" hay không.

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin:Bộ khung kiểm thử bảo mật tự động tích hợp cơ chế giăng bẫy và chia sẻ thông tin tình báo mối đe dọa (Trang 79 - 83)

Tải bản đầy đủ (PDF)

(103 trang)