专栏首页山丘安全攻防实验室一篇文章带你从XSS入门到进阶(附Fuzzing+BypassWAF+Payloads)

一篇文章带你从XSS入门到进阶(附Fuzzing+BypassWAF+Payloads)

一篇文章带你从XSS入门到进阶

山丘安全攻防实验室

大家好,我是山丘安全攻防实验室作家陈殷,今天将带大家深入浅出理解XSS攻击。

  1. XSS简介
  2. XSS分类
  3. XSS实战
  4. XSS Fuzzing
  5. XSS WAF Bypass思路
  6. XSS工具
  7. XSS修复

xss简介

OWASP TOP 10

OWASP(开放式Web应用程序安全项目)的工具、文档、论坛和全球各地分会都是开放的,对所有致力于改进应用程序安全的人士开放,其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结了Web应用程序最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。

Cross Site Scripting

跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以在代码审计中xss漏洞关键就是寻找参数未过滤的输出函数。

XSS分类

反射型XSS:<非持久化>

攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。DOM型XSS由于危害较小,我们将其归为反射型XSS。

存储型XSS:<持久化>

代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

XSS实战

说明:本文需要一定的JavaScript基础和PHP基础

工具:

PHPStudy

sublime

chrome

初探XSS原理:

我在本地环境中搭建了xss.php,访问网址为:http://127.0.0.1/engineer/xss.php

反射型XSS代码是这样写的:

访问链接后发现报错,原因是我们没有对第二行的age进行变量赋值

对其赋值:http://127.0.0.1/engineer/xss.php?age=12

查看源代码:

接下来我们对赋值的12尝试注入一个js语句

http://127.0.0.1/engineer/xss.php?age=%3Cscript%3Ealert(%27hill%20sec%20xss%20lab%27)%3C/script%3E

查看源代码

可以看到成功注入了一个script代码并执行了alert输出提示内容

存储性XSS代码:

存储型XSS的攻击流程:

打开web---->输入一个恶意代码---->恶意代码存放到数据库---->读取页面---->读取数据库---->返回web---->执行恶意代码

这个页面的功能是使用POST提交数据,生成然后再读取文本模拟数据库,提交数据之后页面会将数据写入store.txt,再打开页面时会读取store.txt中内容并输出在网页上,实现XSS Stored Attack.

第一次正常执行:

插入一个恶意JavaScript语句:

提交之后发现web触发了js代码

查看源代码

因此总结可得:

对程序的某个可控变量进行恶意JavaScript代码注入,若能被浏览器执行该程序即存在XSS漏洞

XSS小游戏过关笔记:

下载地址请关注“山丘安全攻防实验室”回复:xssgame 或自行百度下载

篇幅限制,我们挑前五关来测试,后续通关指南可关注公众号推文

首页点击进入

第一关:

猜测name参数可控,进行paylaod执行:

123<script>alert('123')</script>;

成功通关

第二关

这里我们执行上关的payload试试,但是并未成功执行

查看源代码,XSS语句被赋值给value并且在input标签里,所以我们需要闭合value和input标签就可以正常弹窗了

exp:

 1"><script>alert('1');</script>

成功执行

第三关

htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志

被转换的预定义的字符有:

使用语法:

$str = htmlspecialchars(string,flags,character-set,double_encode);

string:规定要转换的字符串;

flags :可选参数,规定如何处理引号、无效的编码以及使用哪种文档类型;

确实转义了尖括号,这里可以用单引号闭合value但是没办法闭合input标签,我们添加一个改变事件即可

 ' onchange=alert`1` //

添加一个改变事件

第四关

第四关的代码和第三关的代码大同小异,把源码里面单引号变成了双引号,同样事件弹窗即可

把payload改一下就oki

第五关

第五关难度提升,过滤了script和onclick标签,但是没过滤a标签

paylaod:

 "><a href=" javascript:alert(1)"

成功执行

XSS Fuzzing

工具:

BurpSuite+XSS Payloads+PayloadFix(工具在文末)

运行环境:python3

工具说明:

该工具可以将每行payload进行处理,以此再进行批量fuzz更好的定位有效攻击代码。

使用方法:

请准备原版XssPayload.txt,每行一个payload,运行PayloadFix.py即可进行payloads处理

Fuzzing思路:

找到一个输入点,生成Payloads,进行paylaods测试

测试实例:

国内某家大厂Mail Fuzzing XSS 测试

首先使用PayloadFix进行paylaods处理

选择HTML模式

输入payloads后发送

定位640payload

Fuzzing思路over,各大Mail我都玩过了,别再提交让审核受罪了

XSS WAF Bypass

WAF产品:360主机卫士

环境:PHPStudy 2018 --- Apache+PHP

说明:360主机卫士目前已停止维护

测试步骤:

第一步,安装360主机卫士

第二步,编写测试环境

第三步:测试防护规则

<svg onload> 拦截

<svg > onload>不拦截

绕过就是先把 > html实体编码

“>”对应的是

接着将 &#62 URL编码

大部分 xss payloads 加上 %26%2362 即可绕过,但是类似 alert(1) 括号可能会被拦截 可以用反引号替换

举个栗子:

Bypass截图:

成功Bypass 360主机

同样还有很多绕过方法,网上给出了很多文章,这里不在一一举例,只做一个思路进行分析。

至于其他特殊字符是否也有绕过,欢迎各位师傅到交流群或和我讨论。

XSS工具

由于篇幅限制,这里只进行工具推荐,具体操作需要大家手动操作

XSStrike

XSStrike is a Cross Site Scripting detection suite equipped with four hand written parsers, an intelligent payload generator, a powerful fuzzing engine and an incredibly fast crawler.

https://github.com/s0md3v/XSStrike

xsscrapy

Fast, thorough, XSS/SQLi spider. Give it a URL and it'll test every link it finds for cross-site scripting and some SQL injection vulnerabilities. See FAQ for more details about SQLi detection.

https://github.com/DanMcInerney/xsscrapy

XSSSNIPER

xsssniper is an handy xss discovery tool with mass scanning functionalities.

https://github.com/gbrindisi/xsssniper

BeEF

BeEF is short for The Browser Exploitation Framework. It is a penetration testing tool that focuses on the web browser.

https://github.com/beefproject/beef

XSS platform

XSS Platform 是一个非常经典的XSS渗透测试管理系统

https://github.com/78778443/xssplatform

XSS修复

XSS跨站漏洞最终形成的原因是对输入与输出没有严格过滤。

结语:

要想学好XSS,终究还是考察大家对JavaScript和PHP的掌握程度,所以请在学习安全测试之前熟练掌握一门以上的开发语言。

文章为基础文章,若文章有错误请各位大佬指出,更多思路欢迎加山丘安全攻防实验室群或者私聊进行讨论。

文中的工具:

XSS-Games:关注“山丘安全攻防实验室”回复xssgame

PayloadFix:关注“山丘安全攻防实验室”回复payloadfix

PayloadFix 下载链接:https://github.com/evai1/PayloadFix(内附5000+ XSS Payloads)

上期MSF下载链接:https://github.com/evai1/MetaSploit

(说明:转载请联系山丘安全攻防实验室公众号运营开白,或在开头注明来源和作者)

本文分享自微信公众号 - 山丘安全攻防实验室(hillsec),作者:陈殷

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis 4.x 5.x漏洞手动复现

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    陈殷
  • 域渗透之NTML-Hash

    早期SMB协议在网络上传输明文口令。后来出现"LAN Manager Challenge/Response"验证机制,简称LM,它是如此简单以至很容易被破解。...

    陈殷
  • 看我如何利用社会工程学+XSS组合拳击碎骗子的心肝脏脾!

    陈殷
  • web安全之XSS攻击

    大象无痕
  • 跨站的艺术-XSS入门与介绍

    什么是XSS? XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写...

    云鼎实验室
  • xss备忘录

    cn0sec
  • 软件安全性测试(连载3)

    XSS(Cross SiteScripting),由于与层叠样式表(CascadingStyle Sheets,CSS)的缩写混淆。因此一般缩写为XSS。XSS...

    小老鼠
  • 从零开始学web安全(1)

    一直对web安全很感兴趣,却一直只是略懂一点。决定从现在开始学起web安全的知识,更新起web安全系列的文章。文章内容为作者自己边学边写的,不对之处多谢各位大大...

    IMWeb前端团队
  • XSS防御指北

    XSS攻击,对于各位黑客大佬应该算是熟悉的不能再熟悉了,但是为了在座的各位吃瓜群众,小编我还是先简单的在此介绍下。XSS攻击全称为跨站脚本攻击,是...

    用户2202688
  • 【XSS漏洞】XSS漏洞相关总结v1.0

    通常指攻击者通过“HTML注入”篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击手段 。

    一名白帽的成长史

扫码关注云+社区

领取腾讯云代金券