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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漏洞:Client ReDos From Regex Injection

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漏洞:Client ReDos From Regex Injection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

漏洞描述:

掃描漏洞如下:


代碼:

// In IE6, the hash fragment and search params are incorrect if the

??? // fragment contains `?`.

??? getSearch: function() {

????? var match = this.location.href.replace(/#.*/, '').match(/\?.+/);

????? return match ? match[0] : '';

??? },

// Update the hash location, either replacing the current entry, or adding

??? // a new one to the browser history.

??? _updateHash: function(location, fragment, replace) {

????? if (replace) {

??????? var href = location.href.replace(/(javascript:|#).*$/, '');

??????? location.replace(href + '#' + fragment);

????? } else {

??????? // Some browsers require that `hash` contains a leading #.

??????? location.hash = '#' + fragment;

????? }

??? }


ReDoS(Regularexpression Denial of Service)
正則表達式拒絕服務攻擊。開發人員使用了正則表達式來對用戶輸入的數據進行有效性校驗,當編寫校驗的正則表達式存在缺陷或者不嚴謹時, 攻擊者可以構造特殊的字符串來大量消耗服務器的系統資源,造成服務器的服務中斷或停止。

每個惡意的正則表達式模式應該包含:使用重復分組構造、在重復組內會出現、重復、交替重疊。

有缺陷的正則表達式會包含如下部分。

(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} | for x > 10
注意: 這里的a是個泛指。

一些實際業務場景中會用到的缺陷正則:

英文的個人名字
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Java類名
Regex: ^(([a-z])+.)+[A-Z]([a-z])+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

Email格式驗證
Regex: ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$
Payload: a@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

多個郵箱地址驗證
Regex: ^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$
Payload: aaaaaaaaaaaaaaaaaaaaaaaa!

復數驗證
Regex: ^\d*[0-9](|.\d*[0-9]|)*$
Payload: 1111111111111111111111111!

模式匹配
Regex: ^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$
Payload: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

使用python來進行測試有缺陷的正則示例
$ python -c "import re;re.match('^[a-zA-Z]+(([\'\,\.\-][a-zA-Z ])?[a-zA-Z]*)*$', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa!')"

?


解決方案:

防范手段只能降低風險而不能百分百消除ReDoS這種威脅。

1.??降低正則表達式的復雜度, 盡量少用分組;

2.??嚴格限制用戶輸入的字符串長度(特定情況下)。

??? 對本次測試漏洞進行分析,似乎并不存在重復分組或嵌套分組的正則表達式,為了應對安全測試,建議解決方案如下:

方案1

使用{m, n}替代“*”、“+”等,限制匹配的字符數量,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改為

var href = location.href.replace(/(javascript:|#).{0, 1000}$/, '');

方案2

使用字符串截取函數slice()或substring(),替代replace()函數,如:

var href = location.href.replace(/(javascript:|#).*$/, '');

修改為

var lochref = location.href;

var idxnum = lochref.indexof(“javascript:”);

if(idxnum == -1) idxnum = lochref.indexof(“#”);

var href = idxnum == -1? lochref : lochref.slice(0, idxnum + 1);


參考資料:

Regular expression Denial of Service - ReDoS?

淺析ReDoS的原理與實踐

Location 對象

正則表達式基礎

js字符串截取函數slice()、substring()、substr()

總結

以上是生活随笔為你收集整理的漏洞:Client ReDos From Regex Injection的全部內容,希望文章能夠幫你解決所遇到的問題。

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