---
# System prepended metadata

title: Blind SQL injection with conditional errors
tags: [SQL injection]

---

# Blind SQL injection with conditional errors

* Yêu cầu giống với bài lab [**Blind SQL injection with conditional responses**](https://hackmd.io/@thuanphat342001/HJG8oXOU6), tuy nhiên lần này chúng ta sẽ khiến cho query tạo ra lỗi để server gửi trả lỗi về cho chúng ta.

* Đầu tiên chúng ta xem request `GET /filter?category=Gifts` và thấy cookie có `TrackingId=...`. Chúng ta sẽ dùng nó để gửi query.
![Capture02](https://hackmd.io/_uploads/H1wyWNO8T.png)

* Đưa request trên qua Repeater và thêm vào sau `TrackingId=...` payload `' AND (SELECT CASE WHEN (1=2) THEN 1/0 ELSE 'a' END)='a`. Thêm vào payload này thì khi mệnh đề `WHEN` trả về `True` thì query sẽ trả về `1/0`, còn sai sẽ trả về `'a'`. Mà `1/0` sẽ gây lỗi divide-by-zero. Còn kí tự `'a'='a'` sẽ không hiển thị lỗi. Tuy nhiên trên màn hình vẫn hiện lỗi, có thể do chưa đúng database. 
![Capture03](https://hackmd.io/_uploads/B1DJZN_Up.png)

* Sửa qua payload dành cho Oracle là `' AND (SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0) ELSE 'a' END FROM dual)='a` thì ta được kết quả là không hiển thị lỗi.
![Capture04](https://hackmd.io/_uploads/BJvyW4u8a.png)

* Tiếp theo ta sẽ xác định độ dài của password bằng payload `' AND (SELECT CASE WHEN (LENGTH(password) = 1) THEN TO_CHAR(1/0) ELSE 'a' END FROM dual)='a`. Vị trí đặt payload brute-force sẽ là chiều dài của password. Tiến hành brute-force thì ta nhận được kết quả là ở payload `20` trả về status code là `500`. Vậy 20 là chiều dài của password.
![Capture05](https://hackmd.io/_uploads/BkwJ-4uIT.png)
![Capture06](https://hackmd.io/_uploads/SJPkZ4OI6.png)

* Bây giờ chúng ta sẽ brute-force từng kí tự của password bằng payload `' AND (SELECT CASE WHEN (SUBSTR(password, 1, 1) = 'a') THEN TO_CHAR(1/0) ELSE 'a' END FROM users WHERE username = 'administrator')='a`. Vị trí đặt payload brute-force sẽ là như hình dưới. Chọn loại tấn công là Cluster bomb. Ở vị trí payload đầu tiên ta đưa dữ liệu Numbers từ 1 đến 20, vị trí payloas thứ hai là các kí tự in thường và kí tự số. Tiến hành tấn công.
![Capture07](https://hackmd.io/_uploads/HkD1b4d8p.png)

* Kết quả trả về như hình dưới, sau khi sắp xếp theo số thứ tự, ta được password là `3b4qo72os8pljm58xan2`. Lấy password này login user `administrator`. 
![Capture08](https://hackmd.io/_uploads/rJPJWEOUa.png)

* Login thành công. Hoàn thành bài lab.
![Capture09](https://hackmd.io/_uploads/HkwyWV_Ia.png)
