Đâ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ả
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
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
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:
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