《XSS跨站脚本攻击剖析与防御》读书笔记

XSS一直被OWASP(Open Web Appliaction Secyritu Project,是世界上知名的Web安全与数据库安全研究组织) 组织评为十大安全漏洞中的第二威胁漏洞

HTML的script元素怒标记中间包含js,这使得浏览器知道:当遇到这一标记,不应将此标记内容处理成HTML或XHTML,从这一点开始,对于内容的控制权已经转移给另一个内置的浏览器代理——脚本引擎 处理。

弹处恶意警告框 : <script>alert('xss')</script>

也可以是HTML代码段,不停刷新网页: <meta http-equiv=" refresh " content="0;">

嵌入其他网站的链接:
<iframe src=http://www.baidu.com width=0 height=0></iframe>

反射型跨站脚本,主要将恶意脚本附加到URL地址的参数中,例如:
http://www.test.com/search.php?key="><script>alert('xss')</script>

http://www.test.com/logout.asp? out=1&javascript:alert(document.cookie)

反射型XSS恶意代码暴露在URL中,非常容易被发现,可以通过各种编码如十进制、十六进制、ESCAPE等转换解决

白盒测试是指知道程序内部的结构,也就是获得源代码的情况下对软件进行测试
黑盒测试则完全相反
灰盒测试介于两者之间

数据交互(即输入/输出)的地方最容易产生跨站脚本,因此我们着重对网站的输入框、URL参数进行测试。当然、所有来自Cookie、POST表单、HTTP头的内容都可能会产生XSS

在留言页面输入<script>alert(/XSS/)</script>,点提交页面没有任何迹象,因为用户提交的留言一般要通过后台管理员的审核才会显示

登录后台管理员账号。看到我们输入的XSS被浏览器直接显示出来了,这种情况可能是对这条XSS进行了转义

查看源代码发现XSS代码被嵌入到<textarea>标签中,然后在浏览器直接显示出来

重新修改XSS代码: </textarea><script>alert(/XSS/)</script><textarea>

这种XSS攻击的对象是后台管理员,攻击者能利用此种XSS劫持管理员会话而执行任意操作,比如修改密码、备份数据库等

XSS Cheat Sheet
中文文档
英文文档
XSS Cheat Sheet几乎涵盖了目前所有可能触发XSS的测试用例

为了防御XSS,会在WEB应用中设计一个XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击、恶意的HTML或简单的HTML格式错误等

XSS Filter一般是基于黑白名单的安全过滤策略,即把要处理的数据分成白名单和黑名单两大列表,白名单存放的是可信赖、对应用程序不构成威胁的数据列表,黑名单则相反

XSS Filter的绕过
1、🐣 利用<>标记注射Html / js
XSS Filter首当其中要过滤和转义的就是 <><script>
如此一来<script>shellcode</script>这种形式就不复存在了

2、🐣利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这个特殊的协议类型声明了URL的主体是任意的JS代码,由js的解释器运行
<table background="javascript:alert(/xss/)"></table>
<img src="javascript:alert(/xss/);">

利用IMG标记的src属性,如果没有弹出对话框,是因为不是所有Web浏览器都支持Javascript伪协议

并非所有标记的属性值都能产生XSS,只有引用文件的属性值才能触发XSS,可以用href= lowsrc= bgsound= value= action= dynsrc=

要预防属性值的XSS,就要过滤js等关键字

3、🐣回车空格Tab
如果XSS Filter仅仅把敏感的输入字符列入黑名单处理,如对敏感字javascript而言,用户可以利用空格、回车和Tab绕过限制
<img src="javas cript:alert(/xss/);">
javas和cript间加上Tab

js语句通常以分号结尾,如果js引擎确定一个语句是完整的,而这一行结尾有换行符,那么可以省略分号,如果同一行中有多个语句,那么语句就必须使用分号来结束。除了在引号中分隔单词或强制结束语句外,额外的空白无论以何种方式添加都无所谓

4、🐣对标签属性值转码
此外,对普通HTML标记的属性值进行过滤,用户还可以通过编码处理来绕过,因为HTML中属性值本身支持ASCII码形式
<img src="javascript:alert(/xss/);">替换成<img src="javascript&#116;&#58;alert(/xss/);">对应ASCII码表可以看出,t的ASCII值未116,用"&#116"表示, 冒号: 则表示为&#58

还可以把&#01、&#02等字符插入的JavaScript或VBscript的头部,另外Tab符的ASCII码&#9、换行符的&#10、回车符的&#13可以插入到代码的任意地方,末尾都需要加上分号

所以为了防范利用HTML标签属性编码的XSS,最好也过滤& # \ 等字符


5、🐣产生自己的事件
JS和HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行官的某种动作,比如click、mouseover、load等,而响应事件的函数就叫做事件处理函数(或事件侦听器)
<input type="button" value="click me" onclike="alert('click me')"/>

<img src="#" onerror=alert(/xss/)>
测试时间型的跨站,还有大量事件可以运用

6、🐣利用CSS跨站剖析

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值