XSS(跨站脚本攻击)学习 01

1.什么是跨站脚本攻击?

跨站脚本( Cross-site Scripting )攻击,攻击者通过网站注入点注入客户端可执行解析的payload (脚本代码),当用户访问网页时,恶意payload自动加载并执行,以达到攻击者目的(窃取cookie、恶意传播、钓鱼欺骗等)。为了避免与HTML语言中的CSS相混淆,通常称它为"XSS"。

2.危害?

  • 获取用户信息;(如浏览器信息、ip地址、cookie信息等)
  • 钓鱼; (利用xss漏洞构造出一个登录框,骗取用户账户密码,提示登录过期,模拟一个网站的登录框,将用户名、密码发送到攻击者服务器)
  • 注入木马或广告链接;(有些在主站注入非法网站的链接,对公司的声誉有一定的影响)
  • 后台增删改网站数据等操作;(配合CSRF漏洞,骗取用户点击,利用js模拟浏览器发包)
  • xss蠕虫(微博蠕虫:只要看过某人的微博就是自动关注某人;贴吧蠕虫:看过某个帖子就是自动回复这个帖子)

3. XSS 种类

3.1反射型xss

特点:仅执行一次,非持久型;参数型跨站脚本。主要存在于攻击者将恶意脚本附加到url的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。
攻击流程:
攻击者→发现存在反射型xss的url
→根据输出点环境构造xss代码
→进行编码、缩短(可有可无,仅为了增加迷惑性)
→发送给受害者
→受害者点开链接,xss代码执行
→完成攻击者代码功能。

  • 反射型xss利用场景见框就插,改url参数
  • 经典测试 <script> alert('hack')</script>
  • 大写绕过 <SCRIPT>alert('hack')</SCRIPT>
  • 双写绕过 <scr<script>ipt>alert("xss")</script>
  • 其他标签 <img src=1 onerror=alert('hack') />
  • xss.php 测试例子
<html>
<head>
<title>XSS_result</title>
</head>
<body>

<form action="" method="get">
please input your name :</br>
     <input type="text" name="name" value=""></input>
    <input type= "submit" value="submit"></input>
</form> 
<?php
  if (array_key_exists( "name" , $_REQUEST) && $_REQUEST['name'] != NULL){
	      $name= $_REQUEST['name'];
		  //str_replace()直接替换函数;区分大小写
		 // $name = str_replace( '<script>','' , $name);

		  // preg_replace() 正则替换(i表示忽视大小写)
		 // $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', "", $name );

		  //htmlspecialchars(string):
		  //把预定义的字符“<" (小于)、">” (大于)、&'、”转换为HTML实体,
		  //防止浏览器将其作为HTML元素
		  //$name = htmlspecialchars($name);
		  echo 'welcome :  '.$name;
  }
?>	
</body>
</html>	
3.2 存储型xss

特点:持久型。
主要存在于攻击者将恶意脚本存储到服务器数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

trim(string[, charlist]):
//函数移除字符串两侧的空白字符或预定义字符(\t. \n. \xOB、 \r)
stripslashes(string):
//移除字符串中的反斜杠 
mysqli_real_escape_string(connection, string) :
//对字符串中sql的特殊符号(\x00,\n,\r,),',",\x1a)进行转义
strip_tags(string, allow) 
//函数剥去字符串中的HTML、 XML以及PHP的标签;
addslashes(string)
//返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串;还有最后一道
htmlspecialchars()//函数。 
3.3 DOM型xss

特点:通过JavaScript操作document,实现dom树的重构。主要存在于用户能修改页面的dom,造成客户端payload在浏览器中执行。
url: http://localhost/security/dom_xss.php?name=alert(1)

<html>
<head>
    <title>XSS_result</title>
</head>
<body>
    <script>
        var pos = document.URL.indexOf ("name=")+5;
        eval(document.URL.substring(pos, document.URL.length));

    </script>
<h2>   var pos = document.URL.indexOf ("name=")+5;</h2>
<h2>   eval(document.URL.substring(pos, document.URL.length));</h2>

</body>
</html>

1.测试: (xss探针)
";"\<poiuyt>=&{()} '';!--"<XSS>=&{()}
–可以测试网站过滤了哪些字符,进行怎样的防护
2.查看网页源代码 (如何闭合属性、标签等)
3.构建xss payload (如何绕过等)
payload大全: https://github.com/pgaijin66/XSS-Payloads/blob/master/payload.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值