XSS(跨站脚本攻击)多姿势绕过滤思路

XSS(跨站脚本攻击)多姿势绕过滤思路

  • 0x01 什么是XSS?
  • 0x02 XSS的危害
  • 0x03 XSS类型
  • 0x04 多姿势绕过
  • 0x05 其他情况
  • 0x06 总结


0x01 什么是XSS?

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击主要针对的是客户端的攻击。

0x02 XSS的危害

XSS能实现的的攻击有很多,一般攻击水平是取决于攻击者的js水平。

  • 针对用户:窃取cookie劫持会话、网络钓鱼、放马挖矿、广告刷流量等。

  • 针对WEB服务:劫持后台、篡改页面、传播蠕虫、内网扫描等。

0x03 XSS类型

  1. 反射型

    又被称为非持久型XSS,将JS恶意代码暂时保存到网页前端,一旦重新请求页面,恶意代码会被消除,一般用于XSS注入点的盲测或者钓鱼。

  2. 存储型

    存储型XSS,又称持久型XSS,它和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。允许用户存储数据的WEB应用程序都可能出现存储型漏洞,当攻击者提交一段XSS代码后,被服务器接受被储存,当访问者再次访问此网站,这段代码又被提取出来,响应给浏览器。形成储存型XSS漏洞攻击。

  3. DOM型

    全称Document Object Model,在网站页面中有许多页面的元素,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。简单来说DOM是通过url传入参数来触发XSS的,也可以认为是反射型的一种。

0x04 多姿势绕过

1.基本的xss

以DVWA(Reflected)的low等级举例(完全没有过滤的情况下)。


XSS(跨站脚本攻击)多姿势绕过滤思路_第1张图片

2.大小写绕过、字符拼接

以DVWA(Reflected)的middle等级举例。

源码:



header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
     
    // Get input
    $name = str_replace( '

XSS(跨站脚本攻击)多姿势绕过滤思路_第2张图片

大小写绕过:


XSS(跨站脚本攻击)多姿势绕过滤思路_第3张图片

3.解锁更多姿势

接下来以DVWA(Reflected)的high等级,来举例多种绕过过滤的方式。

先看一下high安全等级的源码



header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
     
  // Get input
  $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

  // Feedback for end user
  echo "
Hello ${name}
"
; } ?>

他用了 preg_replace函数,用正则表达式几乎完美地将\x3csVg/\x3e

0x05 其他情况

  • 过滤空格:

用/代替空格

  • 过滤关键字:

双写关键字、大小写、字符拼接、其它字符混淆、编码绕过

  • 过滤双引号,单引号:

如果是html标签中,可以不用引号。如果是在js中,可以用反引号代替单双引号。或者用编码绕过

  • 过滤URL地址:
  1. html标签中用//代替http://
``
  1. 使用中文逗号代替英文逗号

  1. 十进制IP

0x06 总结

老师说,在实际渗透中建议不用alert(),用console_log(),查看控制台是否有回显,应尽量减小对所受测试网站的影响。

你可能感兴趣的:(web安全,js,javascript,web,xss)