初识web安全3--常见web安全隐患

0x01 安全隐患原理

web安全隐患与web应用的功能息息相关,大多数web安全隐患是由于数据与命令的区分不严格所造成的!

比如注入型隐患
web应用中传递的信息多数是文本格式。HTML、HTTP和SQL等支持web应用的技术多数都采用了文本格式接口。这些文本格式都由各自的语法构成,其中还混合了命令、运算符和数据等。多数情况下,数据部分会通过使用引号(单引号或双引号)或使用分隔符(逗号、Tab、换行符等)隔开的方式来加以区分。web应用的普遍形式为,首先确定文本的框架结构,然后再将数据填入其中。如果你输入的数据超过了这个框架结构的范畴,那么就可能被服务端认为是命令并执行。

在SQL语句中, $id 就是被填入的数据:
SELECT * FROM users WHERE id='$id'    //$id以外的就是事先确定好的框架结构
SELECT * FROM users WHERE id='';and 1=1'    //该语句就是用户端输入单引号和分号迫使SELECT语句结束后,又加入了 and 1=1 语句,这就是SQL注入
SQL注入产生的原因就是,在被认为是"数据"的位置插入单引号使得数据部分结束,从而改变了SQL语句的构造,使得后端数据库执行SQL命令
1 隐患名称		接口				手段							数据边界
————————————————————————————————————————————————————————————————————
2 XSS跨站脚本  	HTML			注入js						< " 等等
————————————————————————————————————————————————————————————————————
3 HTTP消息头注入	HTTP			抓包修改HTTP响应消息头	换行符
————————————————————————————————————————————————————————————————————
4 SQL注入			SQL				注入SQL命令					‘  等等
————————————————————————————————————————————————————————————————————
5 OS命令注入		shell脚本		注入系统命令					;| 等
————————————————————————————————————————————————————————————————————
6 邮件头注入		sendmail命令		注入或更改邮件头正文			换行符

所以web开发人员绝对不能相信用户提交的数据,需要时刻谨记的一个安全原则就是客户端不可信。 所有用户输入必须进行验证并将之格式化以保证安全。

1、始终对所有的用户输入执行验证,且验证必须在一个可靠的平台上进行,应当在应用的多个层上进行。
2、除了输入、输出功能必需的数据之外,不要允许其他任何内容。
3、了解用户合法数据的形态,拒绝所有其他形态数据。
4、录入数据之前必需检查数据合法性。
5、此条建立在所有安全基础之上。

0x02 常见安全隐患(漏洞类型)

其他常见的安全隐患有如下,这也是安全工作者需要去不断发现、不断更新的思路:

1、 信赖用户提交内容
SQL注入、XSS跨站脚本、CRSF、XXE等等

2、弱口令
攻击者利用弱口令,可以获取特定账户或应用的访问控制权限,如果进一步攻击利用可能获取到服务器权限

3、敏感信息泄露
git信息泄露、svn信息泄露、Mercuril信息泄露、bzr信息泄露、cvs信息泄露、文件包含导致的信息泄露( .DS_Store)、WEB-INF泄露、备份文件泄露、配置文件泄露、配置错误导致的泄露、数据库信息泄露、IDE项目文件泄露

4、业务逻辑漏洞
由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或处理错误,统称为 业务逻辑漏洞
业务逻辑漏洞只出现于业务流程中(模块功能),也就是说网站的部分都有可能存在逻辑错误漏洞
业务逻辑漏洞是由于人的疏忽,对业务流程的不熟悉所造成的漏洞,业务逻辑漏洞也是目前最多、最常见的漏洞

5、 缓冲区溢出漏洞
由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。缓冲区长度一般与用户自己定义的缓冲变量的类型有关

存在缓冲区溢出的两个必要条件:
1、存在缓冲区
2、对缓冲区操作造成缓冲区外的存储单元的数据被改写

6、框架或应用漏洞
这是攻击者需要时刻关注的,时刻关注业界内有无新的0day出现!

7、目录遍历漏洞
目录遍历(路径遍历)是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以使web根目录以外的文件),甚至执行系统命令

8、HTTP报头追踪漏洞
目标网站支持trace/track web服务器http连接方式调试功能。当该调试功能开启时,包含敏感信息的http报头可能被恶意人员追踪截获。恶意人员该漏洞,通过构造恶意script脚本追踪http报头,可能获得http报头中包含的敏感资讯,如cookie或认证证书等。现在这种漏洞比较少了,几乎绝迹了。

9、Struts2远程命令执行漏洞

10、文件上传漏洞
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果

11、反序列化漏洞
序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。Java 序列化是指把 Java 对象转换为字节序列的过程,便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。

12、私有IP地址泄露

13、未加密登录请求
如今比较少了。

14、DDOS攻击
DDoS 攻击,全称是 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是 DDoS 攻击的高发行业。

比较常见的几种DDOS攻击的类型:
网络层攻击:比较典型的攻击类型是UDP反射攻击,例如:NTP Flood攻击,这类攻击主要利用大流量拥塞被攻击者的网络带宽,导致被攻击者的业务无法正常响应客户访问。
传输层攻击:比较典型的攻击类型包括SYN Flood攻击、连接数攻击等,这类攻击通过占用服务器的连接池资源从而达到拒绝服务的目的。
会话层攻击:比较典型的攻击类型是SSL连接攻击,这类攻击占用服务器的SSL会话资源从而达到拒绝服务的目的。
应用层攻击:比较典型的攻击类型包括DNS flood攻击、HTTP flood攻击、游戏假人攻击等,这类攻击占用服务器的应用处理资源极大的消耗服务器处理性能从而达到拒绝服务的目的。

15、JSON劫持
JSON 劫持又为“ JSON Hijacking ”,最开始提出这个概念大概是在 2008 年国外有安全研究人员提到这个 JSONP 带来的风险。其实这个问题属于 CSRF( Cross-site request forgery 跨站请求伪造)攻击范畴。当某网站听过 JSONP 的方式来快域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。

漏洞原理
JSON实际应用的时候会有两种传输数据的方式:

1、xmlhttp获取数据方式:
{“username”:“test”,“password”:“test”}
当在前端获取数据的时候,由于数据获取方和数据提供方属于同一个域下面,所以可以使用 xmlhttp的方式来获取数据,然后再用xmlhttp获取到的数据传入自己的js逻辑,如eval。

2、script获取数据方式:
userinfo={“username”:“test”,“password”:“test”}
如果传输的数据在两个不同的域,由于在javascript里无法跨域获取数据,所以一般采取script标签的方式获取数据,传入一些callback来获取最终的数据,这就有可能造成敏感信息被劫持。
所以,总的来说就是网站以JSON形式输出数据,且其中包含用户敏感信息,攻击者通过第三方站点以CSRF手段使用户浏览器请求目标站点得到包含敏感信息的JSON数据,进而劫持到敏感信息。

16、命令执行与命令注入漏洞
命令执行漏洞是指可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围内
命令注入(Command Injection)是指通过提交恶意构造的参数破坏命令语句结构。从而达到执行恶意命令的目的

查看命令注入的流程:
1、查看是否调用系统命令
2、函数以及函数的参数是否可控
3、是否拼接命令注入

17、越权漏洞
越权漏洞是我们在测试过程中遇到比较多的漏洞,我们可以这样来理解越权漏洞,一个用户A一般只能够对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在信息进行增删改查时候进行用户判断,从而导致用户A可以对其他用户进行增删改查等等操作
水平越权: 权限类型不变,权限ID改变。比如同样是普通用户,你可以修改某个ID来查看修改其他用户的帐号信息
垂直越权: 权限ID不变,权限类型改变。 比如普通用户可使用管理员权限进行操作。如你登录时,发现cookie中有一个roleID的角色参数,那么可以通过修改该ID为1或者0,根据具体情况来定,就可以使用管理员权限了!

18、 系统命令调用
系统命令调用可以直接调用服务器的上层命令解释器对服务器进行控制操作,但是此类漏洞也是出现最少的,因为大多数的web服务器互交会很少用到此类函数

19、安全配置错误漏洞
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解。

转载请注明链接(笔芯)
链接地址:https://blog.csdn.net/weixin_45126664/article/details/107519726

你可能感兴趣的:(web)