日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL注入原理及联合查询

發(fā)布時間:2024/3/13 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL注入原理及联合查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、SQL注入原理:

用戶輸入的數(shù)據(jù)被當做SQL語句進行執(zhí)行

條件:①用戶能控制輸入的數(shù)據(jù)

????????②原本程序要執(zhí)行的代碼,拼接了用戶輸入的數(shù)據(jù)然后執(zhí)行

如何檢測SQL注入:

①:and 1=1? 頁面正確

and 1=2? 頁面錯誤? 可能存在SQL注入

②:字符運算法:+ - * /? (+號需要URL編碼之后再傳入,GET傳參會把+號當做空格來處理)

例如:id=2-1 跳到了id=1的頁面,那么就一定存在SQL注入(正常情況下網(wǎng)站是不會進行運算的)

檢測出存在SQL注入之后,下一步就是拿到數(shù)據(jù)庫的信息或者拿到數(shù)據(jù)庫權限

如何通過SQL注入獲取數(shù)據(jù)庫信息:

聯(lián)合查詢法:

A語句 union B語句

? ? ? ? 把兩條SQL語句一起去執(zhí)行(字段數(shù)要相同)

order by 排序

order by 1 以第一個字段進行排序? 可以用來查詢字段數(shù)

假如一個表里面只存在兩個字段,那么order by 3 頁面就會報錯

union select 1,2,3? 查看回顯點

由于一般情況下,頁面只顯示第一條數(shù)據(jù),所以如果我們想要吧第二條數(shù)據(jù)顯示出來,我們就需要讓前面的語句報錯

由于數(shù)據(jù)庫會選擇輸出,而這個選擇輸出的輸出位,就是我們想要的回顯點

我們想要的信息,都要從這個回顯點來輸出出來

下面用靶場來演示一下

進入靶場,在URL欄處輸入and 1=1頁面正常 and 1=2 頁面顯示不正常

?

?

接下來判斷字段數(shù)

order by 1正常? order by 2 正常? order by 3正常 order by 4 頁面不正常,說明存在3個字段

?

?

union select 1,2 ,3查看回顯點,可以看到回顯點是2和3這個地方

?接下來就是查詢數(shù)據(jù)庫的庫名,需要用到database()這個函數(shù),將這個函數(shù)直接寫到回顯點的位置上面,可以看到數(shù)據(jù)庫名是security

?接下來就是查詢數(shù)據(jù)庫的表名

查詢表名有兩種方法,一種是猜,在URL欄處輸入union select 1,2 ,3 from user 如果頁面輸出的是正常,那么就是存在,如果頁面顯示錯誤,那么就是沒有這個表,如下圖user不存在,users存在

另一種是利用系統(tǒng)自帶庫來查詢表名

mysql 5.0 以上的版本有一個系統(tǒng)自帶庫,information_schema,里面存儲著tables和columns

tables 里面是數(shù)據(jù)庫中庫和表的對應,上面我們已經(jīng)知道了庫名security,我們也猜出來了一個表名users,我們可以在tables里面看到,這個庫和表的對應

圖中我們可以看到表名對應的是table_name,庫名對應的是table_schema

庫.表.字段的結構? a.b.c就表示選中a庫里面的b表里的c字段

那么我們想要知道其他的表名,就可以利用數(shù)據(jù)庫的查詢語句結合這個information_schema來獲取其他的表名,構造語句:select table_name from information_schema.tables where table_schema=database()

現(xiàn)在將這個我們構造好的語句拼接到我們之前得到的回顯點上面,and 1=2 union select 1,2,?table_name from information_schema.tables where table_schema=database(),我們就可以看到表名了

?由于頁面只顯示第一行的數(shù)據(jù),想要看到其他的表名,我們就需要用到 limit 這個函數(shù)

limit 0,1 表示輸入第一行的數(shù)據(jù),輸出一行 0表示從第一行開始輸出? 1表示第一行

limit 從第幾行開始輸出(默認0),輸出幾行數(shù)據(jù)

現(xiàn)在我們想要看到其他的數(shù)據(jù),我們只需要在原來的語句中將limit拼接上就好了,and 1=2 union select 1,2,?table_name from information_schema.tables where table_schema=database() limit 0,1,我們只需要改變0這個數(shù)字,就可以得到我們想要的表名

接下來就是查詢字段名了,上面講到了有一個系統(tǒng)自帶的columns,這個就是數(shù)據(jù)庫中的庫和表和字段的對應,上面我們已經(jīng)知道了庫名security,我們拿到了一個表名emails,我們可以在colunms里面看到,這個庫和表和字段的對應

?圖中我們可以看到字段名對應的是column_name

我們就可以根據(jù)上面構造查詢表名的經(jīng)驗來構造查詢字段名的語句,select column_name from information_schema.colunms where table_schema=database() and table_name='emails'

這個語句的意思就是查詢這個字段從information_schema這個庫里面的columns去拿,where后面的就是條件,滿足查詢的這個字段保證在這個庫里面(table_schema=database()這個就是security這個庫),并且在emails這個表里面

?接下來就是利用limit來獲取其他的字段名

知道了庫名、表名、字段名,接下來就是拿數(shù)據(jù)了,利用數(shù)據(jù)庫查詢語句,就可以直接拿到數(shù)據(jù)

select 1,2,字段名?from 表名(select 1,2,id from emails)?,可以看到里面的數(shù)據(jù)就是1

?真實滲透中或者挖SRC,各位師傅只需要得到庫名就好了,完全沒必要往下走,一不小心就吃國家飯了,千萬不要拿數(shù)據(jù)。一定要遵守網(wǎng)絡安全法!!!

總結

以上是生活随笔為你收集整理的SQL注入原理及联合查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。