1. 程式人生 > >Mysql注入之注入點探測

Mysql注入之注入點探測

Mysql初級SQL注入總結

作為一個剛剛接觸web安全的小白來說經驗的總結非常重要今天我就來總結一下SQL注入的內容

注入點的探測:當然我們第一個想到的當然是使用工具去探測,但作為新手我們現在不講工具,那如何探測呢?

首先我們需要先判斷是什麼型別的注入點有數字型,字元型,搜尋型。我們在探測時也需要按照這個順序來探測。

這種最簡單URL。然後我們開始探測用最經典的:id=1 and 1=1然後再換成 and 1=2 檢視頁面的變化如果頁面發生了變化一般這種情況下就可能存在注入當然也要視情況而定我建議再試試其他其他語句如 id=1 or 1=2 或id=1 like 1=2 再去比較頁面的變化如果變化明顯這種就是數字型的注入點然後我們就可以進行order by先確定欄位(二分法)

id=1 order by x 注意這裡的id=1是一個存在的頁面當只輸入id=1和輸入id=1 order by x 得到的頁面是一致時
就可以確定x為正確的欄位數確定好欄位後我們就可以聯合查詢 使用union select語句了這時id後面就要輸入一個不存的值瞭如id=11111特別注意數字型的你不能在id後面跟字元或單雙引號否則會報錯 。

當你輸入id=1 and 1=1, id=1 and 1=2

或其他語句頁面沒有發生變化或者直接給你報錯了沒有發生變化有可能這裡不存在注入點(當然這是廢話、不存在注入你還探測個鬼啊,現在我們講的都是存在注入的情況),有報錯的話我們就要仔細分析報錯的原因,沒有報錯的話我們就要嘗試字元型的點。

字元型:字元型的一般它的SQL語句是 select * from table where id =’(有時候也會是雙引號當我們在注入的時候要特別注入有的有報錯資訊可以看有的沒有就需要自己去判斷)

(我們上一個講的數字型的sql查詢語句是 select * from table where id =)

這裡的區別就是id後面的那個單引號也那個字元型當我們輸入一個id的值時比如輸入username它的SQL語句就會變成這樣假設我們現在有一張名為admin的表

裡面放著使用者的資訊我們輸入username

就會構成這樣一條SQL語句       Select * from admin where id =‘username’(這個例子只是個比喻)我們可以發現這裡的單引號閉合了其實是這條語句的前面有一的單引號在輸入完之後程式又會自動加上一個單引號實現閉合那按我們剛剛的輸入‘1 and 1=1’這樣就會造成語法錯誤既然一對單引號會自動閉合那我們為什麼不自己加上一個單引號使這條語句閉合那問題就又來了那後面不是還有一個單引號嗎?這個時候我們就可以在語句的後面加上 --+兩條短橫線一個加號也可以是一個空格還有一個#這個符號(要會靈活運用 -- ,--+,# 這三種都要去嘗試)用來註釋掉後面的內容那個單引號就不復存在了那麼這個時候我們就可以來構造語句了

order by , union 這個後面講

如果1’and 1=1 -- ,and 1=2-- 等探測語句都試過之後還是沒有用這時這個注入點就可能是搜尋型的

搜尋型:搜尋型的語句是這樣的 :

select * from table_name where id=’% x %’ %中間x就是我們要輸入的值兩個%是萬用字元也可以理解為正則表示式當我們輸入一個a也就是?id=a 這時資料庫就會自動自動進行匹配匹配以a開頭的或者以a結尾的字元如admin等但返回的資料是什麼就要看資料庫的設計了就想你在百度上輸入一個a它會返回什麼呢這個可以自行研究,那麼細心的就會發現這和字元型的差不多這時我們想要注入的話只需要輸入  1%’就可以閉合%和’了但一定要注意在後面加上 --空格或--+進行註釋除了數字型的其他型別的都要加上 – 數字型的加上這個東西會報錯這個語句就是?id=1%’+ 你想查詢的內容—

當數字型,字元型,搜尋型都不行的時候我們就要考慮寬位元組注入了什麼是寬位元組注入

寬位元組.原理:網站管理員在php的原始碼中加入了一個能使 '(單引號)轉義成 \' 的函式從而當我們在 id=1後加入單引號測試時發生錯誤 會形成這樣一條語句 select * from xxx id = '1\''多了一個\'

是使我們無法探測當PHP開啟magic_quotes_gpc   (魔術引號),或者使用addslashes、mysql_real_escape_string等函式進行過濾時,如果查詢語句中存在單引號,我們嘗試閉合單引號就會被過濾掉,如圖,通過新增\(轉義符)將單引號轉義,這種形式下,如果資料庫使用的是GB2312、GBK、GB18030等寬位元組的編碼時,就會造成寬位元組注入,當我們輸入%df’時經過addslashes轉義變成 %dF%5C%27 在通過GBK編碼後變成 運’在這裡我們發現他多出來了一個單引號正好閉合了我們查詢語句中的單引號,構造語句:http://127.0.0.1/sqltest.php?id=1%df’and 1=2 union select 1,user(),database() — a(這裡要注意 在mysql註釋符後邊要加一個空格符,由於瀏覽器在會刪去url末尾中的空格符 所以我們在後邊加一個字串 中間加個空格)