A.XSS
xss是web攻击的首要大敌之一.全称cross site script(跨站脚本) 其实本质也是一种插入js/css代码的注入.
只不过是针对前段而言.当用户在浏览网页的时候触发.上图:
安装锁的师傅如果自己留了一把备用的钥匙,就可以达到跟主人同样的访问权限.在web世界中,cookie就是这样的钥匙,如果获得了用户了cookie,就可以模拟成原用户登录.
XSS常见三种类型
- 存储型
- 反射
- dom形
下面一个个的说明
a.存储型XSS
访问网站,触发xss,常用alert()标注xss存在的地方.就像一个隐藏的地雷.xss的脚本是存储在数据库中的,那么黑客什么时候把它存进去的呢.
第一步,黑客构造xss脚本植入到db.
第二步,用户访问网页,触发黑客上传的xss页面
下面上实际的demo,页面基于安全心得(一)的php页面.已经有了完整的CURD跟登录管理功能.
打开两个不同的浏览器窗口,一个是审核留言的后台.一个是提交留言任何用户都能访问的前台.然后如图
添加留言之后.再访问后台,发现xss已经注入,但是被截断了(等于失效):
思考可能是因为空格字符或者是检测到了常见xss注入,google做了反插入.试试 / code /
然后去掉空格.发现终于成功.说明chrome自身对特殊的插入js就会做基本的控制.这是存储型XSS的体现.实际操作中,黑客只需要把alert改为自己的js脚本,就能偷偷执行任何的远程代码.危害很大
b.反射形XSS
访问携带xss的链接触发.跟上面不同的是,反射形xss的url中就能看到脚本的插入.
定位通过浏览器的inspect找到源码所在. 为什么会 出现这种xss呢,以php demo为例
那么,从用户开始点击.到最后产生xss.过程是怎么样的呢.
可以对比存储型的xss,存储型xss保存在用户的电脑上,时间比较长
反射形xss的形成只需要一步. 存储型xss是从db中读取xss数据. 反射形xss直接从请求读取.
实际操作中,发现chrome58会把url中的空格自动转义.edge不会,成功注入.
3.DOM型XSS
dom型xss也需要用户主动访问一个url,url中也有明显的js代码. 那么他跟反射形xss的区别在哪呢.
最大的区别在,dom型不需要通过后台,直接在前端生效.而反射形需要通过后台解析.如图
那在url上的区别也很明显,比如反射形xss的js嵌入是在传入到后台的参数?xxxx中
dom型xss的实例demo.在登录界面为例,输入了一个错误的账号密码之后是这样的.
然后试着修改url
为什么#之后的hash就可以修改本身的节点呢?查看源码发现是因为这个值会被第二行写入了dom节点
4.总结
通过掌握,使用,演练几种xss,以及分析对比.可以基本了解常见的xss注入方法跟原理.















