实习第四天报告(8.29)

目录

知识点

Post与Get报文区别

GET 

POST 

比较 GET 与 POST

反射型、存储型、DOM型XSS特点和区别

反射型XSS

存储型XSS

DOM型XSS

区别总结

Fuzz字典

浏览器解析机制

靶场实战

Pikachu靶场

反射型xss(get)

反射型xss(post)

存储型xss

DOM型xss

XSS挑战靶场

第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关



知识点

Post与Get报文区别

GET 

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

POST 

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

比较 GET 与 POST

GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。
历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制有限制。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !
POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

反射型、存储型、DOM型XSS特点和区别

反射型(Reflected)、存储型(Stored)和DOM型(DOM-based)XSS是跨站脚本攻击(Cross-Site Scripting, XSS)的三种主要类型,它们各自具有独特的特点和区别。以下是对这三种XSS类型的详细总结和对比:

反射型XSS

特点

非持久性:反射型XSS的攻击载荷(payload)不会保存在目标服务器上,而是通过URL参数、表单字段或HTTP头等方式即时传送给受害者浏览器并执行。

特定性:攻击对象是特定的,通常需要受害者点击一个包含恶意脚本的链接才能触发攻击。

前端执行:恶意脚本在受害者的浏览器前端执行,不涉及服务器端的直接交互。

危害:窃取用户cookie等敏感信息;冒充用户身份进行非法操作。

存储型XSS

特点

持久性:由于攻击脚本被永久地存储在目标服务器的数据库或文件中,只要受害者访问包含该恶意脚本的页面,就会被执行。

广泛影响:非特定攻击用户,任何访问该页面的用户都可能成为受害者。

隐蔽性高:由于攻击脚本存储在服务器上,其隐蔽性较反射型XSS更高。

危害:波及范围广,可能导致大量用户受害;恶意脚本可以长期潜伏,难以被及时发现和清除;可能导致网站被用作DDoS攻击的肉鸡。

DOM型XSS

特点

客户端执行:DOM型XSS完全在客户端执行,不涉及服务器端的任何交互。攻击者通过修改DOM节点来执行恶意脚本。

隐蔽性:由于攻击发生在客户端,服务器端的日志可能不会记录任何异常,这使得检测和追踪变得更加困难。

动态内容相关:攻击通常与网页的动态生成内容有关,如JavaScript生成的内容。

危害:窃取用户敏感信息;修改页面内容,误导用户;执行其他恶意活动,如发送恶意请求等。

区别总结

反射型XSS存储型XSSDOM型XSS
存储位置不保存在服务器上,通过URL等即时传输永久保存在服务器数据库或文件中不保存在服务器上,在客户端执行
攻击对象特定用户,需点击恶意链接非特定用户,访问页面即可能被攻击访问页面的用户,但依赖于DOM操作
持久性非持久性持久性非持久性(但依赖于页面加载和DOM操作)
攻击方式通过URL参数等即时传输恶意脚本恶意脚本存储在服务器上,用户访问时自动执行修改DOM节点执行恶意脚本
服务端参与不涉及服务器直接解析响应涉及服务器存储和返回恶意脚本不涉及服务器直接解析响应
检测难度中等,可通过URL分析发现高,因为恶意脚本存储在服务器上高,因为攻击发生在客户端,日志中无记录


Fuzz字典

在XSS(跨站脚本攻击)的fuzz测试中,fuzz字典包含了用于测试的各种输入值,目的在于触发潜在的XSS漏洞。下面是一些常用的字典介绍及GitHub链接

XSS Fuzz字典下载

FuzzDB:一个广泛使用的fuzzing字典项目,包含了多种类型的fuzzing字典,包括针对XSS的字典。可以从GitHub上的FuzzDB项目页面下载:https://github.com/fuzzdb-project/fuzzdb

AwesomeXSS:AwesomeXSS是一个集合了多种XSS相关资源的项目,其中也包括了一些fuzz字典。可在GitHub上的AwesomeXSS项目页面下载:https://github.com/s0md3v/AwesomeXSS

PayloadsAllTheThings:一个包含各种类型payload的集合,其中也包括了用于XSS测试的payload,可以作为fuzz字典的一部分。可在GitHub上的PayloadsAllTheThings项目页面下载:https://github.com/swisskyrepo/PayloadsAllTheThings

SecLists:SecLists是一个安全相关的列表集合,其中包含了多种类型的fuzz字典,包括针对XSS的字典,可在GitHub上的SecLists项目页面下载:https://github.com/danielmiessler/SecLists

XSS Fuzz字典生成工具

Crunch:Crunch是一种创建密码字典的工具,但同样可以用于生成XSS fuzz字典。它可以按照指定的规则生成密码或输入值,非常适合用于fuzz测试;Crunch可以在Kali Linux等渗透测试环境中使用,通过命令行参数指定生成字典的规则。

自定义脚本:除了现成的工具外,还可以根据具体需求编写自定义脚本来生成XSS fuzz字典。例如,可以根据目标网站的特点,生成包含特定关键字或特殊字符的字典;也可以使用Python、Bash等脚本语言编写脚本,通过读取预定义的输入值或生成算法来生成字典

浏览器解析机制

浏览器的解析机制是一个复杂且高效的过程,涉及多个阶段和组件的协同工作。以下是浏览器解析机制的一个总结:

URL解析与缓存检查

URL解析:当用户在浏览器中输入一个URL并发送请求时,浏览器首先会对URL进行解析,识别出协议(如http、https)、域名、端口号(如果未指定,则使用默认端口,如http的80,https的443)和路径等信息。

缓存检查:在发送网络请求前,浏览器会检查本地缓存(包括浏览器缓存、系统缓存和ISP缓存)中是否已有对应请求的资源的副本。如果缓存中存在且未过期,则直接从缓存中加载资源,以节省时间和带宽。

DNS域名解析

如果本地缓存中没有找到所需资源,浏览器会进行DNS查询,以获取域名对应的IP地址。DNS查询是一个递归查询过程,可能涉及多个DNS服务器。

建立连接与发送请求

浏览器使用解析出的IP地址和端口号,与服务器建立TCP连接(对于HTTPS,则是TLS加密的TCP连接)。

连接建立后,浏览器向服务器发送HTTP请求,请求中包含请求的资源路径、请求方法(如GET、POST)、请求头等信息。

服务器响应

服务器接收到请求后,处理请求并返回响应。响应中包含状态码(如200 OK表示成功)、响应头(如Content-Type指定资源类型)和响应体(即实际请求的资源内容)。

浏览器解析响应

解析HTML:浏览器接收到HTML文档后,开始解析HTML。HTML解析器将HTML文档转换成DOM(文档对象模型)树。在解析过程中,如果遇到JavaScript或CSS文件,浏览器会暂停HTML的解析,转而加载和执行这些文件。

构建CSSOM:浏览器同时解析CSS文件,构建CSSOM(CSS对象模型)。CSSOM描述了样式信息。

构建渲染树:将DOM和CSSOM结合,构建渲染树(Render Tree)。渲染树只包含需要显示的节点和样式信息。

布局与绘制:浏览器根据渲染树进行布局计算,确定每个节点在页面上的位置和大小。然后,合成线程将渲染树转换成屏幕上的像素,最终呈现给用户。

JavaScript执行

JavaScript的执行会影响DOM和CSSOM的构建,进而影响渲染树和最终的页面呈现。如果JavaScript修改了DOM或CSSOM,浏览器可能需要重新计算布局和重绘。

异步处理

浏览器支持异步加载资源(如图片、脚本等),以加快页面加载速度。异步加载的资源不会阻塞HTML的解析和渲染。

安全机制

浏览器还实现了多种安全机制,如同源策略、CORS(跨源资源共享)、CSP(内容安全策略)等,以保护用户免受跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全威胁。

靶场实战

Pikachu靶场

反射型xss(get)

查看题目

更改输入栏属性,增大输入长度,输入恶意脚本语句

点击submit,弹出窗口

由于本题是反射型xss(get),我们同样可以在URL中输入恶意语句,且无长度限制

修改URL后回车,同样能弹出恶意窗口

同样使用HackBar插件也能实现恶意弹窗

反射型xss(post)

使用之前在弱口令爆破中得到的账户密码admin - 123456成功登录

登录后在输入栏输入kobe,submit后发现已无法在URL中修改请求中message内容

在输入栏输入恶意语句,点击submit,获得cookie,由于是Post型请求,这次我们在URL中没有看到输入的恶意语句

使用BP内置浏览器重复操作,将Post请求发送到重放器

在重放器中修改message内容为恶意代码,发送后查看响应内容,搜索恶意代码内容,发现其已成功提交,但页面渲染没有显示

存储型xss

由于是存储型xss,随意输入留言内容

使用bp抓取刚刚留言的请求包,发送到repeater,点击发送,在响应包中搜索留言内容,得到存储位置

直接发送恶意代码,弹出恶意窗口

此时我们重复操作,依然能在Repeater得到的返回响应里发现恶意代码已被存储,此时只要一点开“存储型xss”连接,即会弹出恶意窗口

DOM型xss

输入框输入恶意代码,没有弹窗,点击'>what do you see链接,服务器出现错误;检查输入框,分析一下前端网页代码,可以发现输入框里的参数会被传递给A标签的href属性。

查看网页源代码,发现'"+str+"'语句会将用户输入的恶意语句转化为字符串而不执行,且由于a标签里不允许套script标签,所以我们选择闭合单引号和a标签,再进行恶意语句输入

重新输入恶意语句:'><img src="#" οnmοuseοver="alert('xss')">,提交后将鼠标移动到img上,跳出恶意窗口

XSS挑战靶场

第一关

观察URL,发现name=list可注入语句

将test改为恶意脚本语句,回车,完成

第二关

尝试在输入框内直接输入脚本语句,发现没有弹窗

查看网页源代码,发现输入脚本语句中的“<>”被实体转义了,而value中的“<>”并没有被转义,所以我们可以选择输入字符闭合绕过,使得脚本语句正常注入

输入修改后的脚本语句,弹窗,完成

第三关

尝试输入脚本语句,未弹窗,查看网页源代码,发现此次两处的脚本语句中的"<>"均被实体转义

同样尝试闭合绕过方法,发现没有弹窗,查看源代码,发现“<>”仍被实体转义

因为<>会被过滤掉,所以在这里我们可以尝试利用onfocus事件绕过,先简单介绍一下onfocus事件

详见onfocus 事件 | 菜鸟教程 (runoob.com)

onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload如下:

' οnfοcus=javascript:alert() '

JavaScript伪协议补充:通俗地讲,JavaScript伪协议不是真实存在的协议,它的功能是将JavaScript:后面的语句当做JavaScript代码在本页面执行,并不跳转到其他网页,而是结果返给当前页面,相当于一个伪造的超链接。点击输入框,即弹窗,完成

第四关

查看网页源代码,发现与第三关类似,同样是input标签,只是把单引号换成了双引号

同理,双引号闭合,使用onfocous语句输入,点击输入框,弹窗,完成

第五关

尝试使用三四关方法,输入“ οnfοcus=javascript:alert() ”,未弹窗,查看源代码,发现on被替换成了o_n

此时只能新找一个方法进行xss注入,这里我们用a href标签法,与之前的Pikachu靶场的第四题类似,只是这一次我们要利用a href标签生成的链接来进行xss

href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码,于是我们需要添加一个a标签,且需要闭合绕过,构建payload如下

"> <a href=javascript:alert()>click me!</a> <"

输入代码并搜索后,点击生成链接,弹窗,完成

第六关

随意输入payload,并查看源代码,发现过滤内容较多,尝试大小写绕过

大小写绕过补充:一般后台对输入进行过滤有两种方法:使用正则匹配,一旦匹配成功就会被删除掉;用查找的函数查找,被函数查找到的内容也会被删除。而这两种方法可以用大小写混合的方式进行绕过,因为后端是不管大小写的,可以正常执行我们的语句,输入大小写拼凑的payload,查看源代码,没有被过滤。

弹窗,完成

第七关

随意输入payload,查看源代码,发现script关键字全部被过滤掉了,但是只过滤掉了script,因此我们可以利用双拼写来绕过,即将script关键字替换为scrscriptipt,当中间的script被删掉后,两边的scr和ipt重新拼凑为script,从而达到绕过的目的

输入修改后的payload:"> <scrscriptipt>alert("fku")</scrscriptipt> <",弹窗,完成

第八关

随意输入payload,查看源代码发现script变为scr_ipt,且双引号被实体转义

尝试将payload:javascript:alert()使用unicode编码后输入,点击友情链接,弹窗,完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值