logo头像
Snippet 博客主题

Top 10 漏洞

OWASP 前 10 名名单

1.失效的访问控制*

访问控制强制实施策略,使用户无法在其预期权限之外进行操作。失败的访问控制通常会导致未经授权的信息泄露、修改或销毁所有数据、或在用户权限之外执行业务功能。

2.加密机制失效

首先要确认:对传输中数据和存储数据都有哪些保护需求。 例如,密码、信用卡号、医疗记录、个人信息和商业秘密需要额外保护,尤其是在这些数据属于隐私保护法(如:欧盟GDPR) 或法规条(如:金融数据保护标准PCI DSS)适用范围的情况下。

3.注入攻击

1.注入漏洞的分类:

1
2
3
4
5
(1)SQL注入、
(2)HTTP头注入、
(3)HTML注入(XSS)注入、
(4)XPATH注入、
(5)Xml的外部实体注入等...

2.SQL注入概念:
SQL注入,是一种将SQL语句插入或添加到用户输入参数中,之后再将这些参数传递给后台的SQL服务器加以解析并执行,最终达到欺骗服务器执行恶意的SQL命令。

3.SQL注入的成因:

1
2
1).对用户的输入的数据,没有进行过滤,被带到了数据库中去执行,造成了SQL注入。
2).程序编写者在处理程序与数据库交互时,使用字符串拼接的方式构造SQL语句

4.SQL注入的分类:
(1)按数据类型分:

1
2
1,整形注入(不需要闭合,不需要注释符号)
2,字符型注入(需要闭合,需要注释符号)

(2)按注入语法分:

1
2
3
4
5
1,联合查询型注入
2,报错注入
3,布尔型注入
4,延时注入
5,多语句查询注入

5.SQL注入判定过程:
联合查询型注入:
1.判断注入类型(整型、字符型)
2.order by查询语言的字段数量
3.报错猜解准备
4.信息收集

获取数据库名

1
xxx1' union select 1,group_concat(table_name),3,4,5,6,7,8 from information_schema.tables where table_schema=database() limit 0,1#

获取指定表的字段数量:

1
xxx1'union select 1,count(*),3,4......from information_schema.columns where table_name=’user’ table_schema=database();#

获取指定表的字段名:

1
xxx1'union select 1,group_concat(column_name),3,4.....from information_schema.columns where table_name=’user’;#

获取指定表中的数据:

1
xx1'union select 1,group_concat(concat(user,":",password)),3,4,5,6,7,8 from users;#

读取文件函数:load_file
条件:

1
文件绝对路径、能够使用联合查询(注入)、对web目录有写权限
1
注入再显示位中:1'union select 1,2,load_file(‘D://1.txt(绝对路径)’),4,5#

**写入文件函数:into outfile **

1
文件名必须全路径(绝对路径)、用户必须有写文件的权限、没有对单引号过滤
1
select 123456 init outfile ‘d:/111.txt’ Into dumpfile---mysql.ini 配置选项中secure-file-priv=’d:/’

盲注
布尔注入
利用前提:

1
页面上没有显示位,并且没有输出SQL语句执行错误信息,只能通过页面返回正常与不正常判断

优点:不需要显示位
缺点:速度慢,耗费大量时间。
常用函数:

1
2
3
left()
含义:Left()得到字符串左部指定个数的字符 –
使用方法:Left ( string, n ) string 为要截取的字符串, n 为长度 。
1
2
3
Length():
含义:得到字符串的长度
使用方法:length(str) –
1
2
3
4
Substr():
含义 Substr()函数实现的功能是截取字符串
使用方法 Substr(string,start,lengh)
string为参数要处理的字符串,start为开始 位置,length为截取的字符串长度
1
(1) substr(DATABASE(),1,1)>’a’,查看数据库名第一位, substr(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。
1
2
ascii():
含义:Ascii()返回字符串str的最左面的ASCII代码值。如果str是空字符,返回0,如果str是 NULL,返回NULL

报错注入
利用前提:页面上没有显示位,但需要输出 SQL 语句执行错误信息
优点:不需要显示位
缺点:需要输出mysql_error()的报错信息

1
2
3
4
5
6
7
rand():随机数函数
select rand();
floor():向下取整函数
select floor(rand());
count():计数函数
select count(*) from users;
group by:分组方法

延时注入
利用前提: 页面上没有显示位,也没有输出SQL语句执行错误信息。
正确的SQL语句和错误的SQL语句返回页面都一样,但是加入sleep(5)条件之后,页面的返回速度明显慢了5秒。
优点: 不需要显示位,不需要出错信息。
缺点: 速度慢,耗费大量时间。
延时注入相关函数

1
2
3
if( 测试条件 , 结果 1, 结果 2)
1
If()函数解释:当测试条件为真时,结果显示1,若测试条件 为假时,则显示结果2 If()函数示例:
1
2
ascii() 函数
substr() 函数

宽字节注入

6.SQL注入的防御:
1.对进入数据库的特殊字符(单引号,双引号,尖括号等)进行转换或编码转换。
2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

4.不安全的设计

不安全设计是一个广泛的类别,代表不同的弱点,表示为“缺少或无效的控制设计”。

5.安全配置错误

  1. 应用程序栈的任何部分缺少适当的安全加固,或者云服务的权限配置错误。
  2. 应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)。
  3. 默认帐户和密码仍然可用且没有更改。
  4. 错误处理机制向用户纰漏堆栈信息或其他大量错误信息。
  5. 对于升级的系统,最新的安全特性被禁用或未安全配置。
  6. 应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库等没有进 行安全配置。

预防措施

  1. 搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功 能和框架。
  2. 检查和修复安全配置项来适应最新的安全说明、更新和补丁,并将其作为更新管理过程的一部分

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

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

9.安全日志和监控故障

如果不进
行日志记录和监测,就无法发现违规行为。任何时候都会发生日志记录、检测、监视和主动响应不
足的情况:

需要审计的事件,例如:登录、失败的登录和高价值交易,但未记录。
警告和错误未生成日志或日志记录不充分或日志消息不清晰。
应用程序和 API的日志未进行安全可疑活动的监控。
日志只存储在本地。

10.服务端请求伪造

一但Web应用在获取远程资源时没有验证用户提供的URL,就会出现SSRF缺陷。它允许攻击者强制应用程序发送一个精心构建的请求到一个意外目的地,即使是在有防火墙、VPN或其他类型的网络访问控制列表(ACL)保护的情况下。

评论系统未开启,无法评论!