# 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)