天天看點

%0a繞過XSS防禦-poc

在基于PCRE實作的正則引擎中,我們常使用“m表示multi-line、s表示single-line”。

multi-line表示按行來比對正則,可以了解為以換行符為切割,對每行進行正則比對然後進行or運算出結果。

中single-line的意思是将待比對的文本視為一行,換行符不再作為“換行”的标志。

這在日常使用中也經常會出現由首尾界定符産生的小bug,比如下面這一個。

<?php 

if(preg_match('/^a[a-z]+z$/m', $_GET['input'])) {   //比對a開頭 z結尾

    echo $_GET['input']; 

}      

正則比對中我們常使用`^`和`$`來界定正則比對的首尾,但這兩個的符号本身的含義其實是代表了“行的開頭和結尾”,也就意味着如果你輸入一個%0a換行,後面就可以輸入任何字元也能完成比對。

比如上面的代碼本身的含義可能是:使用者輸入一個以a開頭,以z結尾的中間可以有若幹字母的字元串。但因為指定了m修飾符,導緻使用者可以傳入:

input=abcz%0a<svg%20onload=alert(1)>      

來繞過檢測。   有些地方是可以有效的。

作者:求知魚

出處:https://home.cnblogs.com/u/Qiuzhiyu

-------------------------------------------

個性簽名:你有一個蘋果,我有一個蘋果,我們交換一下,一人還是隻有一個蘋果;你有一種思想,我有一種思想,我們交換一下,一個人就有兩種思想。

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,部落客在此感謝!

獨學而無友,則孤陋而寡聞,開源、分享、白嫖!

上一篇: dhcp服務