注入攻擊的本質,是把用戶輸入的數據當做代碼執行。
注入的關鍵條件:
第一個是用戶能夠控制輸入
第二個是原本程序要執行的代碼,拼接了用戶輸入的數據然后進行執行
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秒