XSS : 跨站脚本攻击
将恶意的js代码进行注入
注入点的两个要求:
1.输入的东西可以在页面上显示.
2.一个可以自行控制的参数位置
GET,POST,COOKIE 如用户名输入框,留言板等
1.反射型XSS:
即输即用,插入一次而没有进入服务器的存储结构中
?wd后为传输搜索选项的内容,可以进行插入恶意代码
这样的payload较长,可能带有敏感字符如< script>标签等,
容易失败,所以可以利用网上一些缩短url工具进行欺骗
2.存储型XSS:
一劳永逸 向网页插入的代码会被网站添加到服务器的存储结构中
持久性的跨站脚本,更具威胁性
一般用来网站渗透、挂马、蠕虫病毒、钓鱼流量导流等
只要在HTML中加入< script>标签即可让浏览器执行我们需要的js脚本
Javascript脚本语言:一种直译式脚本语言
广泛用于客户端 用来给HTML网页增加动态功能
很容易被客户端修改,可以控制浏览器做各种动作例如弹窗、重定向、刷新等
XSS检测:
XSS攻击通常需要获取网站用户的登录信息,如登录账号密码或者登录凭证
通常渗透测试中我们将测试代码浓缩为:
< script>alert(1)< /script>构造网页弹窗
这个payload中包含了几乎所有XSS利用的前提条件
–可以插入< script>标签、包含js代码的函数alert,
如果浏览器弹窗,说明可能存在XSS注入
XSS构造
利用XSS漏洞,攻击者可以进行两种攻击:钓鱼和盗取Cookie
钓鱼步骤:
1.根据原始网页构造一个克隆页面
2.通过XSS将克隆页面导入网站后台
3.用户被骗后输入信息,如用户名密码
4.收集到信息后,我们将用户的用户名密码导入到钓鱼接受平台中
盗取Cookie利用原理和钓鱼相同,我们接受到用户cookie后就能够伪造身份登录后台了
留言板框的标签为< textarea>,为了屏蔽这个标签,我们使前后< textarea>闭合
如在留言板里输入< /textarea>< script …>< /script>< textarea>
XSS防御
HttpOnly属性:让我们的cookie只能被http控制而不能被js控制
XSS绕过
第一种思路:不同的标签
主要思想为
1.这个标签可以写入连接导致跳转或者包含其他页面,如< img>
2.这个标签中可以添加事件而执行js,例如< input>
< img src=“javascript:alert(‘xss’)”>可以使用js的伪协议去执行xss代码,
当然也可以在img中导入一个外网带有xss代码链接,但是也不是所有的web浏览器都支持伪协议
第二种思路:产生自己的事件
js本来就是一种动态脚本语言
如果我们的输入在input标签中,后者能够自己写入一个input标签,
就可以构建自己的事件如onclick(点击鼠标),onmouseover(鼠标移动),onkeydown(敲击键盘)等响应事件
可以利用的事件一般分为3类:
1.用户接口IO(鼠标,键盘)
2.逻辑(处理的结果)
3.变化(对文档的修改)
编码绕过、常用编码:
URL编码:通过%和ascii码编码但是要确认服务器会对我们的输入解码,否则起到反作用
HTML实体编码:命名实体:以&开头,分号结尾的,例如“<”编码为“<”
字符编码:十进制、十六进制ASCII码或unicode字符编码,样式为“&#数值”,
例如“<”可以编码为“<”和“<”
js编码:四种编码形式,例如“e”为"\145"或"\x65"或"\u0065"
css编码:用一个反斜线()后面跟1~6位的十六进制数字,例如e可以编码为“\65”或"65"或"00065"
理解XSS编码顺序:在什么位置应该被谁理解