中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DVWA下的CSRF通關是怎樣的

發布時間:2021-12-16 18:12:23 來源:億速云 閱讀:128 作者:柒染 欄目:網絡管理

DVWA下的CSRF通關是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

CSRF跨站點請求偽造(Cross—Site Request Forgery):

跟XSS攻擊一樣,存在巨大的危害性,你可以這樣來理解:
攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發送郵件、發消息,盜取你的賬號,添加系統管理員,甚至于購買商品、虛擬貨幣轉賬等。 如下:其中Web A為存在CSRF漏洞的網站,Web B為攻擊者構建的惡意網站,User C為Web A網站的合法用戶。

CSRF攻擊攻擊原理及過程如下:

1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;

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

3. 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;

4. 網站B接收到用戶請求后,返回一些攻擊性代碼,并發出一個請求要求訪問第三方站點A;

5.  瀏覽器在接收到這些攻擊性代碼后,根據網站 B 的請求,在用戶不知情的情況下攜帶 Cookie 信息,向網站 A 發出請求。網站 A 并不知道該請求其實是由 B 發起的,所以會根據用戶 C 的 Cookie 信息以 C 的權限處理該請求,導致來自網站 B 的惡意代碼被執行。

與XSS的區別:

XSS是通過修改頁面Javascript等代碼后,發給用戶從而實現盜取cookie信息,之后利用cookie進行登陸網站等操作。非法操作是黑客。
CSRF并沒有盜取cookie信息,而是通過用戶直接利用cookie進行操作。非法操作并不是黑客,而是用戶本身。

1、low級別

<?php

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
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}

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

?>

可以看到,源碼中的mysql_real_escape_string() 函數有防護sql注入的作用,然后就只進行了$pass_new == $pass_conf判斷,沒有進行任何的驗證。

在新密碼和確認密碼之處填寫123456

DVWA下的CSRF通關是怎樣的

burp suite抓包發現,通過get請求執行

DVWA下的CSRF通關是怎樣的

http://172.21.98.85/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

根據上面的url,進行構造payload:

http://172.21.98.85/DVWA-master/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#

這樣的payload,一般人都可以看出來存在陷進,往往不會去點擊,因此我們還需要進一步偽裝,把它縮短。

DVWA下的CSRF通關是怎樣的

DVWA下的CSRF通關是怎樣的

得到一個短的url:http://r6d.cn/9rGy,提醒一句,以后但凡看見很短的url,然后以很不常見的格式出現,千萬別著急點擊瀏覽。

DVWA下的CSRF通關是怎樣的

現在的密碼已經變成test,不再是123456。

我們還可以編輯一個頁面,填好payload,等正常用戶瀏覽訪問就執行了。

DVWA下的CSRF通關是怎樣的

后綴改成.html.就行了。

DVWA下的CSRF通關是怎樣的

真實情況下,這個html文件的表象應該具備各種誘惑力,例如,如何一夜暴富、xxx照等等,讓你情不自禁的想去瀏覽訪問。

DVWA下的CSRF通關是怎樣的

正當你想開噴時,說好的驚喜呢,怎么是404,哈哈,但其實你已經將你的密碼從test修改為password了。

DVWA下的CSRF通關是怎樣的

2、medium

<?php

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
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}
}
else {
// Didn't come from a trusted source
echo "<pre>That request didn't look correct.</pre>";
}

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

?>

先看看里面幾個重要的函數

eregi()函數: 匹配符合條件的字符串,已經被preg_match() 替代,加i不區分大小寫。
stripos函數:返回字符串在另一字符串中第一次出現的位置,如果沒有找到字符串則返回 FALSE。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['SERVER_NAME'] #當前運行腳本所在服務器主機的名稱。

同樣的內容,換成1.html

DVWA下的CSRF通關是怎樣的

DVWA下的CSRF通關是怎樣的

DVWA下的CSRF通關是怎樣的

但是實際上沒修改完成,因為這個級別的增加了Referer認證,那么將http包頭的Referer參數的值中包含主機名就行了。

3、High級別

先放棄,這個token值我一直繞不過去,表示先放棄了,大概繞過的思路知道就行,不求甚解!

4、mpossible級別

<?php 

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

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

// Sanitise current password input 
$pass_curr = stripslashes( $pass_curr ); 
$pass_curr = mysql_real_escape_string( $pass_curr ); 
$pass_curr = md5( $pass_curr ); 

// Check that the current password is correct 
$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' ); 
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR ); 
$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR ); 
$data->execute(); 

// Do both new passwords match and does the current password match the user? 
if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) { 
// It does! 
$pass_new = stripslashes( $pass_new ); 
$pass_new = mysql_real_escape_string( $pass_new ); 
$pass_new = md5( $pass_new ); 

// Update database with new password 
$data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' ); 
$data->bindParam( ':password', $pass_new, PDO::PARAM_STR ); 
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR ); 
$data->execute(); 

// Feedback for the user 
echo "<pre>Password Changed.</pre>"; 

else { 
// Issue with passwords matching 
echo "<pre>Passwords did not match or current password incorrect.</pre>"; 



// Generate Anti-CSRF token 
generateSessionToken(); 

?>

也是采用PDO技術防護了,根據現實情況,一般防護csrf的辦法最常見的就是增加原始密碼驗證,短信驗證、驗證碼驗證,這樣基本就很難進行scrf攻擊了。

看完上述內容,你們掌握DVWA下的CSRF通關是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節
推薦閱讀:
  1. dvwa使用
  2. CI的CSRF的改造

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武邑县| 错那县| 武穴市| 永川市| 漳平市| 棋牌| 信宜市| 克什克腾旗| 西安市| 兴宁市| 龙江县| 泸溪县| 浮山县| 邵武市| 临湘市| 股票| 乌拉特前旗| 合水县| 喀什市| 星座| 南郑县| 斗六市| 陇西县| 夹江县| 宁远县| 孙吴县| 高邑县| 正定县| 兴义市| 大田县| 宽城| 定安县| 上蔡县| 会宁县| 襄城县| 西乌珠穆沁旗| 西乌| 临泉县| 天气| 集安市| 周宁县|