parse_url繞過

parse_url介紹

  parse_url ( string $url [, int $component = -1 ] ) : mixed

  此函數返回一個關聯數組,包含現有 URL 的各種組成部分。如果缺少了其中的某一個,則不會爲這個組成部分創建數組項。組成部分爲:

  • scheme – 如 http
  • host       域名
  • port        端口
  • pass  
  • path   路徑
  • query – 在問號 ? 之後
  • fragment – 在散列符號 # 之後

  此函數並 不 意味着給定的 URL 是合法的,它只是將上方列表中的各部分分開。parse_url() 可接受不完整的 URL,並儘量將其解析正確。
  注: 此函數對相對路徑的 URL 不起作用。

 

DEMO

<?php
$url = "http://www.baidu.com/suning?v=1&k=2#id";
echo $url.'</br>';
$parts = parse_url($url);  
var_dump($parts);
?>

 

 

   這是正常的拆分,假設傳入的是 http://[email protected]/suning?v=1&k=2#id

 

 

  發現host變成了2333.com,這樣host就可控了

 

DEMO

<?php 
$data = parse_url($_SERVER['REQUEST_URI']); 
var_dump($data);
$filter=array("aaa","qqqq");
foreach($filter as $f)
{ 
    if(preg_match("/".$f."/i", $data['query']))
    { 
        die("Attack Detected"); 
    } 
} 

?>

  當我們輸入參數輸入aaa的時候,會被攔截

 

   但是當在路徑前輸入在路徑前多輸入//,會使這個函數失效,這樣就繞過了檢測

 

   多加了一個/ 導致 嚴重不合格的 URL,parse_url() 返回FALSE 這個是通用的繞過方法 (CTF常用 返回值False 用於逃逸判斷)

 

參考鏈接

 https://blog.csdn.net/q1352483315/article/details/89672426?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

如有錯誤和不足請指出,謝謝

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章