常见的漏洞攻击:
1、xss:是跨站脚本攻击
分3类:1、存储型2、反射型3、蠕虫型
2、csrf:是跨站请求伪造攻击
分2类:1、get型2、post型
3、sql注入
4、文件上传
xss攻击:
xss攻击可以:盗取用户账号、也可以盗取后进行非法转账、还可以篡改系统信息、网站挂马等
存储型xss
下面我们来看下盗号代码(存储型xss):
1、通过在浏览器f12 console中输入:
2、document.cookie获取得到的cookie是什么样的
提示:如果对cookie有什么不理解的,可以参考我这篇博客http://blog.csdn.net/qq_33862644/article/details/78944811
3、盗号的原理:
第1次发送请求。服务器响应的时候,会把session中的字符串带上返回,存储到浏览器的cookie中
第2次发送请求,会带上cookie(存储服务器带过来的字符串)去服务器的session中找,看是哪一个用户发送的请求
4、寻找登录用的cookie
5、怎么防止利用cookie来进行盗号攻击呢?
设置cookie的时候加上httponly。可以使用php可以使用内置的setcookie()
下面我们来看下非法转账(存储型xss):
通过浏览器f12查看他的html结构,然后自己模拟收款人的信息,通过点击事件进行转账
3、如何把js注入到转账页面
思路:在后台注入(如 博客后台发文章的编辑器中,别人一但浏览文章,就会中招)
注意:想注入到别人的后台,需要使用反射型的xss攻击
反射型的xss
4、使用反型的xss(请ctrl+f 存储型和反射行xss的区别)
根据后台页面的地址,构建非法链接
找一些博客或论坛写帖子。把链接隐藏放到帖子中(不要问我怎么隐藏,使用a标签就可以)
勾引其他用户点击链接。当其他用户点击链接后跳转到他自己的转账页面,如果链接参数上带我们伪造的非法参数,该js能够运行,就可以对他进行攻击
5、当然,支付公司也不傻,人家肯定有代码反射(就是有防范)
6、人家防我们就攻咯
他给转成url编码了(想快速知道实体编码和url编码的区别,请ctrl+f 实体编码和url编码的区别)
7、这回我们用实体编码尝试越狱
思路:使用"替代双引号
注意:用实体编码"生成的双引号是不能真正越狱的。因为
使用url编码的%26来替代url的参数分隔符&
蠕虫型的xss
1、在页面中,注入js。这段js就像蠕虫一样,寄生在我们的页面中
2、用户小王访问后,js就会发生功效(如 以用户身份在该用户后台提交(发表)一篇文章)
3、这篇文章已经被感染了,而且还可以再次注入其他的js
4、小王的小伙伴儿们一看小王发表了文章,就都去点击查看了 或 点赞
4.1、当小王的小伙伴儿们去浏览这篇文章的时候,js又发挥了作用
5、这段js就会以小王小伙儿们的身份,在他们的后台去发表更多的文章,从而感染 更多的页面....
感染方式成指数性增长
案例:新浪微博之前遭受的xss蠕虫
1、作者先用的是反射型xss攻击(在url中加入js代码)
此时:
然后用的是蠕虫xss攻击:
以下为t.js中的代码(因为这3点很符合蠕虫特性):
publish() 以我们的身份发表一篇微博
follow() 让我们自动关注攻击的一个作者(涨粉利器啊)
message() 轮询我们的好友,向我们的好友发送私信
random_msg()中都是一些火辣辣的信息,会吸引眼球,点击后跳转到163...
20行这个短连接中也会进行二次跳转,跳转回我们的微博,并且跳回微博的时候,还会携带上这个
攻击代码xss的防范手段
思路:将xss注入到页面里的js代码,进行相应的html实体编码。实体编码后的代码浏览器就无法执行了
实现:使用yii2框架中的方法
2、过滤攻防
什么是lexer技术?
浏览器在显示一个页面的时候,首先会从服务器获取并解析前端代码--》解析的时候要识别出js、css、html识别的过程就是词法的解析--》词法的解析用到的就是lexer技术。相当于是解析的时候,看见js代码就直接过滤了。process()里就用到了lexer技术
为什么要用lexer技术?
js代码可变成的样子太多。如果使用正则替换,很容易被**,构造一个全面正则也很麻烦。用啥也不如直接用lexer技术 省事又安全。
csrf攻击:
1、get型攻击
注意:get请求传递的参数,最好不要参与到后台的【改和删】
往各个论坛发帖,将此url隐藏在这
用户对这个帖子感兴趣,点击进来了,并且他已经登录到了这个银行里面去。这样他点击进去之后,就可以通过自己的账户给李四转账400块钱
2、post攻击
第1步:伪造from表单,提交到源from表单所指向的后台处理页面(控制器/方法(逻辑))
第2步:诱导用户来到伪造的from表单
注意:诱导之前要想办法让用户A先登录到源from表单所在的系统。然后通过伪造的from表单,我们提交数据(显示的是用户A在操作),对原表单网站进行各种操作
3、如何防范
思路1:通过验证码(影响用户体验)
思路2:通过请求头中的referer头(会记录每次请求,都是从哪个页面发出来的),根据请求来源做判断,是不是本站发出的请求
但是有些请求不会带referer头。这样就没办法防范了
思路3:服务器返回数据(响应)的时候会带上一串防伪字符,该防伪字符会记录到表单里面。再次发送请求时,服务器效验有没有防伪字符,该防伪字符对不对,是不是我发出的
思路4:直接给yii2框架带的csrf打开
csrf的验证原理:
第1步:在服务器这边,通过csrfToken属性生成一个效验的字符串
第2步:客户端使用发送请求的时候,将csrfToken当做参数传给视图层。再次发送请求(提交表单)的时候,客户端就会携带上csrfToken
第3步:服务端效验,csrfToken是否一致
服务器端的csrfToken存放在哪里?
一般以session的形式存储。这样的话会引起问题,一但用户访问的比较多,提交的表单也比较多。在服务器这边存储的csrfToken值也会很多,会对服务器的内存造成一定的影响。
yii2框架会把,服务器生成的csrtToken不仅在form表单中存储一份。以cookie的方式再次发送浏览器,让浏览器里面的cookie也保存一份,在cookie中也叫_csrf。一但用户提交from表单,提交的时候会携带2份_csrf。服务器对比这2份_csrf是否一致,这样也会引起问题。
如:黑客伪造表单,只需要在伪造的表单中藏一份_csrf,在将这份_csrf放到cookie里。这样也会通过效验。
当把_csrf以cookie的形式传递给浏览器的时候,会做一次加密,这样cookie和表单中的_csrf就不一样了。到服务器端,先给从cookie中获取到的解密。在效验这俩份_csrf是否一致
使用yii2框架的代码示例:
后台:
前台:模板中(每个表单都要带哦)
sql注入:
你接收的是一个文本,但是你要使用html的格式去解析。如果你遇见了不认识的β字符,你可以试着去使用utf-8编码去解析
防范:使用pdo
参考:慕课yii2安全篇6-2(9分钟开始,讲使用wireshark工具,进行抓包(抓php和mysql之间的包))
文件上传:
案例:上传的时候是一张图片。保存(下载)的时候,变成php文件
如果不带enctype(from表单中的属性)就不能上传,因为from表单会把提交的数据,进行一次url编码
编码本身就耗费时间。编码之后还会变的更大。所以不能上传文件
绕过效验:
1、文件检测时容易发生的第1个问题:在操作系统中给文件起名字的时候,有些字符是不允许出现在文件名当中。通过这一特点来展现文件上传的漏洞
参考:慕课yii2安全篇6-2(3分钟开始,使用fiddler对漏洞进行攻击)
操作系统不允许使用冒号,文件名中有也不会报错,而是直接创建
2、文件检测时容易发生的第2个问题:提交数据的时候,浏览器也会对上传的文件,进行一系列的检测。检测之后会把这个文件(就是浏览器认为的这个文件)的类型写到请求当中去--》所以在请求中就会包含这个文件类型的一些相关信息
在fiddler中连文件名都可以修改,更合况一个类型信息呢。
防范:1、对用户上传的文件进行类型检测
2、类型检测通过之后,试图把文件从临时目录保存到目标目录的时候,一定要改文件名
附录
实体编码和url编码的区别:
实体编码是&xx。
url编码是%xx
url编码表:也可以使用js的escape()来查看;也可以用unescape()将url编码转换回来
存储型和反射行和蠕虫型xss的区别:
1、存储型xss攻击(先获得到cookie存起来,发到服务器效验)。解决方法:setcookie的时候,加上httponly
2、反射型的xss:是说我们的url中有js代码。
原理:当这个js代码传递给我们的后台服务器的时候--》我们后台服务器是原原本本的把这段js返回给客户端页面-->然后在页面中,浏览器会识别出这段js代码,会运行这段js代码。这样js就可以对页面进行各种各样的操作
解决方法:
1、对url上获取的参数进行严格效验(转义、过滤等)
2、有的浏览器对简单的js代码会进行过滤,复杂的浏览器就过滤不了,识别不出来了
如果不想让浏览器过滤,可以使用yii2框架中的方法
3、蠕虫型的xss:先利用反射型xss在url中注入,在跳转到攻击js文件中(具体怎么攻击,要看这个文件怎么写)
解决方法:从源头遏制,防范好反射型xss
csrf的get和post攻击区别:
1、get:通过get上的参数对【删改】进行操作
解决方法:严格效验接收到的get上的参数
2、post:让用户先登录A系统,伪造form表单,提交给A系统
解决方法:开启yii2框架的csrf