2021-11-23
什么是SQL注入
SQL注入是指用戶能夠控制前端參數(shù),構(gòu)造sql語句影響到后端數(shù)據(jù)庫的行為。
注入
1.注入類型
- 數(shù)字型: ?id=2-1或者加減之類的運算
- 字符類型:?id=1‘ 或者加入一些字符
2.注入技巧
布爾盲注
含義:回顯頁面只有正確和錯誤
常見的payload:
(1).length函數(shù):返回字符串str的長度,以字節(jié)為單位
(2).substr函數(shù):截取字符串字符
(3).ascii函數(shù):返回字符串中的最左側(cè)字符的ascii碼時間盲注(參考:https://xz.aliyun.com/t/5505)
含義:沒有明顯的回顯,只能使用特定的時間來判斷
常見使用payload:
(1).sleep(n)函數(shù):注入時延遲 n 秒輸出(不建議實際的滲透測試使用)
(2).benchmark函數(shù)
BENCHMARK(count,expr)
benchmark函數(shù)會重復(fù)計算expr表達式count次
(3) 笛卡爾積
利用and短路運算規(guī)則進行時間盲注。
(4) GET_LOCK盲注
(5) 正則DOS RLIKE注入
報錯注入
含義:在錯誤的回顯頁面回顯數(shù)據(jù)庫的信息
常見使用payload:
(1) 基于格式錯誤的報錯(Xpath語法錯誤)
<1> extractvalue(xml_document,Xpath_string)函數(shù)--從document中返回包含string的字符串,如果不符合xpath的語法就會報錯,將查詢的結(jié)果放在報錯信息中
<2> updatexml(xml_document,xpath_string,new_value)函數(shù)--將document的中符合string的字符串替換為value值
(2) 基于主鍵重復(fù)錯誤(參考:http://www.hellomao.top/2019/08/16/web_mysql_floor/)
<1> rand() 生成隨機數(shù),配合floor函數(shù)使用,group by
(3) 其他報錯(大佬求補充)堆疊注入
可以執(zhí)行多條語句,將多條sql語句來同時執(zhí)行寬字節(jié)注入(參考:https://www.freebuf.com/articles/network/282252.html)
GBK編碼,能夠繞過magic_quotes_gpc函數(shù)
3.注入位置
(1) GET
(2) POST
(3) Cookie
(4) 搜索型注入
(5) HTTP 頭注入
sql注入常見位置
1.登錄框
2.搜索框
3.url參數(shù)值
4.信息設(shè)置
5.所有與數(shù)據(jù)交互的點都有可能存在SQL注入
修復(fù)與建議
1.預(yù)編譯
代碼的可讀性和可維護性
盡可能提高性能
提高安全性
2.正則過濾參數(shù)
3.php開啟magic_quotes_gpc