WEB安全


HTPP协议

HTTP1.0请求方法:GET,POST,HEAD

HTTP1.1请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT

  1. HEAD请求方式:

    只返回头部数据,数据部分不返回内容

  2. OPTIONS请求方式:(需跨域时设置此请求方式)

    返回服务器允许的请求类型

  3. PUT请求方式:

    在特定的目录中上传指定文件,文件名在url中设置

  4. DELETE请求方式:

    删除特定目录中的文件,文件名在url中设置

  5. TRACE请求方式:

    让服务器端将客户端所有的请求返回给客户端,多用于debug需求

  6. CONNECT请求方式:

    用于特定应用使用http协议时使用(使用http长链接的程序)

URL同源策略

URL格式中,协议,主机,端口三部分相同,视为同源


注入漏洞

1.png


SQL注入


概念

构造特殊请求,使web应用执行带有附加条件的SQL语句,web应用访问数据库时回附带其他命令造成数据库的意外输出

影响

读取,修改数据库中的库和表;执行系统命令

2.png

注入类型

简单注入

  1. 基于布尔型注入:根据返回页状态判断条件真假

    1
    2
    1' and '1'='1 / 1' and '1
    1' and '1'='2 / 1' and '0
  2. 基于报错的注入:根据页面返回错误信息

    1
    2
    3
    4
    '
    "
    %
    ()
  3. 基于时间的注入:根据页面返回时间

  4. 基于联合查询的注入:使用union

  5. 基于堆查询的注入:同时执行多条语句注入

盲注

不会返回错误信息,执行正确与执行错误返回不同的页面,据此判断是否注入成功。

注入方式

暴库->暴表->暴字段->暴记录

出现SQL注入的原因与防范

  1. 数据库可执行系统命令

    最小化权限账户启动数据库

    禁止让数据库执行系统命令

  2. 连接数据库用户权限过大

    IDS,WAF

    连接数据库用户权限最小化

  3. 错误信息返回过多

    统一错误信息管理

    禁止向用户提供错误信息

  4. 服务器对请求内容过滤不严格

    过滤所有客户端数据

    审核数据

3.png


XML注入


概念

XML文件一般用于存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或者输出数据,都将导致XML注入漏洞

产生原因

  1. 传输的数据包含了标签内容

  2. 修改数据时会覆盖原有标签

防范

  1. 对用户输入进行检查

  2. 对特殊字符进行转码


代码注入


远程文件包含漏洞

概念

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至是恶意的代码注入

如果PHP的配置选项allow_url_include为ON,则include/require函数是可以加载远程文件的,此被称为远程文件包含漏洞

PHP常见文件包含函数

1
2
3
4
5
6
include()
include_once()
require()
require_once()
fopen()
readfile()

影响

  1. 利用代码注入漏洞执行任意代码,来操作服务器

  2. 利用代码注入漏洞操作数据库,插入恶意数据,可能获取系统权限

  3. 利用代码注入漏洞修改系统配置,修改网络配置

  4. 进行代码注入攻击后可以进一步对网络渗透

审计方法

查看是否包含如下代码:

1
2
3
4
5
6
include()
include_once()
require()
require_once()
fopen()
readfile()

防范

  1. 不需要执行远程代码时,修改php.ini配置

    1
    2
    allow_url_fopen=Off
    allow_url_include=Off
  2. 不可直接导入用户输入内容

  3. 执行代码的参数,或文件名,禁止与用户输入相关,只可由开发人员定义代码内容


本地文件包含

概念

读取任意本地文件,在条件允许时甚至可以执行代码

可以通过远程文件包含漏洞来生成本地文件包含漏洞的代码来利用

影响

  1. 上传各类格式木马文件,然后包含利用

  2. 读敏感文件

    包含日志文件

    包含/proc/self/envion文件

    包含data:php://input等伪协议

    若有phpinfo则可包含临时文件

  3. 执行任意代码

  4. 包含具有恶意文件的网站

  5. 控制服务器

PHP常见文件包含函数

1
2
3
4
5
6
include()
include_once()
require()
require_once()
fopen()
readfile()

PHP文件中的封装协议–访问本地文件

1
2
file://		#访问本地文件系统
php://filter #对本地磁盘文件进行读写

PHP文件中的封装协议–代码任意执行

1
2
php://		#访问各个输入/输出流
data:// #伪协议,将原本的include文件流重定向到用户可控制的输入流中

PHP文件中的封装协议–目录遍历

1
glob://		#伪协议,查找匹配的文件路径模式

防范

不要直接导入用户输入的内容(与远程文件包含漏洞相同)


命令执行漏洞

概念

用户通过浏览器提交执行命令,由于服务器没有针对执行函数做过滤,导致在没有指定绝对路径的情况下执行命令,可能会允许攻击者通过改变$PATH或程序执行环境的其他方面来执行一个恶意构造的代码

可用作命令执行的符号:

1
2
3
4
5
6
7
&
&&
|
||
`
$()
-exec(find函数中)

例:

1
cat ` cat /etc/passwd `

影响

  1. 使用web服务程序的权限去执行系统命令或读写文件

  2. 反弹shell

  3. 控制整个网站甚至控制服务器

  4. 当作跳板机进一步内网渗透

各语言执行系统命令的函数

PHP
1
2
3
system():输出并返回最后一行shell的结果
exec():返回最后一行shell结果,所有结果可以保存到一个数组中
passthru():调用命令,将运行结果原样输出到标准输出设备上
JSP
1
Runtime.getRuntime().exec(<commandstr>)

第三方组件存在的代码执行漏洞

Struts2漏洞(s2-16

2.3.15.1以前版本中没有对action:,redirect:,redirectAction:等进行处理,导致ongl表达式可以被执行

防范

PHP
  1. 尽量不执行外部命令

  2. 使用脚本解决工作,少用执行命令函数,php中禁止disable_functions

  3. 使用自定义函数或函数库来替代外部命令的功能

  4. 程序参数,escapshellcmd过滤

  5. 程序参数值,escapeshellarg过滤

  6. 参数值使用引用号包裹,并在拼接前调用addslashes转义

  7. 使用safe_mode_exec_dir指定可执行文件路径


XSS漏洞

4.png


概念

XSS(跨站脚本漏洞),hackweb页面中插入恶意js代码,当用户浏览此网页时,js代码会被执行,达到恶意攻击的目的

风险

  1. 盗取用户cookie

  2. 操控用户浏览器

  3. 下载木马

  4. 修改页面内容,钓鱼攻击


存储型XSS


概念

持久化,恶意js代码存储在服务器中

流程

hack将恶意js代码插入web请求中,传送给服务器,服务器未经过过滤存于数据库中。当其他用户访问此页面时,服务器会将带有恶意js代码的页面返回至浏览器,造成恶意js代码的执行

诱骗受害者点击链接:将长链接转换为短链接(网址缩短)

5.png

风险

  1. 盗取cookie

  2. 钓鱼攻击

  3. 修改页面内容,获取用户信息

  4. 生成蠕虫,利于扩散

检测:(表单输入框)

1
2
3
4
5
6
7
<script>alert("1")</script>
<img src=javascript:alert("1")></img>
<img dynsrc=javascipt:alert("1")></img>
<div style="background-image:url(javascipt:alert('1'))">
<img src="knownsec" onerror=alert('1')>
<font style="TEST":expression(alert('1'))>
table标签 a标签 ul标签

防范

  1. 浏览器解析顺序:HTML->CSS->JavaScript

  2. 浏览器解码顺序:HTML->URL->JavaScript

  3. HTML中不可信字符进行转义,为属性值加引号,不可加反引号(`)

  4. 按照HTML转义,后js转义的顺序进行转义

  5. 创建用户可提交标签和属性白名单

  6. 使用utf-8字符编码及设置contenttext/html

  7. 不要将用户可控制的文本放在<meta>标签前

  8. 使用<!DOCTYPE html>


反射型XSS


概念

不可存储在服务器中,通过浏览器解析后返回到浏览器

过程

构造有恶意js脚本的网站连接,诱骗受害者点击连接,向服务器发送请求,服务器解析地址后返回至受害者,受害者浏览器执行js造成XSS攻击

6.png

防范

同存储型XSS


DOM型XSS


概念

不可存储在服务器中,不需服务器做解析

过程

与反射型XSS相似,不同的是浏览器执行时取url中的参数,而不使用服务器返回的过滤后的参数(纯粹是JS取代了URL的内容)

检测

  1. 网站代码中存在document.location

  2. document.URL

  3. document.referrer类似的可提取url内容的代码,就可能存在DOMXSS漏洞

防范

  1. 写入页面前先转义

  2. 慎用eval()

  3. 编写安全的函数方法,从可靠的数据源获取参数

  4. 参考使用filter.js


请求伪造漏洞

7.png


SSRF漏洞


概念

服务器请求伪造,是一种攻击者伪造服务器请求的安全漏洞,一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

出现原因

对于提供了从其他服务器上获取数据的功能的web应用,如果存在缺陷,攻击者可利用此web应用作为代理攻击远程和本机的服务器。

如果web应用没有对用户提供的URL和远端服务器返回的信息进行合理的验证和过滤,就可能存在SSRF漏洞

攻击者利用SSRF漏洞可以实现绕过网络限制攻击企业内网

流程

8.png

攻击方式

  1. 信息收集:对外网,服务器所在内网,本地进行端口扫描,获取服务banner信息

  2. 信息收集:对内网web应用进行指纹识别,通过访问默认文件实现

  3. 信息收集:利用file协议读取本地文件等

  4. 执行指令:攻击内外网的web应用,使用get参数

  5. 执行指令:溢出,攻击运行在内网或本地的应用程序

产生原因

  1. 应用从用户指定的url获取图片,并使用一个随机的文件名保存在硬盘上,并展示给用户

  2. 应用获取用户指定url的数据,这其中会使用socket跟服务器建立tcp连接,传输原始数据

  3. 应用根据用户提供的url,抓取用户的web站点,并自动生成移动wap站点

  4. 应用提供测速功能,能够根据用户提供的url,访问目标站点,以获取其在对应经纬度的访问速度

利用SSRF进行端口探测

1
http://0.0.0.0/xx.php?url=http://1.1.1.1:22

返回值若为服务banner信息,说明此目标端口开放

检测方法

PHP

1
2
3
file_get_contents()
fsockopen()
curl_exec()

以上三个函数使用不当会造成SSRF漏洞

JSP

1
2
3
4
5
Request类
URL类的openStream
HttpClient类
URLConnection
HttpURLConnection类

以上函数使用不当会造成SSRF漏洞

绕过方法

  1. 添加端口号

  2. 短网址绕过

  3. 指向任意IP的域名xip.io

    1
    2
    3
    4
    10.0.0.1.xip.io     		resolves to     10.0.0.1
    www.10.0.0.1.xip.io resolves to 10.0.0.1
    mysite.10.0.0.1.xip.io resolves to 10.0.0.1
    foo.bar.10.0.0.1.xip.io resolves to 10.0.0.1
  4. IP限制绕过

  5. 各进制转换,各进制组合转换

  6. 协议限制绕过

防范

  1. 过滤返回信息,验证远程服务器对请求的响应

  2. 统一错误信息,避免用户根据错误信息判断远端服务器的端口状态

  3. 限制请求的端口为http常用端口

  4. 黑名单内网IP,避免获取内网数据,攻击内网

  5. 禁用不需要的协议,仅允许httphttps请求


CSRF漏洞


概念

跨站请求伪造,攻击者利用被攻击者的身份发起了某些被攻击者不知情的网络请求

影响

  1. 以被攻击者的名义发送邮件

  2. 以被攻击者的名义发送消息

  3. 盗取被攻击者账号

  4. 使用被攻击者信息购买商品

  5. 虚拟货币转账

流程

9.png

漏洞利用条件

  1. 被攻击者登陆过网站(获取Cookie

  2. 被攻击者打开攻击者提供的恶意连接

  3. 网站除了验证Cookie,不进行二次验证

防范

  1. GETPOST的正确使用

  2. Referer Checkhttp头中字段,用于标识此次请求从哪个页面跳转过来的

  3. Anti CSRF Token

  4. 验证码

  5. 重要操作做二次验证


文件处理漏洞

10.png


任意文件上传


漏洞产生原因

web应用程序在处理用户上传的文件操作时,如果用户上传文件的路径,文件名,扩展名成为用户可控的数据,就会导致直接上传脚本木马到web服务器上,直接控制web服务器

文件上传时检查不严

  1. 没有进行文件格式检查

  2. 在客户端进行了格式检查-很容易被绕过

  3. 在服务器端进行了不严格的黑/白名单检查

    可使用%00等截断方式绕过

    使用大小写方式绕过黑名单

  4. 只对文件类型(Content-Type)进行了检查

危害

  1. 文件是一个webshell,可以任意执行系统命令

  2. 与后台数据库连接,任意执行数据库命令

  3. 把本服务器当作跳板,访问局域网内任意服务器

  4. 获取服务器登陆权限

检测方法

检测点:所有可上传文件的页面

检测方法:

  1. 使用什么方式来限制文件类型

  2. 是否对文件名进行重命名

  3. 是否允许用户重命名文件名

防范

  1. 文件上传的目录设置为不可执行

  2. 判断文件类型

    文件类型判断,后缀名判断

    白名单策略

    对于图片处理,使用resize函数来破坏源代码

  3. 使用随机数来存储文件

    防止多后缀文件引起的漏洞

  4. 单独设置文件服务器的域名

    此服务器不可运行任何动态网页

    此服务器只可静态访问HTML,图片等


任意文件下载


概念

web服务器由于业务需求,需提供文件查看或文件下载功能,若对用户查看或下载的文件不做限制,则恶意用户就能查看或下载任意敏感文件,这就是文件查看与下载漏洞

检测方法

  1. 查找传入文件名的参数

    导入文件等参数,要是直接输入文件名,就可能有注入点

    注意如下参数名:

    RealPath,FilePath,filepath,Path,path,inputFile,url,urls,Lang,dis,data,readfile,filep,src,menu,META-INF,WEB-INF

  2. 在代码中查找漏洞

    PHP中:存在readfile,fopen,file_get_contents等代码,可能存在任意文件下载漏洞

敏感文件路径-Windows

1
2
3
4
5
6
7
8
C:\boot.ini		# 查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml # IIS配置文件
C:\Windows\repair\sam # 存储系统初次安装时的密码
C:\Program Files\mysql\my.ini # Mysql配置文件
C:\Program Files\mysql\data\mysql\user.MYD # Mysql root
C:\Windows\php.ini # php配置信息
C:\Windows\my.ini # Mysql配置信息
数据库链接文件

敏感文件路径-Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history/proc/self/fd/fd[0-9]*
/proc/mounts
/proc/config.gz
数据库链接文件

防范

PHP为例:

过滤.,使用户在url中不能回溯上级目录

使用正则严格判断用户输入参数的格式

php.ini配置open_basedir限定文件访问范围


访问控制漏洞

11.png


横向越权


正常访问流程

访问自己的信息页

12.png

修改自己密码

13.png

概念

  1. 越权漏洞属于逻辑漏洞。利用业务逻辑在程序中体现时,仅仅限制于用户点击

  2. Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid,导致攻击者可以自行修改userid,修改不属于自己的数据

  3. 只要权限验证不使用cookie验证,都可能发生横向越权漏洞

  4. 所有的更新语句操作,都可能产生此漏洞

影响

  1. 以其他用户的身份进行操作

    1. 查看/遍历内容

    2. 更改信息

    3. 发表文章

  2. 所带来的影响

    1. 更改确认邮箱/手机号,可进行支付操作

    2. 查看其他用户信息,收集隐私信息

    3. 发布敏感文章

检测方法

  1. 查看任何传递用户信息的参数

    只要是用户id,用户名等以参数的方式传递,就可能有风险

  2. 查看特权内容,是否进行了权限管理

防范

  1. 修改程序逻辑

    1. 用户id,用户名等禁止通过参数来传递,直接取cookie中的值

    2. 私有信息访问时需要验证用户身份

  2. 无法修改程序逻辑,通过混淆的方法防御

    用户id使用MD5等编码,很难进行遍历


垂直越权


概念

由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的

影响

  1. 垂直权限漏洞,一般是直接访问业务管理员权限

    1. 可能会看到全部用户信息

    2. 可能更改全部通告信息

    3. 可能更改商品价格

    4. 可能更改订单信息

  2. 只要是能拿到业务管理员权限,可能对业务造成很大影响

防范

在每个页面的加载之前进行权限验证

  1. 进行服务器验证,不可做前台验证

  2. 验证时,从session获取对应的用户信息

  3. session中用户信息存放在服务端,用户不可修改

  4. 对每个敏感页面都进行验证


会话管理漏洞

14.png


会话劫持


概念

通过获取用户session id后,使用该session id登陆目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效session

会话劫持的第一步是取得一个合法的会话标识来伪装成合法用户

攻击步骤

  1. 目标用户需要先登陆站点

  2. 登陆成功后,该用户会得到站点提供的一个会话标识session id

  3. 攻击者通过某种攻击手段捕获session id

  4. 攻击者通过捕获到的session id访问站点即可获取目标用户合法会话

15.png

如何获取cookie

  1. 了解cookie接口

    找到session id位置

  2. 进行破解

    暴力破解:尝试各种session id,直到破解为止

    预测:如果session id使用非随机的方式产生,那么极有可能计算出

    窃取:XSS攻击,中间人攻击等方法获取

16.png

17.png

影响

  1. 冒充他人进行操作

  2. 对站点的影响

HTTP-Only

服务端发送cookie时,可以设置HTTP-Only

优点是设置HTTP-Only的参数不会被js获取

secure

当设置cookie的某个值的securetrue

cookie只有在HTTPS协议中才会进行传输

防范

  1. 由XSS漏洞引起的会话劫持

    使用HTTP-Only来防止js获取cookie中的session id信息

  2. 中间人攻击引起的会话劫持

    使用https+secure来保证session id不被获取


会话固定


概念

会话固定是一种诱骗受害者使用攻击者指定的会话标识(session id)的攻击手段。

这是攻击者获取合法会话标识的最简单的方法

会话固定也可以看成是会话劫持的一种类型,原因是会话固定的攻击的主要目的同样是获得目标用户的合法会话,不过会话固定还可以强迫受害者使用攻击者设定的一个有效会话,以此来获取用户的敏感信息

原理

18.png

19.png

  1. 访问网站时,网站会设置cookie中的session

  2. 当用户登录后,cookie中的session保持不变

  3. 只要获取登陆前的session内容,就可以知道登陆后的session

检测方法

  1. 访问网站(未登录)

    获取cookie信息,获取session id

  2. 登陆网站

    查看cookie信息,获取session id

  3. 查看登陆前,登陆后的session id是否相同

防范

  1. 在用户登陆成功后重新创建一个session id

  2. 登陆前的匿名会话强制失效

  3. session id与浏览器绑定

    session id与所访问的浏览器有变化,就立即重置

  4. session id与所访问的IP绑定

    session id与所访问的IP有变化,就立即重置


日志攻击


概念

将未经验证的用户输入写入日志文件,致使攻击者伪造日志条目或将恶意信息内容注入日志

防范

  1. 只输出必要的日志,功能上线前删除大多数调试日志

  2. 过滤非法字符


资源泄露


概念

程序可能无法成功释放某一项已申请的系统资源

如果攻击者能够故意触发资源泄露,就有可能通过耗尽资源池的方式发起DOS攻击

分类

流资源未释放(Unrelease Stream)
数据库连接未释放(Unrelease DB Connection)

防范

  1. 关闭连接时,使用try/catch处理异常

  2. 使用工具类关闭

    工具类: import org.apache.commons.io.IOUtils

    JAVA代码:IOUtils.closeQuietly(br)

---------------The End---------------
0%