ݺߣ

ݺߣShare a Scribd company logo
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




            1




                         2




Penetration with Backtrack 5 R3
            Nguyễn Hải Long | kyo1412@gmail.com
 Nguyễn Phương Trường Anh | truonganhnl@gmail.com
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



               Nội dung chính
               2
 Giới thiệu
   Diễn giả
                           2
   Backtrack
 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 ...)



                                                              2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




               3
                     Giới thiệu
 Diễn giả
   Nguyễn Hải Long
                   2
   Nguyễn Phương Trường Anh
 Backtrack




                                                              3
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!

                 About me
           4




                       2




                                                          4
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



  Nguyễn Phương Trường Anh
       5

• 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
                   2
• Chuyên môn chính Pentest, tư vấn và triển
  khai ISO/IEC 27001




                                                              5
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




           6
                 Giới thiệu

                       2




                                                          6
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




               7
                    Backtrack
 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
                     2
  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


                                                              7
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Các công cụ sẵn có trên Backtrack
                8

 Information Gathering: Nmap, traceroute, sqlmap
  …
                        2
 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, …


                                                               8
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




           9
                    Sniffer

                       2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



            ARP Spoofing
           10




                       2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!


             ARP Spoofing (tt)
 Sniff     11

 Netcut/Anti-Netcut
 Man in the middle attack
                     2




                                                              11
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Software Exploit
                12

   Buffer Overflows
   Format Strings
                             2
   Race Condition
   Integer Overflow
   Off by one




                                                                12
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!

     Trình biên dịch và cấu trúc một hàm
           13




                       2




                                                          13
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



         Trình biên dịch và cấu trúc một hàm
               14
int func ( int a , int b)
{
    int c ;
    char d [7] ;         2
    short e ;
    return 0 ;
}




                                                              14
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



             Buffer Overflows
             15

Tràn bộ đệm xảy ra khi dữ liệu xử lý dài quá giới
  hạn vùng nhớ chứa nó.
                           2




                                                              15
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



          Buffer Overflows (tt)
            16

#include <stdio.h>
int main ( )
{
                        2
    int cookie;
    char buf[16];
    printf("&buf: %p, &cookie: %pn", buf, &cookie);
    gets(buf);
    if (cookie == 0x41424344)
    {
        printf ( "You win !  n" ) ;
    }
}




                                                              16
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Buffer Overflows (tt)
             17
Thay đổi giá trị biến nội bộ


                            2




                                                               17
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Buffer Overflows (tt)
             18

   Truyền dữ liệu vào chương trình
   Thay đổi luồng thực thi
                     2
   Quay về thư viện chuẩn
   …




                                                               18
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Software Exploit
                19

   Buffer Overflows
   Format Strings
                             2
   Race Condition
   Integer Overflow
   Off by one




                                                                19
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                  Format Strings
                  20
 Là lỗi khi dữ chuỗi dữ liệu nhập vào được đánh giá là tập
  lệnh của chương trình.
 Hàm printf()có dạng:     2
   –   printf(const char *format, ...)

Nếu gọi printf("Hello");
   –   Hello
Nếu gọi printf("1%");
   –   1%
Nếu gọi printf("1%%");
   –   1%


                                                                 20
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



            Format Strings (tt)
             21

 Dấu % có ý nghĩa đặc biệt
 % Đánh dấu sự bắt 2 của một yêu cầu định
                    đầu
  dạng
 Yêu cầu định dạng tận cùng bởi ký tự định
  dạng
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



            Format Strings (tt)
               22
• % in ra ký tự %
• c in tham số thứ nhất của một ký tự
                      2
• x in tham số thứ nhất ở dạng thập lục
• X in tham số thứ nhất ở dạng THẬP LỤC
• 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)
• hn giống với n nhưng chỉ in 2 byte
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



              Format Strings (tt)
               23

#include <stdio.h>
int main(int argc, char **argv )
{                         2
    char buffer[512];
    int cookie = 0 ;
    printf("&cookie: %pn", &cookie);
    gets( buffer);
    printf("cookie = %.8Xn",cookie);
    printf(buffer);
    printf("n cookie = %.8Xn", cookie);
    return 0 ;
}
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Format Strings (tt)
            24

• Nhập vào abcdef
 • abcdef
                          2
• Nhập vào %x
 • 0
• Nhập vào %x%x%x%x
 • 0 0 0 6
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



              Format Strings (tt)
               25

• Để gán 0x64 vào biến cookie
  •   [địa chỉ cookie]%x%x%x%x%x%x%x%x%x[…]%n
                             2
• [địa chỉ cookie] in ra 4 byte x54xF8xFFxBF
• 9 %x in ra 21 byte 0006b7ead8e0fffff5100
• Để in ra tổng cộng 100 ký tự ta cần thêm 100-21-
  4=75 ký tự
• Vậy […] sẽ là 75 ký tự
 python -c 'print "x54xF8xFFxBF%x%x%x%x%x%x%x%x%x" +
 "a"*75 + "%n"' | ./fmt
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Software Exploit
                26

   Buffer Overflows
   Format Strings
                             2
   Race Condition
   Integer Overflow
   Off by one




                                                                26
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



               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 2 thứ tự truy cập
                     vào




                                                              27
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



            Race Condition (tt)
             28

• Để 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
                      2
  → Chữ “đua” (race)
• Còn được gọi là TOC/TOU
• Xét ví dụ:
   if(access(argv[1], R_OK)==0)
       {
           f = fopen(arvg[1], "r");
       }
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Race Condition (tt)
            29

• Giữa hàm access() và fopen() có một
  khoảng thời gian nhỏ
                           2
     CALL access
     CMP EXA, 0
     JNZ ...
     PUSH ...
     PUSH ...
     CALL fopen

• Hệ điều hành có thể sẽ chuyển qua tiến trình
  khác ở giữa các lệnh đó
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



       Race Condition (tt)
        30




                       2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



             Race Condition (tt)
                 31
• 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                2

• 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Race Condition (tt)
            32

• Đ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
                      2
  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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Software Exploit
                33

   Buffer Overflows
   Format Strings
                             2
   Race Condition
   Integer Overflow
   Off by one




                                                                33
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



               Integer Overflow
                34

• Số nguyên trong máy tính được biểu diễn
  •   Ở dạng bù 2
                          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
  (255 kiểu short là 1 kiểu char)

                                                                34
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



           Integer Overflow (tt)
             35

• 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
                        2
• Xét ví dụ:
     int i;
     i = atoi(argv[1]);
     if(i<0x1000) fgets(buf, i, stdin);

• atoi() trả về số nguyên có dấu
• Tham số thứ 2 của fget() là kiểu số nguyên
  không dấu.
• Nếu arvg[1] là số âm thì sẽ gây tràn
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



          Integer Overflow (tt)
            36

• Xét ví dụ:
     int i = -2,147,483,648;
     int j = -1;        2
     printf("%d n", i/j);

• i là số âm nhất
• j là -1
• 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
  diễn (2,147,483,647) →crash
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Software Exploit
                37

   Buffer Overflows
   Format Strings
                             2
   Race Condition
   Integer Overflow
   Off by one




                                                                37
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




                38
                     Off by one
• Đâ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
                            2
• Xét ví dụ:
     void vuln(char *arg)
     {
         char buff[8];
         strcpy(buff,arg);
     }
     void main (int argc, char **argv)
     {
         vuln(argv[1]);
     }

                                                               38
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                Off by one (tt)
               39

• 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
                       2
• 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                    Off by one (tt)
                   40
• 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()
                      2
  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
  hàm main() sẽ là địa chỉ của biến buff+4
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



            Off by one (tt)
           41




                       2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



    Demo Buffer Overflow
      42




                       2




                                                          42
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




                43
                     Web Attack
   SQL Injection
   Cross-site scripting(XSS)
                       2
   Local and Remote file inclusion
   Web proxy




                                                               43
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



                 SQL Injection
                44

   Boolean based blind
   Time based blind 2
   Error based
   UNION query
   Stacked queries
   Out of band



                                                               44
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



       Demo SQL Injection
        45




                       2




                                                          45
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



    Cross-site scripting(XSS)
        46

 Reflected
 Persistent              2
 DOM-based




                                                             46
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!




           47
                Demo XSS

                       2




                                                          47
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



        Các tài liệu tham khảo
           48

• Nghệ thuật tận dụng lỗi phần mềm – Nguyễn
  Thành Nam
                    2
• Offensive Security - Penetration Testing with
  BackTrack (Lab Guide)
• Google
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!



        Thanks & Question
         49




                       2




                                                          49

More Related Content

SBC 2012 - Penetration Testting với Backtrack 5 (Nguyễn Phương Trường Anh + Nguyễn Hải Long)

  • 1. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 1 2 Penetration with Backtrack 5 R3 Nguyễn Hải Long | kyo1412@gmail.com Nguyễn Phương Trường Anh | truonganhnl@gmail.com
  • 2. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Nội dung chính 2  Giới thiệu  Diễn giả 2  Backtrack  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 ...) 2
  • 3. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 3 Giới thiệu  Diễn giả  Nguyễn Hải Long 2  Nguyễn Phương Trường Anh  Backtrack 3
  • 4. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! About me 4 2 4
  • 5. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Nguyễn Phương Trường Anh 5 • 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 2 • Chuyên môn chính Pentest, tư vấn và triển khai ISO/IEC 27001 5
  • 6. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 6 Giới thiệu 2 6
  • 7. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 7 Backtrack  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 2 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 7
  • 8. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Các công cụ sẵn có trên Backtrack 8  Information Gathering: Nmap, traceroute, sqlmap … 2  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, … 8
  • 9. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 9 Sniffer 2
  • 10. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! ARP Spoofing 10 2
  • 11. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! ARP Spoofing (tt)  Sniff 11  Netcut/Anti-Netcut  Man in the middle attack 2 11
  • 12. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Software Exploit 12  Buffer Overflows  Format Strings 2  Race Condition  Integer Overflow  Off by one 12
  • 13. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Trình biên dịch và cấu trúc một hàm 13 2 13
  • 14. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Trình biên dịch và cấu trúc một hàm 14 int func ( int a , int b) { int c ; char d [7] ; 2 short e ; return 0 ; } 14
  • 15. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Buffer Overflows 15 Tràn bộ đệm xảy ra khi dữ liệu xử lý dài quá giới hạn vùng nhớ chứa nó. 2 15
  • 16. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Buffer Overflows (tt) 16 #include <stdio.h> int main ( ) { 2 int cookie; char buf[16]; printf("&buf: %p, &cookie: %pn", buf, &cookie); gets(buf); if (cookie == 0x41424344) { printf ( "You win ! n" ) ; } } 16
  • 17. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Buffer Overflows (tt) 17 Thay đổi giá trị biến nội bộ 2 17
  • 18. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Buffer Overflows (tt) 18  Truyền dữ liệu vào chương trình  Thay đổi luồng thực thi 2  Quay về thư viện chuẩn  … 18
  • 19. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Software Exploit 19  Buffer Overflows  Format Strings 2  Race Condition  Integer Overflow  Off by one 19
  • 20. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings 20  Là lỗi khi dữ chuỗi dữ liệu nhập vào được đánh giá là tập lệnh của chương trình.  Hàm printf()có dạng: 2 – printf(const char *format, ...) Nếu gọi printf("Hello"); – Hello Nếu gọi printf("1%"); – 1% Nếu gọi printf("1%%"); – 1% 20
  • 21. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings (tt) 21  Dấu % có ý nghĩa đặc biệt  % Đánh dấu sự bắt 2 của một yêu cầu định đầu dạng  Yêu cầu định dạng tận cùng bởi ký tự định dạng
  • 22. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings (tt) 22 • % in ra ký tự % • c in tham số thứ nhất của một ký tự 2 • x in tham số thứ nhất ở dạng thập lục • X in tham số thứ nhất ở dạng THẬP LỤC • 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) • hn giống với n nhưng chỉ in 2 byte
  • 23. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings (tt) 23 #include <stdio.h> int main(int argc, char **argv ) { 2 char buffer[512]; int cookie = 0 ; printf("&cookie: %pn", &cookie); gets( buffer); printf("cookie = %.8Xn",cookie); printf(buffer); printf("n cookie = %.8Xn", cookie); return 0 ; }
  • 24. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings (tt) 24 • Nhập vào abcdef • abcdef 2 • Nhập vào %x • 0 • Nhập vào %x%x%x%x • 0 0 0 6
  • 25. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Format Strings (tt) 25 • Để gán 0x64 vào biến cookie • [địa chỉ cookie]%x%x%x%x%x%x%x%x%x[…]%n 2 • [địa chỉ cookie] in ra 4 byte x54xF8xFFxBF • 9 %x in ra 21 byte 0006b7ead8e0fffff5100 • Để in ra tổng cộng 100 ký tự ta cần thêm 100-21- 4=75 ký tự • Vậy […] sẽ là 75 ký tự python -c 'print "x54xF8xFFxBF%x%x%x%x%x%x%x%x%x" + "a"*75 + "%n"' | ./fmt
  • 26. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Software Exploit 26  Buffer Overflows  Format Strings 2  Race Condition  Integer Overflow  Off by one 26
  • 27. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 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 2 thứ tự truy cập vào 27
  • 28. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Race Condition (tt) 28 • Để 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 2 → Chữ “đua” (race) • Còn được gọi là TOC/TOU • Xét ví dụ: if(access(argv[1], R_OK)==0) { f = fopen(arvg[1], "r"); }
  • 29. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Race Condition (tt) 29 • Giữa hàm access() và fopen() có một khoảng thời gian nhỏ 2 CALL access CMP EXA, 0 JNZ ... PUSH ... PUSH ... CALL fopen • Hệ điều hành có thể sẽ chuyển qua tiến trình khác ở giữa các lệnh đó
  • 30. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Race Condition (tt) 30 2
  • 31. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Race Condition (tt) 31 • 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 2 • 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
  • 32. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Race Condition (tt) 32 • Đ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 2 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
  • 33. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Software Exploit 33  Buffer Overflows  Format Strings 2  Race Condition  Integer Overflow  Off by one 33
  • 34. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Integer Overflow 34 • Số nguyên trong máy tính được biểu diễn • Ở dạng bù 2 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 (255 kiểu short là 1 kiểu char) 34
  • 35. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Integer Overflow (tt) 35 • 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 2 • Xét ví dụ: int i; i = atoi(argv[1]); if(i<0x1000) fgets(buf, i, stdin); • atoi() trả về số nguyên có dấu • Tham số thứ 2 của fget() là kiểu số nguyên không dấu. • Nếu arvg[1] là số âm thì sẽ gây tràn
  • 36. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Integer Overflow (tt) 36 • Xét ví dụ: int i = -2,147,483,648; int j = -1; 2 printf("%d n", i/j); • i là số âm nhất • j là -1 • 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 diễn (2,147,483,647) →crash
  • 37. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Software Exploit 37  Buffer Overflows  Format Strings 2  Race Condition  Integer Overflow  Off by one 37
  • 38. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 38 Off by one • Đâ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 2 • Xét ví dụ: void vuln(char *arg) { char buff[8]; strcpy(buff,arg); } void main (int argc, char **argv) { vuln(argv[1]); } 38
  • 39. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Off by one (tt) 39 • 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 2 • 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
  • 40. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Off by one (tt) 40 • 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() 2 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 hàm main() sẽ là địa chỉ của biến buff+4
  • 41. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Off by one (tt) 41 2
  • 42. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Demo Buffer Overflow 42 2 42
  • 43. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 43 Web Attack  SQL Injection  Cross-site scripting(XSS) 2  Local and Remote file inclusion  Web proxy 43
  • 44. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! SQL Injection 44  Boolean based blind  Time based blind 2  Error based  UNION query  Stacked queries  Out of band 44
  • 45. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Demo SQL Injection 45 2 45
  • 46. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Cross-site scripting(XSS) 46  Reflected  Persistent 2  DOM-based 46
  • 47. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 47 Demo XSS 2 47
  • 48. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Các tài liệu tham khảo 48 • Nghệ thuật tận dụng lỗi phần mềm – Nguyễn Thành Nam 2 • Offensive Security - Penetration Testing with BackTrack (Lab Guide) • Google
  • 49. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Thanks & Question 49 2 49