Format String (part1)
1. Knowledge printf("%s", input) => in ra chuỗi input (tham số đầu tiên sau format string) printf("%s") => in ra 1 giá trị chuỗi nào đó tại tham số đầu tiên - địa chỉ thứ 1(tính từ 0) trên stack (32bit) Còn đối với kiến trúc 64 bit, tham số đầu tiên sẽ không nằm trên stack mà nó sẽ năm hết trên thanh ghi sau đó mới ghi đến stack. printf("%30$s") => in ra địa chỉ chuỗi tại tham số thứ 30 - địa chỉ thứ 30 (tính từ 0) trên stack (32bit) printf("%6$p") => in ra giá trị tại tham số thứ 6 (địa chỉ or giá trị) dưới dạng 0x? thập lục phân printf("%6$x") => in ra giá trị tại tham số thứ 6 (địa chỉ or giá trị) dưới dạng thập lục phân (không có 0x) 2. Hướng exploit - Có thể tự do in ra 1 địa chỉ nào đó trong vùng nhớ (stack) của chương trình ("%6$x", "%22$p") - Có thể tự do in ra 1 giá trị chuỗi kí tự nào đó tại một địa chỉ trong vùng nhớ của chương trình ("%30$s") - Có thể thay đổi giá trị tại 1 địa c...