yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

常见的漏洞攻击:

1、xss:是跨站脚本攻击

    分3类:1、存储型2、反射型3、蠕虫型

2、csrf:是跨站请求伪造攻击

    分2类:1、get型2、post型

3、sql注入

4、文件上传


xss攻击:

xss攻击可以:盗取用户账号、也可以盗取后进行非法转账、还可以篡改系统信息、网站挂马等

存储型xss

下面我们来看下盗号代码(存储型xss):

1、通过在浏览器f12 console中输入:

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

2、document.cookie获取得到的cookie是什么样的

提示:如果对cookie有什么不理解的,可以参考我这篇博客http://blog.csdn.net/qq_33862644/article/details/78944811

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

3、盗号的原理:

第1次发送请求。服务器响应的时候,会把session中的字符串带上返回,存储到浏览器的cookie

2次发送请求,会带上cookie(存储服务器带过来的字符串)去服务器的session中找,看是哪一个用户发送的请求

4、寻找登录用的cookie

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

5、怎么防止利用cookie来进行盗号攻击呢?

设置cookie的时候加上httponly。可以使用php可以使用内置的setcookie()

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

下面我们来看下非法转账(存储型xss)

1、思路:将非法转账的代码注入到,其他用户的转账界面,就会运行document.cookie代码
2、哪一段js代码能够自动转账

通过浏览器f12查看他的html结构,然后自己模拟收款人的信息,通过点击事件进行转账

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

3、如何把js注入到转账页面

思路:在后台注入(如 博客后台发文章的编辑器中,别人一但浏览文章,就会中招

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

注意:想注入到别人的后台,需要使用反射型的xss攻击

反射型的xss

4、使用反型的xss(请ctrl+f 存储型和反射行xss的区别

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

根据后台页面的地址,构建非法链接

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

找一些博客或论坛写帖子。把链接隐藏放到帖子中(不要问我怎么隐藏,使用a标签就可以)

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

勾引其他用户点击链接。当其他用户点击链接后跳转到他自己的转账页面,如果链接参数上带我们伪造的非法参数,该js能够运行,就可以对他进行攻击

5、当然,支付公司也不傻,人家肯定有代码反射(就是有防范)

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

6、人家防我们就攻咯

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

他给转成url编码了(想快速知道实体编码和url编码的区别,请ctrl+f 实体编码和url编码的区别

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

7、这回我们用实体编码尝试越狱

思路:使用&quot替代双引号

注意:用实体编码&quot生成的双引号是不能真正越狱的。因为

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

使用url编码的%26来替代url的参数分隔符&

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

蠕虫型的xss

1、在页面中,注入js。这段js就像蠕虫一样,寄生在我们的页面中

2、用户小王访问后,js就会发生功效(如 以用户身份在该用户后台提交(发表)一篇文章)

3、这篇文章已经被感染了,而且还可以再次注入其他的js

4、小王的小伙伴儿们一看小王发表了文章,就都去点击查看了 或 点赞

4.1、当小王的小伙伴儿们去浏览这篇文章的时候,js又发挥了作用

5、这段js就会以小王小伙儿们的身份,在他们的后台去发表更多的文章,从而感染 更多的页面....

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

感染方式成指数性增长

案例:新浪微博之前遭受的xss蠕虫

1、作者先用的是反射型xss攻击(在url中加入js代码)

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

此时:

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

然后用的是蠕虫xss攻击:

以下为t.js中的代码(因为这3点很符合蠕虫特性):

publish() 以我们的身份发表一篇微博

follow() 让我们自动关注攻击的一个作者(涨粉利器啊)

message() 轮询我们的好友,向我们的好友发送私信

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

random_msg()中都是一些火辣辣的信息,会吸引眼球,点击后跳转到163...

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

20行这个短连接中也会进行二次跳转,跳转回我们的微博,并且跳回微博的时候,还会携带上这个

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击攻击代码

xss的防范手段

1、转码防范

思路:xss注入到页面里的js代码,进行相应的html实体编码。实体编码后的代码浏览器就无法执行了

实现:使用yii2框架中的方法

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击
yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

2、过滤攻防

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

什么是lexer技术?

浏览器在显示一个页面的时候,首先会从服务器获取并解析前端代码--解析的时候要识别出jscsshtml识别的过程就是词法的解析--词法的解析用到的就是lexer技术。相当于是解析的时候,看见js代码就直接过滤了。process()里就用到了lexer技术

为什么要用lexer技术?

js代码可变成的样子太多。如果使用正则替换,很容易被**,构造一个全面正则也很麻烦。用啥也不如直接用lexer技术 省事又安全。

csrf攻击:

1、get型攻击

注意:get请求传递的参数,最好不要参与到后台【改和删】

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

往各个论坛发帖,将此url隐藏在这

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

用户对这个帖子感兴趣,点击进来了,并且已经登录到了这个银行里面去。这样他点击进去之后,就可以通过自己的账户给李四转账400块钱

2、post攻击

第1步:伪造from表单,提交到源from表单所指向的后台处理页面(控制器/方法(逻辑))

第2步:诱导用户来到伪造的from表单

注意:诱导之前要想办法让用户A先登录到源from表单所在的系统。然后通过伪造的from表单,我们提交数据(显示的是用户A在操作),对原表单网站进行各种操作

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

3、如何防范

思路1:通过验证码(影响用户体验)

思路2:通过请求头中的referer头(会记录每次请求,都是从哪个页面发出来的),根据请求来源做判断,是不是本站发出的请求

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

但是有些请求不会带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里。这样也会通过效验。

  当把_csrfcookie的形式传递给浏览器的时候,会做一次加密,这样cookie和表单中的_csrf就不一样了。到服务器端,先给从cookie中获取到的解密。在效验这俩份_csrf是否一致

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击
使用yii2框架的代码示例:

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

后台:

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

前台:模板中(每个表单都要带哦)

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击


sql注入:

你接收的是一个文本,但是你要使用html的格式去解析。如果你遇见了不认识的β字符,你可以试着去使用utf-8编码去解析

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

防范:使用pdo

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

参考:慕课yii2安全篇6-2(9分钟开始,讲使用wireshark工具,进行抓包(抓phpmysql之间的包)


文件上传:


案例:上传的时候是一张图片。保存(下载)的时候,变成php文件

如果不带enctype(from表单中的属性)就不能上传,因为from表单会把提交的数据,进行一次url编码

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

编码本身就耗费时间。编码之后还会变的更大。所以不能上传文件

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

绕过效验:

1、文件检测时容易发生的第1个问题:在操作系统中给文件起名字的时候,有些字符是不允许出现在文件名当中。通过这一特点来展现文件上传的漏洞

参考:慕课yii2安全篇6-2(3分钟开始,使用fiddler对漏洞进行攻击)

操作系统不允许使用冒号,文件名中有也不会报错,而是直接创建

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

2、文件检测时容易发生的第2个问题:提交数据的时候,浏览器也会对上传的文件,进行一系列的检测。检测之后会把这个文件(就是浏览器认为的这个文件)的类型写到请求当中去--》所以在请求中就会包含这个文件类型的一些相关信息

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

在fiddler连文件名都可以修改,更合况一个类型信息呢。

防范:

1、对用户上传的文件进行类型检测

2、类型检测通过之后,试图把文件从临时目录保存到目标目录的时候,一定要改文件名

附录

    

实体编码和url编码的区别:

实体编码是&xx

url编码是%xx

url编码表:也可以使用js的escape()来查看;也可以用unescape()将url编码转换回来

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击


存储型和反射行和蠕虫型xss的区别:

1、存储型xss攻击(先获得到cookie存起来,发到服务器效验)。解决方法:setcookie的时候,加上httponly

2、反射型的xss是说我们的url中有js代码

原理:当这个js代码传递给我们的后台服务器的时候--我们后台服务器是原原本本的把这段js返回给客户端页面-->然后在页面中,浏览器会识别出这段js代码,会运行这段js代码。这样js就可以对页面进行各种各样的操作

解决方法:

1、对url上获取的参数进行严格效验(转义、过滤等)

2、有的浏览器对简单的js代码会进行过滤,复杂的浏览器就过滤不了,识别不出来了

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击

如果不想让浏览器过滤,可以使用yii2框架中的方法

yii2框架开发之安全xss、csrf、sql注入、文件上传漏洞攻击3、蠕虫型的xss:先利用反射型xss在url中注入,在跳转到攻击js文件中(具体怎么攻击,要看这个文件怎么写)

解决方法:从源头遏制,防范好反射型xss


csrf的get和post攻击区别:

1、get:通过get上的参数对【删改】进行操作

解决方法:严格效验接收到的get上的参数

2、post:让用户先登录A系统,伪造form表单,提交给A系统

解决方法:开启yii2框架的csrf