Introduction to SQL Injection using XPATH

Đây không phải bài viết về XPATH Injection mà là SQL Injection sử dụng một vài function của XPATH để gây lỗi

Trong một số trường hợp, có thể Union SQLi không hoạt động một phần, chúng ta có thể có thể cố tình gây lỗi và khiến website hiển thị thông báo lỗi có chứa data cần lấy

Vậy khi nào phương pháp này có thể hữu dụng ? Có những lúc chúng ta vẫn có thể thực hiện các bước đến bước inject code thành công hay tìm số cột, nhưng sau đó không thể lấy data của các cột, các hàng trong bảng hoặc không thể. Trường hợp này xảy ra thường là do các function dùng để check validity input. Tuy nhiên Error Based Injection hiếm khi thành công vì yêu cầu nhiều yếu tố cần thiết như:
 - Có thể bypass thông qua funtion của XPATH
 - Website hiển thị thông báo lỗi khi thực thi query SQL

XPATH thông thường được sử dụng để lấy, chỉnh sửa data các node trong một file xml, tuy nhiên để gây lỗi thì cũng không cần file xml hay gì cả

Error Based Injection using extractvalue()

Như đã nói ở trên, chúng ta có thể thao tác các bước bằng phương pháp Union SQLi cho đến hết bước tìm cách để inject code vào truy vấn SQL

Hàm extractvalue được sử dụng như sau: extractvalue(xml_target,xpath_query). Và URL khi sử dụng hàm extractvalue() sẽ là:

 worldend.com/store.php?id=1') and extractvalue(0x0a,concat(0x0a,(select database())))--+

Khi đó sẽ xuất hiện thông báo lỗi: XPATH syntax error: sukabase. Sau đó chúng ta xử lí như thông thường

Error Based Injection using updatexml()

Hàm updatexml được sử dụng như sau: updatexml(xml_target,xpath_query,new_data). Và URL khi sử dụng hàm updatexml() sẽ là:

 worldend.com/store.php?id=1') and updatexml(null,concat(0x3a,(0x0a,(select database()))),null)--+

Khi đó sẽ xuất hiện thông báo lỗi: XPATH syntax error: sukabase. Sau đó chúng ta xử lí như thông thường

Error Based Injection using SubQuery

Tuy nhiên, XPATH không có sẵn trong một số phiên bản SQL, và XPATH có thể bị lock bởi admin, nên nếu 2 cách trên không thể sử dụng chúng ta có thể thử cách bên dưới sử dụng SubQuery:

 worldend.com/store.php?id=1') and (select 1 from (select count(*),concat((<Your Query Here>),0x3a,floor(rand (0) *2))y from information_schema.tables group by y) x)--+

Kết quả trả về sẽ có dạng: Duplicate entry '<Your Output here>:1' for key 'group_key'. Sau đó chúng ta xử lí như thông thường