THIS IS B3c0me

记录生活中的点点滴滴

0%

Xss

原理

原理

XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、、等各种方式使得用户浏览这个页面时,触发对被攻击站点的http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过script 来发起的,因此被称为Cross Site Script。攻击Yahoo Mail 的Yamanner 蠕虫是一个著名的XSS 攻击实例。YahooMail 系统有一个漏洞,当用户在web 上察看信件时,有可能执行到信件内的javascript 代码。病毒可以利用这个漏洞使被攻击用户运行病毒的script。同时Yahoo Mail 系统使用了Ajax技术,这样病毒的script可以很容易的向Yahoo Mail 系统发起ajax 请求,从而得到用户的地址簿,并发送病毒给他人。

危害

通过js脚本来实现的浏览器内核版本也会影响到js代码的实现

1、钓鱼欺骗

2、网站挂马

3、身份盗用

4、盗取网站用户信息

5、垃圾信息发送

6、劫持用户Web行为

7、XSS蠕虫

分类

反射型XSS

把用户输入的数据“反射”给浏览器,也叫非持久型XSS

存储型XSS

把用户输入的数据存储在服务器端,也就持久型XSS

DOM型XSS

从效果上来说也是反射型XSS。通过修改页面的DOM结点形成的XSS

手法

常用的测试语句

1
2
3
4
5
<script language='javascript'>alert('test!');</script>
<script>alert('test')</script>
<svg/onload=alert(1)> ">
<svg/onload=alert(1)// onfocus=javascript:alert(2)
" onmouseover="prompt('xss')" bad=

绕过

httponly代码及绕过

  • 什么是HttpOnly?

如果HTTP响应头中包含HttpOnly标志,只要浏览器支持HttpOnly标志,客户端脚本就无法访问cookie。因此,即使存在跨站点脚本(XSS)缺陷,且用户意外访问利用此漏洞的链接,浏览器也不会向第三方透露cookie。如果浏览器不支持HttpOnly并且网站尝试设置HttpOnly cookie,浏览器会忽略HttpOnly标志,从而创建一个传统的,脚本可访问的cookie。将cookie设置成HttpOnly是为了防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。

  • HttpOnly的设置样例

    • javaEE

      1
      2
      3
      4
      response.setHeader("Set-Cookie", "cookiename=value; 
      Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

      具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取Cookie cookies[]=request.getCookies();
    • C#

      1
      2
      3
      HttpCookie myCookie = new HttpCookie("myCookie"); 
      myCookie.HttpOnly = true;
      Response.AppendCookie(myCookie);
    • VB.NET

      1
      2
      3
      4
      5
      6
      7
      Dim myCookie As HttpCookie = new HttpCookie("myCookie") 
      myCookie.HttpOnly = True
      Response.AppendCookie(myCookie)

      但是在 .NET 1.1 ,中您需要手动添加

      Response.Cookies[cookie].Path += ";HTTPOnly";
    • PHP4

      1
      header("Set-Cookie: hidden=value; httpOnly");
    • PHP5

      1
      setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE)  #最后一个参数为HttpOnly属性
    • 如何在JAVA中设置cookie为HttpOnly

      Servlet 2.5 API 不支持 cookie设置HttpOnly http://docs.oracle.com/cd/E17802_01/products/products/servlet/2.5/docs/servlet-2_5-mr2/

      建议升级Tomcat7.0,它已经实现了Servlet3.0http://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/http/Cookie.html但是苦逼的是现实是,老板是不会让你升级的。

      另一种方法:设置Set-Cookie的值cookie字符串的格式:key=value; Expires=date; Path=path; Domain=domain; Secure; HttpOnly

      1
      2
      3
      4
      5
      6
      7
      //设置cookie
      response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly");
      //设置多个cookie
      response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly");
      response.addHeader("Set-Cookie", "timeout=30; Path=/test; HttpOnly");
      //设置https的cookie
      response.addHeader("Set-Cookie", "uid=112; Path=/; Secure; HttpOnly")

      在实际使用中,我们可以使FireCookie查看我们设置的Cookie 是否是HttpOnly

  • 使用HttpOnly减轻最常见的[XSS攻击

    根据微软Secure Windows Initiative小组的高级安全项目经理Michael Howard的说法,大多数XSS攻击的目的都是盗窃cookie。服务端可以通过在它创建的cookie上设置HttpOnly标志来缓解这个问题,指出不应在客户端上访问cookie。客户端脚本代码尝试读取包含HttpOnly标志的cookie,如果浏览器支持HttpOnly,则返回一个空字符串作为结果。这样能够阻止恶意代码(通常是XSS攻击)将cookie数据发到攻击者网站。

  • 用好Web应用防火墙

    如果代码更改不可行或成本太高,可以使用Web应用程序防火墙将HttpOnly添加到会话cookieMod_security - using SecRule and Header directivesESAPI WAF - using add-http-only-flag directive支持HttpOnly的主流浏览器有哪些呢?谷歌了一下,常见的浏览器都支持。

  • httponly绕过

    可以直接拿账号密码cookie登录. 浏览器未保存读取密码:需要xss产生于登录地址,利用表单劫持浏览器保存账号密码:产生在后台的XSS,例如存储型XSS

waf绕过

waf分类

  • 0x01 云waf

    在配置云waf时(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在请求uri时,数据包就会先经过云waf进行检测,如果通过再将数据包流给主机。

  • 0x02 主机防护软件

    在主机上预先安装了这种防护软件,可用于扫描和保护主机(废话),和监听web端口的流量是否有恶意的,所以这种从功能上讲较为全面。这里再插一嘴,mod_security、ngx-lua-waf这类开源waf虽然看起来不错,但是有个弱点就是升级的成本会高一些。

  • 0x03 硬件ips/ids防护、硬件waf

    使用专门硬件防护设备的方式,当向主机请求时,会先将流量经过此设备进行流量清洗和拦截,如果通过再将数据包流给主机

waf身份认证阶段的绕过

WAF有一个白名单,在白名单内的客户请求将不做检测

  • 0x01 伪造搜索引擎

    早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击,这里推荐一个谷歌插件,可以修改User-Agent,叫User-Agent Switcher

  • 0x02 伪造白名单特殊目录

    360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截,比如GET /pen/news.php?id=1 union select user,password from mysql.user可以改为GET /pen/news.php/admin?id=1 union select user,password from mysql.user或者GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user

  • 0x03 直接攻击源站

    这个方法可以用于安全宝、加速乐等云WAF,云WAF的原理通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进行过滤,最后访问原始服务器,如果我们能通过一些手段(比如c段、社工)找到原始的服务器地址,便可以绕过。

waf数据包解析阶段的绕过

  • 0x01 编码绕过

最常见的方法之一,可以进行urlencode。

  • 0x02 修改请求方式绕过

大家都知道cookie中转注入,最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。还有就是参数污染,典型例子就是multipart请求绕过,在POST请求中添加一个上传文件,绕过了绝大多数WAF。

  • 0x03 复参数绕过

例如一个请求是这样的GET /pen/news.PHP?id=1 union select user,password from MySQL.user可以修改为GET /pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user很多WAF都可以这样绕

waf触发规则的绕过

WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法很多,也是最有效的。

  • **0x01 特殊字符替换空格 **

用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在sqlserver中可以用/**/代替空格

  • 0x02 特殊字符拼接

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接,例如GET /pen/news.php?id=1;exec(master..xp_cmdshell ‘net user’)可以改为GET /pen/news.php?id=1; exec(‘maste’+’r..xp’+’_cmdshell’+’”net user”‘)

  • 0x03 注释包含关键字

mysql中,可以利用/!/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。例如,GET /pen/news.php?id=1 union select user,password from mysql.user可以改为GET /pen/news.php?id=1 /!union/ /!select/ user,password /!from/ mysql.user

XSS绕过waf方法总结

1.script标签

2.javascript事件

3.行内样式

4.CSS import

5.Javascript URL

6.利用字符编码

7 .绕过长度限制

8.使用标签

修复

欢迎关注我的其它发布渠道