2016年11月5日 星期六

話說 OWASP ZAP 之 正則表示法 及\Q \E運用

在ZAP中有許多地方會用到 Regex (正則表示法或譯正規表示式),自定中斷點、篩選器、...。
一、ZAP中有哪些地方會用到 Regex?
1.   Session Properites 的 Exclude from ...(有好幾項)、Monitor Clients、Contexts 下的 Include .. 及 Exclude ...
2. Contexts 裡頭的 Authentication 及 Authorization 項目
3. Tools 功能下的Filers 底下之: Replace HTTP....(有四項)、Replace WebSocket...
4. Tools 功能表下的 Options 子項諸多內容
由此可見 Regex 在 ZAP 中應用相當廣泛。
二、ZAP 的 正則表示法和一般的正則表示法並沒有特別差異,惟一要注意的是 \Q \E的使用,凡在 \Q \E 裡頭的文字或符號都會被視為一般文字,而不是正則表示式,但如果這些一般文字中要用到 \E 時,必須分拆,以實例說明或許比較清除,假設已知下列的 HTTP 請求表頭中之 Cookie authToken是代表使用者的身分,只要取代成特定值就能切換身分,我們希望 ZAP 在發送此Cookie時,不論authToken的內容是什麼,都能自動替換成特定的字串(例如:vHWvqqzauR6lKJwqP9O81IB2Gnk0TLRDYVboyFn3TVk)
Cookie: NG_\E_LANG_KEY=%22zh_TW%22; authToken=vkGC0W4NEuDyZ7QzeW5swQoNGNtTVNa_6YPi2k8Lf8s0; role=member; _ga=GA1.3.1318712086.1478302644; _gat=1
因此利用 ZAP -> Tools -> Filter... 項下的 Replace HTTP request header using defined pattern. 協助處理,就可以在:
Pattern 欄輸入:
\QCookie: NG_\E\\E\Q_LANG_KEY=%22zh_TW%22; authToken=\E.+\Q; role=member; _ga=GA1.3.1318712086.1478302644; _gat=1\E
找出要取代的字串。其中原字串的 \E,在Pattern中已變成 \\E,原來只有一個倒斜線(\),因為不是包含在\Q \E裡頭,倒斜線成了RegEx的運算符,所以要改用兩個倒斜線(\\)做跳脫處理。
Replace With 欄位輸入:
Cookie: NG_\\E_LANG_KEY=%22zh_TW%22; authToken=vHWvqqzauR6lKJwqP9O81IB2Gnk0TLRDYVboyFn3TVk; role=member; _ga=GA1.3.1318712086.1478302644; _gat=1
我們指定的字串,Replace With的內容都視為一般字串,但裡頭的倒斜線一樣需再加一組倒斜線做跳脫處理。
在上例中,\Q \E 括住的文字就算裡頭含有 RegExp的運算符號(如 . )也會被當成一般文字。雖然不見得要用\Q \E來界定一般文字,像前面提到的小數點 . ,若不用\Q \E括住,也可以改用 \ 來跳脫,上面的 Pattern 就可以改成
Cookie: NG_TRANSLATE_LANG_KEY=%22zh_TW%22; authToken=.+; role=member; _ga=GA1\.3\.1318712086\.1478302644; _gat=1
但有時要處理的字串中過多的符號,要用 \ 跳脫,可能有所遺漏,建議還是用\Q \E來界定一般文字會比較恰當。

2 則留言: