• s in chuỗi được chỉ tới bởi tham số thứ nhất• n ghi vào ô nhớ có địa chỉ xác định bởi tham số thứ nhất số lượng ký tự đã in 4 byte... 2 Race Condition 27 • Xảy ra nhiều tiến trình tiể
Trang 12
Nguyễn Hải Long | kyo1412@gmail.com
Penetration with Backtrack 5 R3
Nguyễn Phương Trường Anh | truonganhnl@gmail.com
Trang 2 Các phương thức tấn công phổ biến:
ARP Spoofing (Ettercap)
Software Exploit (Windows and Linux)
Web Application Attack (SQLi, XSS, Local )
Nội dung chính
Trang 32
Nguyễn Hải Long
Nguyễn Phương Trường Anh
Backtrack
Giới thiệu
3
Trang 42
Trang 52
• Kinh nghiệm 5 năm làm việc trong lĩnh vực
bảo mật và an toàn thông tin
• Chuyên môn chính Pentest, tư vấn và triển
khai ISO/IEC 27001
Nguyễn Phương Trường Anh
5
Trang 62
Giới thiệu
Trang 72
Backtrack là một bản phân phối linux được
tích hợp các công cụ, driver hỗ trợ việc
pentest hệ thống.
Live DVD or Live USB Flash
Phát triển hợp nhất từ 3 công cụ nổi tiếng
Whoppix, IWHAX, và Auditor
Phiên bản mới nhất Backtrack 5 R3
Backtrack
7
Trang 82
Information Gathering: Nmap, traceroute, sqlmap
…
Vulnerability assessment: Nessus, OpenVAS …
Exploitation Tool: Metasploit, Aircrack-ng …
Privilege Escalation: John the Ripper, Ophcrack, …
Maintenance Access
Reverse Engineering: gdb, ollydbg, ida …
Forensic: sleuthkit, chkrootkit, …
Các công cụ sẵn có trên Backtrack
Trang 92
Sniffer
Trang 102
ARP Spoofing
Trang 132
Trình biên dịch và cấu trúc một hàm
13
Trang 182
Truyền dữ liệu vào chương trình
Thay đổi luồng thực thi
Quay về thư viện chuẩn
…
Buffer Overflows (tt)
Trang 20– printf ( const char * format , )
Nếu gọi printf ( "Hello" );
Trang 212
Format Strings (tt)
Dấu % có ý nghĩa đặc biệt
% Đánh dấu sự bắt đầu của một yêu cầu định
dạng
Yêu cầu định dạng tận cùng bởi ký tự định
dạng
Trang 22• s in chuỗi được chỉ tới bởi tham số thứ nhất
• n ghi vào ô nhớ có địa chỉ xác định bởi tham số
thứ nhất số lượng ký tự đã in (4 byte)
Trang 272
Race Condition
27
• Xảy ra nhiều tiến trình (tiểu trình) truy cập và
sửa đổi cùng một dữ liệu vào cùng một lúc,
Kết quả phụ thuộc vào thứ tự truy cập
Trang 282
Race Condition (tt)
• Để tận dụng lỗi thì người ta chạy thật nhiều
tiến trình ngoài để “đua” với tiến trình bị lỗi
Trang 292
Race Condition (tt)
• Giữa hàm access() và fopen() có một
khoảng thời gian nhỏ
• Hệ điều hành có thể sẽ chuyển qua tiến trình
Trang 302
Race Condition (tt)
Trang 312
Race Condition (tt)
• access() và fopen() nhận tên file
• Cùng một tên nhưng có thể là 2 file khác nhau
• Symlink
• Do đó ta có thể tận dụng bằng cách:
• Chỉ symlink đến tập tin có thể đọc được
• Chỉ symlink đến tập tin không có quyền đọc nhưng
chương trình bị lỗi có thể đọc được
• Lập lại 2 việc này liên tục
• Song song đó, ta sẽ chạy chương trình bị lỗi và truyền tên
symlink vào
Trang 322
Race Condition (tt)
• Điều kiện đua thường gặp ở các ứng dụng xử
lý file, ứng dụng mạng, database, ứng dụng đa tiểu trình, ứng dụng web
• Ứng dụng web đặc biệt dễ mắc phải vì vừa đa
tiến(tiểu) trình, vừa truy cập database, vừa
truy cập file
Trang 342
• Số nguyên trong máy tính được biểu diễn
• Ở dạng bù 2
• Có dấu hoặc không dấu
• Giá trị âm lớn nhất cũng có thể là giá trị dương
cao nhất
• Số có dấu hiệu bị lệch giá trị âm (-128 → 127)
• Hiện tượng quay vòng (127 +1 = -128, 255+1=0)
• Kích thước kiểu dữ liệu ảnh hưởng quan trọng
Integer Overflow
Trang 352
Integer Overflow (tt)
• Tràn số nguyên xảy ra khi giá trị số nằm ngoài phạm
vi biểu diễn của kiểu dữ liệu
• Xét ví dụ:
• atoi() trả về số nguyên có dấu
• Tham số thứ 2 của fget() là kiểu số nguyên
Trang 36• Khi thực hiện phép chia sẽ ra 2,147,483,648,
nhưng 2,147,483,648 vượt quá phạm vi biểu
int i = - 2,147,483,648 ;
int j = - 1 ;
printf ( "%d \n" , i / j );
Trang 382
• Đây là một trường hợp đặc biệt của lỗi tràn bộ
đệm, trong đó chỉ duy nhất chỉ tràn một byte
Trang 392
Off by one (tt)
• Giả sử argv[1] có độ dài 8 ký tự
• Khi vào vuln() thì biến buff chứa 8 ký tự này
• Ký tự kết thúc chuỗi sẽ lem ra ngoài
• Ký tự \x00 sẽ bị lem vào EBP cũ
• Trong phần kết thúc của hàm vuln() : POP EBP
=> sẽ khiến EBP mang giá trị XXXXXX00
• Trong phần kết thúc của hàm main() : MOV ESP,
EBP => sẽ khiễn ESP mang giá trị XXXXXX00
Trang 402
Off by one (tt)
• Sau đó POP EBP sẽ làm ESP tăng thêm 4
• Cuối cùng RET sẽ lấy giá trị hiện tại trên đỉnh ngăn
xếp để quay về → lỗi xảy ra trong hàm vuln()
nhưng tận dụng trong hàm main()
• Hai điểm cần lưu ý:
• Giá trị mới của EBP sẽ nhỏ hơn giá trị EBP đã lưu
• Và do đó có thể chỉ tới phần ngăn xếp trong vuln()
• Giả sử biến buff có địa chỉ tận cùng là 00 → cơ hội
EBP chỉ tới biến buff sẽ cao → địa chỉ trở về của
Trang 412
Off by one (tt)
Trang 422
Demo Buffer Overflow
Trang 442
Boolean based blind
Time based blind
Trang 452
Demo SQL Injection
45
Trang 472
Demo XSS
47
Trang 482
Các tài liệu tham khảo
• Nghệ thuật tận dụng lỗi phần mềm – Nguyễn
Thành Nam
• Offensive Security - Penetration Testing with
BackTrack (Lab Guide)
2
Thanks & Question
49