使用PHP查詢字符串繞過waf

2020-12-17 資安之路

聲明

由於傳播、利用此文所提供的信息而造成的任何直接或者間接的後果及損失,均由使用者本人負責,雷神眾測以及文章作者不為此承擔任何責任。雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用於商業目的。

No.1

語法&定義&注釋

查詢字符串解析到變量,首先看一下parse_str()函數:語法:parse_str(string,array)

定義和用法:

parse_str() 函數把查詢字符串解析到變量中。注釋:

如果未設置 array 參數,則由該函數設置的變量將覆蓋已存在的同名變量。注釋:

php.ini 文件中的 magic_quotes_gpc 設置影響該函數的輸出。如果已啟用,那麼在 parse_str() 解析之前,變量會被 addslashes() 轉換。

No.2

如何繞過waf程序規則

TL;DR,PHP將查詢字符串(在URL或body中)轉換為$_GET或$_POST中的數組。例如:/?foo=bar變成Array([foo] => "bar"),查詢字符串解析過程使用下劃線刪除或替換參數名稱中的某些字符。

例如/?%20wenson[id%00=42]轉換為Array([wenson_id] => 42)

如果遇到waf對wenson_id的值進行攔截時,怎麼樣使用濫用PHP查詢字符串解析器來繞過WAF,可以通過以下面方式來繞過這個解析過程:

/wenson.php?%20wenson[id%00=42"+AND+1=0—在PHP中,上面的示例%20wenson[id%00]中的參數名的值將存儲為$_GET["wenson_id"]。

PHP需要將所有參數轉換為一個有效的變量名,因此當解析查詢字符串時,它主要做兩件事:

刪除初始空格將一些字符轉換為下劃線(包括空格)

通過如下所示的簡單循環,您可以使用parser_str函數發現哪個字符被刪除或轉換為下劃線:

在這裡可以用foo_bar的值進行fuzz測試,「[X]foo[X]bar[X]」是[X]的標記位,對這個標記位進行測試,如果web伺服器接受帶點或空白的標題名稱,也會發生類似的事情。

可以對fuzz測試的一些點:

接下來進行拆分,進行分析:

[1st]foo_barfoo[2nd]barfoo_bar[3rd]

可以看出foo%20bar 等同於 foo+bar ,並且可以被解析為foo bar。如果使用一個正則規則來匹配時:

alert http any any -> $HOME_NET any (\msg: "Block SQLi"; flow:established,to_server;\ content: "POST"; http_method;\ pcre: "/wenson_id=[^0-9]+/Pi";\ sid:1234567;\)

可以使用下面的方式進行繞過:

/?wenson**[**id=1%22+AND+1=1--'/?wenson**%5b**id=1%22+AND+1=1--'/?wenson_id**%00**=1%22+AND+1=1--'

如果像ModSecurity的話,使用這個規則的話SecRule !ARGS:wenson_id "@rx ^[0-9]+$",以上的方式是不成功的,

所以在有時候可以這樣子繞過waf:所以在繞PHP文件中,遇到類似的parse_str()函數時,可以嘗試去繞過。

/test.php?tt<span style="color:#ab4642">%00</span>=1&%20wenson=fsf23424234234ffsdfds

等同於下面的URL地址:

/test.php?tt=1&wenson=fsf23424234234ffsdfds

No.3

尾言

最後,文章的內容部分參考網際網路的文章來寫,在繞過的過程中,多嘗試一下PHP替代函數進行繞waf。

招聘啟事

安恆雷神眾測SRC運營(實習生)————————【職責描述】1. 負責SRC的微博、微信公眾號等線上新媒體的運營工作,保持用戶活躍度,提高站點訪問量;2. 負責白帽子提交漏洞的漏洞審核、Rank評級、漏洞修復處理等相關溝通工作,促進審核人員與白帽子之間友好協作溝通;3. 參與策劃、組織和落實針對白帽子的線下活動,如沙龍、發布會、技術交流論壇等;4. 積極參與雷神眾測的品牌推廣工作,協助技術人員輸出優質的技術文章;5. 積極參與公司媒體、行業內相關媒體及其他市場資源的工作溝通工作。【任職要求】 1. 責任心強,性格活潑,具備良好的人際交往能力; 2. 對網絡安全感興趣,對行業有基本了解; 3. 良好的文案寫作能力和活動組織協調能力。

簡歷投遞至 strategy@dbappsecurity.com.cn

設計師(實習生)

————————

【職位描述】負責設計公司日常宣傳圖片、軟文等與設計相關工作,負責產品品牌設計。【職位要求】1、從事平面設計相關工作1年以上,熟悉印刷工藝;具有敏銳的觀察力及審美能力,及優異的創意設計能力;有 VI 設計、廣告設計、畫冊設計等專長;2、有良好的美術功底,審美能力和創意,色彩感強;精通photoshop/illustrator/coreldrew/等設計製作軟體;3、有品牌傳播、產品設計或新媒體視覺工作經歷;【關於崗位的其他信息】企業名稱:杭州安恆信息技術股份有限公司辦公地點:杭州市濱江區安恆大廈19樓學歷要求:本科及以上工作年限:1年及以上,條件優秀者可放寬

簡歷投遞至 strategy@dbappsecurity.com.cn

安全招聘————————公司:安恆信息崗位:Web安全 安全研究員部門:戰略支援部薪資:13-30K工作年限:1年+工作地點:杭州(總部)、廣州、成都、上海、北京

工作環境:一座大廈,健身場所,醫師,帥哥,美女,高級食堂…【崗位職責】1.定期面向部門、全公司技術分享;2.前沿攻防技術研究、跟蹤國內外安全領域的安全動態、漏洞披露並落地沉澱;3.負責完成部門滲透測試、紅藍對抗業務;4.負責自動化平臺建設5.負責針對常見WAF產品規則進行測試並落地bypass方案【崗位要求】1.至少1年安全領域工作經驗;2.熟悉HTTP協議相關技術3.擁有大型產品、CMS、廠商漏洞挖掘案例;4.熟練掌握php、java、asp.net代碼審計基礎(一種或多種)5.精通Web Fuzz模糊測試漏洞挖掘技術6.精通OWASP TOP 10安全漏洞原理並熟悉漏洞利用方法7.有過獨立分析漏洞的經驗,熟悉各種Web調試技巧8.熟悉常見程式語言中的至少一種(Asp.net、Python、php、java)【加分項】1.具備良好的英語文檔閱讀能力;2.曾參加過技術沙龍擔任嘉賓進行技術分享;3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相關資質者;4.具有大型SRC漏洞提交經驗、獲得年度表彰、大型CTF奪得名次者;5.開發過安全相關的開源項目;6.具備良好的人際溝通、協調能力、分析和解決問題的能力者優先;7.個人技術博客;8.在優質社區投稿過文章;

崗位:安全紅隊武器自動化工程師薪資:13-30K工作年限:2年+工作地點:杭州(總部)【崗位職責】1.負責紅藍對抗中的武器化落地與研究;2.平臺化建設;3.安全研究落地。【崗位要求】1.熟練使用Python、java、c/c++等至少一門語言作為主要開發語言;2.熟練使用Django、flask 等常用web開發框架、以及熟練使用mysql、mongoDB、redis等數據存儲方案;3:熟悉域安全以及內網橫向滲透、常見web等漏洞原理;4.對安全技術有濃厚的興趣及熱情,有主觀研究和學習的動力;5.具備正向價值觀、良好的團隊協作能力和較強的問題解決能力,善於溝通、樂於分享。【加分項】1.有高並發tcp服務、分布式等相關經驗者優先;2.在github上有開源安全產品優先;3:有過安全開發經驗、獨自分析過相關開源安全工具、以及參與開發過相關後滲透框架等優先;4.在freebuf、安全客、先知等安全平臺分享過相關技術文章優先;5.具備良好的英語文檔閱讀能力。

簡歷投遞至 strategy@dbappsecurity.com.cn

專注滲透測試技術

全球最新網絡攻擊技術

END

相關焦點

  • 如何濫用PHP字符串解析函數繞過IDS、IPS及WAF
    大家都知道,PHP會將(在URL或body中的)查詢字符串轉換成$_GET或者$_POST中的關聯數組。比如:/?foo=bar會被轉換成Array([foo] => 「bar」)。查詢字符串解析過程會刪除或者使用下劃線替換參數名中的某些字符。比如,/?%20news[id%00=42會被轉換成Array([news_id] => 42)。
  • 淺談WAF繞過技巧
    雲wafEg:加速樂目前CDN服務的功能是越來越多,安全性也越加強悍,用戶的每個請求都會被發送到指定的CDN節點上,最後轉發給真實站點。這個過程就好像加了一道關卡,這個關卡提供了緩存、加速、防禦的特點。繞過關鍵:查詢真實IP,若是直接訪問伺服器的IP就不經過CDN了。
  • SQL注入繞過waf的一萬種姿勢
    1 ... 2 3 $id=$_GET['id']; 4 5 $id=blacklist($id); 6 7 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; 8 9 $result=mysql_query($sql);10 11 $row=mysql_fetch_array($result
  • 利用PHP的字符串解析特性Bypass
    我們知道PHP將查詢字符串(在URL或正文中)轉換為內部$GET或的關聯數組$POST。
  • 從WordPress SQLi談PHP格式化字符串問題
    ,可以輸入  22 payload  ,會被轉化為  22  ,因而可以繞過。所以,payload  %1$'%s'  中的  '%  被視為使用  %  進行 padding,導致了  '  的逃逸。但在測試過程中,還發現其他問題。php的  sprintf  或  vsprintf  函數對格式化的字符類型沒做檢查。
  • php常用字符串函數實例總結
    本文實例總結了php常用字符串String函數。
  • PHP弱類型比較與md5繞過
    >輸出結果是:bool(true)bool(true)bool(false)bool(true)bool(true)bool(false)出現上述判斷輸出的原因是,在php中當一個字符串被當作一個數值來取值時,如果該字符串沒有包含'.'
  • php字符串函數匯總
    php字符串函數:addcslashes — 以 C 語言風格使用反斜線轉義字符串中的字符addslashes — 使用反斜線引用字符串bin2hex — 函數把包含數據的二進位字符串轉換為十六進位值chop — rtrim 的別名
  • php字符串常用處理,運算符和幾個常用的字符串函數
    為了讓更多的php學習者了解到php更多的知識,小編結合自己的理解和自學時所做的筆記,整理了一些知識點。藉助百家號這個大平臺分享給大家,希望對大家有所幫助!本期分享的是php字符串的一些常用處理,運算符和幾個常用的字符串函數。
  • php異或計算繞過preg_match()
    原理以製作免殺馬為例:在製作免殺馬的過程,根據php的語言特性對字符進行!運算會將字符類型轉為bool類型,而bool類型遇到運算符號時,true會自動轉為數字1,false會自動轉為數字0,如果將bool類型進行計算,並使用chr()函數轉為字符,使用"."
  • 如何獲取PHP字符串的最後n個字符
    源 / php中文網      源 / www.php.cn編寫一個PHP程序來獲取給定字符串的最後n個字符。方法1:在此方法中,遍歷字符串的最後N個字符並繼續將它們附加到新字符串中。例:<?php    $str = "HTML!CSS!MySQL!PHP!"
  • WAF的各種繞過手法總結(建議收藏)
    https://github.com/foospidy/payloads0X01    正則繞過多少waf 使用正則匹配。通配符使用用於linux命令語句注入,通過shell通配符繞過標準: /bin/cat /etc/passwd混淆: /???/??t /???/??ss??Used chars: / ?
  • PHP反序列化漏洞簡介及相關技巧小結
    php程序為了保存和轉儲對象,提供了序列化的方法,php序列化是為了在程序運行的過程中對對象進行轉儲而產生的。序列化可以將對象轉換成字符串,但僅保留對象裡的成員變量,不保留函數方法。php序列化的函數為serialize。反序列化的函數為unserialize。
  • 實戰sqlmap繞過WAF
    在sqlmap中沒有繞過SSL證書的參數,思考了很長時間,終於想起來原來貌似有一個中轉注入。這裡要解決的第一個問題是有哪些腳本語言能夠在請求網址時忽略SSL證書,第二個問題是我還需要使用sqlmap中的payload,這兩個都要滿足,通過查詢了解到PHP可以使用參數來忽略SSL證書,由於並不是搞開發的,所以這裡還是思考了很長時間,先來理解一下中轉注入的原理吧。
  • 「值得收藏」的PHP常用字符串函數
    1.str_word_count 統計單詞個數2. count_chars 得到字符串裡面字符的有關情況3. str_len 得到字符串長度,就是有多少個字符4. substr_count統計有多少個子字符串, 比如 統計is, this is php裡面,就會出現2個is5. strpos 定義字符串出現的首次位置 (
  • php浮點數和字符串
    比如:要求精確到3位小數,就都乘以1000後取整再比較;要求精確到2位小數,就都乘以100後取整再比較;要求精確到4位小數,就都乘以10000後取整再比較;舉例:字符串類型· 單引號字符串:· 雙引號字符串:· 定界符字符串heredoc:還可以使用特定形式的字符串
  • PHP字符串替換函數strtr()的功能實現講解
    我們今天要向大家講的內容是有關PHP字符串替換函數strtr()的相關介紹。對於初學者來說,對於PHP字符串替換函數strtr()的了解還比較淺顯,希望通過本文介紹的內容能夠讓大家深入了解這個函數的具體意義。
  • 1.PHP網站後門
    而php做為一門動態語言,其靈活性很高,因此一直以來 Webshell 的繞過與檢測之間不斷的產生著化學反應。Webshell 繞過的本質其實是針對不同的檢測給予不同的繞過方式,因此想要學會繞過,首先要了解 Webshell 是如何檢測的。
  • PHP 繞過禁用函數漏洞的原理與利用分析
    PHP 發布公告,舊版本的 php_array_merge_recursive 函數中存在UAF風險,被利用可能導致用來繞過禁用函數。受影響的版本PHP 7.2 - 7.4.9安全專家建議用戶儘快升級到安全版本,以解決風險。
  • PHP一些常見的漏洞梳理
    1 表示有一個值 {s:4:"test";s:3:"123";}中, s 表示字符串 4 表示該字符串的長度, "test" 為字符串的名稱 "123" 為字符串的內容