当前位置 >> 高防服务器 > 新加坡 >

2020-07-05 09:57

38.21.228.9安全漏洞案例浅析及修复方案

概述:SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序。一个成功的SQL注入攻击可以从 数据库中获取敏感数据、修改数据库数据(插入/更新/删除)、执行数据库管理操作 (如关闭数据库管理系统)、恢 复存在于数据库文件系统中的指定文件内容,在某些情况下能对操作系统发布命令。SQL注入攻击是一种注入攻击。它将SQL命令注入到数据层输入,从而影响执行预定义的SQL命令。由于用户的输入,也是SQL语句的一部分,所以 攻击者可以利用这部分可以控制的内容,注入自己定义的语句,改变SQL语句执行逻辑,让数据库执行任意自己需要 的指令。通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接 获取数据库服务器的系统权限。

潜在风险:

第二节 JAVA漏洞代码示例

//拼接SQL语句,直接插入数据库查询

第三节 修复建议

使用参数化查询接口或在代码级对带入SQL语句中的外部参数进行转义或过滤:

a.对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验;

b. 对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。

第四节 JAVA修复建议

1. 参数化查询(最佳修复方法)

2. 过滤特殊字符,过滤的访问为所有用户输入的数据

GET、POST的参数

表单的参数

http头的参数

UA、X-FORWARD-FOR、Content-type等可以修改的字段JSON类型的参数

在web.xml 配置拦截器

 

过滤器SqlFilter.java

 

3. 若使用框架,对应的框架可能存在相应的防注入方法

第二章 XSS漏洞

第一节 漏洞介绍

描述:当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的验证或转义 (escape),就会导致跨站脚本漏洞。攻击者通常会利用XSS漏洞来安装键盘记录器、窃取受害者的cookie、窃取剪 贴板内容、改变网页内容(例如,下载链接)等。有三种已知的跨站漏洞类型:1)存储式;2)反射式;3)基于 DOM的XSS。

反射型跨站脚本:攻击者会通过社会工程学手段,发送一个URL连接给用户打开,在用户打开页面的同时,浏览 器会执行页面中嵌入的恶意脚本;

存储型跨站脚本:攻击者利用web应用程序提供的输入或修改数据功能,将数据存储到服务器或用户cookie中, 当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。所有浏览者都会受到攻击;

DOM跨站攻击:由于html页面中,定义了一段JS,根据用户的输入,显示一段html代码,攻击者可以在输入 时,插入一段恶意脚本,最终展示时,会执行恶意脚本;

DOM跨站和以上两个跨站攻击的差别是,DOM跨站是纯页面脚本的输出,只有规范使用JAVA,才可以防 御。

恶意攻击者可以利用跨站脚本攻击做到:

a.盗取用户cookie,伪造用户身份登录;

b.控制用户浏览器;

c.结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行;

d.衍生URL跳转漏洞;// TODO Auto-generated method stub config = fConfig; } } //Hibernate String queryStr = "from user where username=:username "+"password=:password"; List result = session.createQuery(queryStr).setString("username",username).setString("password", password).list; //Mybatis 参数拼接使用#{},而不是使用${} SELECT id,title,author,content FROM blog WHERE id=#{id}

e.让官方网站出现钓鱼页面;

f.蠕虫攻击。

第二节 JAVA漏洞代码示例

变量name被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户 可控数据”当成JS/VBS脚本执行,或页面元素被“用户可控数据”插入的页面HTML代码控制,从而造成攻击。

第三节 修复建议

1. 对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE 处理。

2. JAVA应用可以使用org.apache.commons.lang3.StringEscapeUtils.escapeHtml4对用户参数进行编码

3. 启用COOKIE的httponly属性。

第四节 JAVA修复示例

1. 输出转义(最佳修复方法)

2. 输入过滤,可以参考SQL注入利用过滤器的方式,但该方法不推荐。

3. 富文本框的XSS修复方法,利用Jsoup的包,对文本输入的标签做限制。

第三章 CSRF漏洞

第一节 漏洞介绍

描述:用户以当前身份浏览到flash或者恶意网站时,JS/flash可以迫使用户浏览器向任意CGI发起请求,此请求包含 用户身份标识,CGI如无限制则会以用户身份进行操作。如:以用户身份发起的转账请求等。CSRF攻击可以从站外和 站内发起。从站内发起CSRF攻击,需要利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL 是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。从站外 发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者 用户,受害者用户打开时,会发起一个请求。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击 管理员,强迫管理员执行恶意用户定义的操作。

潜在危险:

第二节 JAVA漏洞代码示例

代码中接收用户提交的参数“passwordOld、passwordNew”,之后修改了该用户的密码,一旦接收到一个用户发来 的请求,就执行此操作。

提交表单代码:

当用户点提交时,就会触发修改操作。

第三节 修复建议

第一种修复方法:(推荐) 添加随机TOKEN,实现方式如下:

1. 在用户登陆时,设置一个CSRF的随机TOKEN,同时种植在用户的cookie (session)中,当用户浏览器关闭、或 用户再次登录、或退出时,清除token;

2. 在表单中,生成一个隐藏域,它的值就是COOKIE (session)中随机TOKEN;

3. 表单被提交后,就可以在接收用户请求的web应用中,判断表单中的TOKEN值是否和用户COOKIE (session)中 的TOKEN值一致,如果不一致或没有这个值,就判断为CSRF攻击,同时记录攻击日志。由于攻击者无法预测每 一个用户登录时生成的那个随机TOKEN值,所以无法伪造这个参数。

第二种修复方法:

验证referer,判断referer是否从表单页面跳转过来。

第四节 JAVA修复示例

1.配置过滤,验证referer

 

2.配置过滤器,验证TOKEN

第四章 文件上传漏洞

第一节 漏洞介绍

描述:Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,就把文件保存在服务器 上,导致恶意用户可以上传任意文件,甚至上传脚本木马到web服务器上,直接控制web服务器。

第二节 JAVA漏洞代码示例

 

第三节 修复建议

处理用户上传文件,要做以下检查:

1. 检查上传文件扩展名白名单,不属于白名单内,不允许上传;

2. 上传文件的目录必须是http请求无法直接访问到的。如果需要访问的,必须上传到其他(和web服务器不同 的)域名下,并设置该目录为不解析php、jsp等脚本语言的目录;

3. 上传文件要保存的文件名和目录名由系统根据时间随机生成,不允许用户自定义;

4. 图片上传,要通过处理(缩略图、水印等),或通过图片读取函数判断无异常后才能保存到服务器;

5. 上传文件需要做日志记录

第四节 JAVA修复示例

 

第五章 文件下载漏洞

第一节 漏洞介绍

描述:处理用户请求下载文件时,允许用户提交任意文件路径,并把服务器上对应的文件直接发送给用户,这将造成 任意文件下载威胁。如果让用户提交文件目录地址,就把目录下的文件列表发给用户,会造成目录遍历安全威胁。恶意用户会变换目录或文件地址,下载服务器上的敏感文件、数据库链接配置文件、网站源代码等。

潜在危险:

第二节 JAVA漏洞代码示例

 

第三节 修复建议

对文件操作功能,做到以下几点:

1. 要下载的文件地址保存至数据库中;

2. 文件路径保存至数据库,让用户提交文件对应ID下载文件;

3. 下载文件之前做权限判断;

4. 文件放在web无法直接访问的目录下;

5. 记录文件下载日志;

6. 不允许提供目录遍历服务。

第四节 JAVA修复示例

 

第六章 命令执行漏洞

第一节 漏洞介绍

描述:web应用代码中,允许接收用户输入一段代码,之后在web应用服务器上执行这段代码,并返回给用户。由于用户可以自定义输入一段代码,在服务器上执行,所以恶意用户可以写一个远程控制木马,直接获取服务器控制 权限,所有服务器上的资源都会被恶意用户获取和修改,甚至可以直接控制数据库。

潜在危险:

第二节 JAVA漏洞代码示例

 

第三节 修复建议

所有需要执行的系统命令,必须是预先定义好的,不允许接收用户传来的参数,加入到系统命令中去。

第四节 JAVA修复示例

 

第七章 URL跳转漏洞

第一节 漏洞介绍

描述:某些页面由于功能需要需要进行页面跳转,如果没有对跳转的目的页面做检查,恶意攻击者可以发送给用户一 个伪装的链接,安全意识较低的用户很可能会以为该链接展现的内容是公司站点的,从而信任此站点。但是用户打开 后,跳转至钓鱼网站页面,将会导致用户被钓鱼攻击,账号被盗,或账号相关财产被盗。

潜在危险:

第二节 JAVA漏洞代码示例

 

第三节 修复建议

为了保证用户所点击的URL,是从web应用程序中生成的URL,所以要做TOKEN验证:

1. 当用户访问需要生成跳转URL的页面时,首先生成随机token,并放入cookie;

2. 在显示连接的页面上生成URL,在URL参数中加入token;

3. 应用程序在跳转前,判断token是否和cookie中的token一致,如果不一致,就判定为URL跳转攻击,并记录日 志(日志内容见“Error Handing and Logging”章节);

4. 如果在java中做页面跳转,需要判断域名白名单后,才能跳转;

5. 如果应用只有跳转到公司网站的需求,可以设置白名单,判断目的地址是否在白名单列表中,如果不在列表 中,就判定为URL跳转攻击,并记录日志,不允许配置集团以外网站到白名单列表中。

第四节 JAVA修复示例

38.21.228.1
38.21.228.2
38.21.228.3
38.21.228.4
38.21.228.5
38.21.228.6
38.21.228.7
38.21.228.8
38.21.228.9
38.21.228.10
38.21.228.11
38.21.228.12
38.21.228.13
38.21.228.14
38.21.228.15
38.21.228.16
38.21.228.17
38.21.228.18
38.21.228.19
38.21.228.20
38.21.228.21
38.21.228.22
38.21.228.23
38.21.228.24
38.21.228.25
38.21.228.26
38.21.228.27
38.21.228.28
38.21.228.29
38.21.228.30
38.21.228.31
38.21.228.32
38.21.228.33
38.21.228.34
38.21.228.35
38.21.228.36
38.21.228.37
38.21.228.38
38.21.228.39
38.21.228.40
38.21.228.41
38.21.228.42
38.21.228.43
38.21.228.44
38.21.228.45
38.21.228.46
38.21.228.47
38.21.228.48
38.21.228.49
38.21.228.50
38.21.228.51
38.21.228.52
38.21.228.53
38.21.228.54
38.21.228.55
38.21.228.56
38.21.228.57
38.21.228.58
38.21.228.59
38.21.228.60
38.21.228.61
38.21.228.62
38.21.228.63
38.21.228.64
38.21.228.65
38.21.228.66
38.21.228.67
38.21.228.68
38.21.228.69
38.21.228.70
38.21.228.71
38.21.228.72
38.21.228.73
38.21.228.74
38.21.228.75
38.21.228.76
38.21.228.77
38.21.228.78
38.21.228.79
38.21.228.80
38.21.228.81
38.21.228.82
38.21.228.83
38.21.228.84
38.21.228.85
38.21.228.86
38.21.228.87
38.21.228.88
38.21.228.89
38.21.228.90
38.21.228.91
38.21.228.92
38.21.228.93
38.21.228.94
38.21.228.95
38.21.228.96
38.21.228.97
38.21.228.98
38.21.228.99
38.21.228.100
38.21.228.101
38.21.228.102
38.21.228.103
38.21.228.104
38.21.228.105
38.21.228.106
38.21.228.107
38.21.228.108
38.21.228.109
38.21.228.110
38.21.228.111
38.21.228.112
38.21.228.113
38.21.228.114
38.21.228.115
38.21.228.116
38.21.228.117
38.21.228.118
38.21.228.119
38.21.228.120
38.21.228.121
38.21.228.122
38.21.228.123
38.21.228.124
38.21.228.125
38.21.228.126
38.21.228.127
38.21.228.128
38.21.228.129
38.21.228.130
38.21.228.131
38.21.228.132
38.21.228.133
38.21.228.134
38.21.228.135
38.21.228.136
38.21.228.137
38.21.228.138
38.21.228.139
38.21.228.140
38.21.228.141
38.21.228.142
38.21.228.143
38.21.228.144
38.21.228.145
38.21.228.146
38.21.228.147
38.21.228.148
38.21.228.149
38.21.228.150
38.21.228.151
38.21.228.152
38.21.228.153
38.21.228.154
38.21.228.155
38.21.228.156
38.21.228.157
38.21.228.158
38.21.228.159
38.21.228.160
38.21.228.161
38.21.228.162
38.21.228.163
38.21.228.164
38.21.228.165
38.21.228.166
38.21.228.167
38.21.228.168
38.21.228.169
38.21.228.170
38.21.228.171
38.21.228.172
38.21.228.173
38.21.228.174
38.21.228.175
38.21.228.176
38.21.228.177
38.21.228.178
38.21.228.179
38.21.228.180
38.21.228.181
38.21.228.182
38.21.228.183
38.21.228.184
38.21.228.185
38.21.228.186
38.21.228.187
38.21.228.188
38.21.228.189
38.21.228.190
38.21.228.191
38.21.228.192
38.21.228.193
38.21.228.194
38.21.228.195
38.21.228.196
38.21.228.197
38.21.228.198
38.21.228.199
38.21.228.200
38.21.228.201
38.21.228.202
38.21.228.203
38.21.228.204
38.21.228.205
38.21.228.206
38.21.228.207
38.21.228.208
38.21.228.209
38.21.228.210
38.21.228.211
38.21.228.212
38.21.228.213
38.21.228.214
38.21.228.215
38.21.228.216
38.21.228.217
38.21.228.218
38.21.228.219
38.21.228.220
38.21.228.221
38.21.228.222
38.21.228.223
38.21.228.224
38.21.228.225
38.21.228.226
38.21.228.227
38.21.228.228
38.21.228.229
38.21.228.230
38.21.228.231
38.21.228.232
38.21.228.233
38.21.228.234
38.21.228.235
38.21.228.236
38.21.228.237
38.21.228.238
38.21.228.239
38.21.228.240
38.21.228.241
38.21.228.242
38.21.228.243
38.21.228.244
38.21.228.245
38.21.228.246
38.21.228.247
38.21.228.248
38.21.228.249
38.21.228.250
38.21.228.251
38.21.228.252
38.21.228.253
38.21.228.254
 

第八章 水平权限攻击

第一节 漏洞介绍

描述:Web应用程序接收到用户请求,对用户数据进行CRUD(增加、读取、更新和删除)操作时,没有判断数据的所 属人,或数据所属人userid直接从用户提交的request参数(用户可控数据)中获取,导致恶意攻击者可以通过变换 数据ID或所属人userid,从而越权获取或修改其他人数据。

潜在危险:

第二节 JAVA漏洞代码示例

 

第三节 修复建议

1.检查提交CRUD请求的操作者(通过session信息得到)与目标对象的权限所有者(查数据库)是否一致,如 果不一致则阻断。从session中获取当前登录用户的userid,并且需要在执行的SQL语句中,加入当前用户userid作 为条件语句。

2.将数据ID改成一个具有一定长度的随机字符串。

第四节 Java修复示例

第九章 垂直权限攻击

声明。

阅读本文的人还阅读:

38.21.233.99友情链接交换标准与原则,