SQL注入的原理分析


注入攻擊的本質,是把用戶輸入的數據當做代碼執行。

注入的關鍵條件:

第一個是用戶能夠控制輸入

第二個是原本程序要執行的代碼,拼接了用戶輸入的數據然后進行執行

1.sql注入本質是什么

把用戶輸入當做代碼執行

2.sql注入的條件

用戶可控輸入和原本程序要執行代碼,拼接用戶輸入且當作SQL語句去執行

3.order by的作用及含義

order by 用於判斷顯示位,order by 原有的作用是對字段進行一個排序,在sql注入中用order by 來判斷排序,order by 1就是對一個字段進行排序,如果一共四個字段,你order by 5 數據庫不知道怎么排序,於是乎就錯誤了無返回值

4.union select如何發揮作用

union為聯合查詢,a聯合b進行了查詢,為查詢了前面的sql語句(原有的)后再進行后面的sq查詢(我們添加的),但兩張表聯合查詢的字段數必須相同。

5.輸出位是什么

SQL查詢出來的數據不一定全部會輸出,頁面上只會輸出幾個字段的信息,那幾個會輸出的字段就是輸出位

6.information_schema是什么

information_schema是mysql的系統自帶表,用於查詢數據,在mysql5.0以上版本中存在

7.加單引號和加 and 1=2有什么區別

有區別,單引號是為了閉合語句,而and 1=2是為了讓union前面的語句無查詢結果無輸出,然后直接輸出拼接進去union后面的那個語句的查詢結果

8.and 是什么意思

and 為和的意思,一個語句中,當前一個正確,后一個錯誤時,如果是and連接整個語句返回是False

9.or是什么意思

Or 為和的意思,一個語句中,當前一個正確,后一個錯誤時,如果是or連接整個語句返回是True

10.and 和 or 選擇使用有什么講究?

And 語句執行時,如果and 前的語句返回False,那么and后面的語句根本不執行

11.除了單引號外還有其他的符號可以閉合嗎?

實際上還是要看源碼,常見的是單引號和雙引號還有括號

12.limit的作用

limit 在注入中用於排序然后輸出,limit a,b a代表了從哪個位置(從0開始) b代表從那位開始顯示幾條數據

13.可以查訊多個字段內容嗎

可以,可以使用語句Group_concat()函數進行輸出

14. %23有什么作用

%23編碼為#,用於注釋后面的語句,防止SQL注入點后原本的SQL語句對SQL注入進行干擾

15.報錯注入的原理

利用sql注入拼接sql語句,將報錯信息輸出時同時將我們想要的信息輸出

16.閉合是什么

在sql查詢中,代碼比較嚴謹,括號和引號都得成雙成對,引號內的默認是字符串不會當作SQL語句執行,所以必須閉合然后才能注入,當然有些SQL語句直接拼接,也就不用什么閉合了

17.SQL注入有數據庫限制嗎?

沒有,常見的數據庫都可以

18.SQL注入有動態腳本語言限制嗎?

沒有限制

19.SQL注入如果沒系統自帶表怎么辦

那就慘了,只能通過猜,不斷的嘗試,一般而言數據庫的表也不會亂起名字,畢竟是團隊協作的東西

20.系統自帶庫管理員不會修改嗎?

一般而言並不會

21.union all 和 union 區別

如果輸出的數據有相同的,Union只會輸出一次,而union all都會輸出

22.為什么用and 1=1正常 and 1=2報錯來判斷是否存在SQL注入

因為如果存在SQL注入,那么and就是和的意思,1=1是一個恆等式,然后因為原本能夠查出數據,那么兩個真就是True,但是1=2肯定是不可能的,這里就會返回一個False,然后因為和必須兩個真才返回True,所以這里拼接就不成立返回False.

常用函數:

GROUP_CONCAT(col) 返回由屬於一組的列值連接組合而成的結果,並用逗號分割開

ASCII(char) 返回字符的ASCII碼值

DATABASE() 返回當前數據庫名

USER()或SYSTEM_USER() 返回當前登陸用戶名

VERSION() 返回MySQL服務器的版本

SLEEP(n) 休眠n秒

注入步驟:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM