目录
一、简介
二、内容
1.基础知识
1.1相关概念
1.2部分攻击简介
1.3渗透测试流程
明确目标
信息收集
漏洞探测
漏洞验证
信息分析
获取所需
信息整理
形成报告
2.信息收集
2.1相关概念
3.1SQL注入入门
相关概念
3.2SQL注入
相关概念
3.3SQL注入深入
相关概念
4.XSS
相关概念
5.CSRF 与SSRF
相关概念
6.命令执行与代码执行与文件包含漏洞
相关概念
7.XXE与反序列化
相关概念
8.逻辑漏洞、任意文件下载读取,中间件框架漏洞
相关概念
IIS解析漏洞
Apache
Nginx
Tomcat
Weblogic 漏洞
框架漏洞
9.windows提权
相关概念
到处摘抄总结的各种知识点,方便查阅
态势感知:态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力,是以安全大数据为基础,从全局视角提升对安全威胁的发现识别、理解分析、响应处置能力的一种方式,最终是为了决策与行动,是安全能力的落地。
护网行动的目的:安全是一个整体,正如木桶定律,最短的木板是评估木桶品质的标准,安全最薄弱环节也是决定系统好坏的关键。而网络红蓝军对抗的目的就是用来评估企业安全性,有助于找出企业安全中最脆弱的环节,提升企业安全能力的建设。
域名:IP地址和域名是一一对应的,这份域名地址的信息存放在一个叫域名服务器(DNS)的主机内,使用者只需了解易记的域名地址,其对应转换工作就留给了域名服务器。域名服务器就是提供IP地址和域名之间的转换服务的服务器。
DNS:域名系统(Domain Name System,DNS)是Internet上解决网上机器命名的一种系统。 就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址是由四段以“.”分开的数字组成(此处以IPv4的地址为例,IPv6的地址同理),记起来总是不如名字那么方便,所以,就采用了域名系统来管理名字和IP的对应关系
Hosts:Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析
常见的脚本语言:Python、JavaScript、Asp、Aspx、Php 、javaweb、 pl、cgi等
POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。
EXP:全称 ' Exploit ',中文 ' 利用 ',指利用系统漏洞进行攻击的动作。
Payload:"有效载荷 ",指成功exploit之后,真正在目标系统执行的代码或指令。
肉鸡:被黑客入侵并被长期驻扎的计算机或服务器。可以随意控制,可以是任意系统的设备,对象可以是企业,个人,政府等等所有单位。
后门/webshell:黑客为了对主机进行长期的控制,在机器上种植的一段程序或留下的一个“入口”。
木马:表面上伪装成了正常的程序,但是当这些程序运行时,就会获取系统的整个控制权限。
漏洞:硬件、软件、协议等等的可利用安全缺陷,可能被攻击者利用,对数据进行篡改,控制等。
提权:操作系统低权限的账户将自己提升为管理员权限使用的方法。
跳板:使用肉鸡IP来实施攻击其他目标,以便更好的隐藏自己的身份信息。(如:黑白盒测试,反弹,C段入侵(192.168.22.22),旁站入侵,暴力破解,ATT&CK等)
渗透测试:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
DDOS攻击:DDoS攻击也叫做分布式拒绝服务攻击,可以使很多的计算机在同一时间遭受攻击,使攻击的目标无法正常使用。攻击者可以伪造自己的DNS服务器地址,同时发送大量请求给其他服务器。其他服务器的回复会被发送到被伪造服务器的真实地址,造成该服务器无法处理请求而崩溃。攻击者同样可以通过利用DNS协议中存在的漏洞,恶意创造一个载荷过大的请求,造成目标DNS服务器崩溃
DNS缓存中毒:DNS缓存中毒攻击者给DNS服务器注入非法网络域名地址,如果服务器接受这个非法地址,那说明其缓存就被攻击了,而且以后响应的域名请求将会受黑客所控。当这些非法地址进入服务器缓存,用户的浏览器或者邮件服务器就会自动跳转到DNS指定的地址。这种攻击往往被归类为域欺骗攻击(pharming attack),由此它会导致出现很多严重问题。首先,用户往往会以为登陆的是自己熟悉的网站,而它们却并不是。与钓鱼攻击采用非法URL不同的是,这种攻击使用的是合法的URL地址。
DNS劫持:域名劫持是通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。域名劫持一方面可能影响用户的上网体验,用户被引到假冒的网站进而无法正常浏览网页,而用户量较大的网站域名被劫持后恶劣影响会不断扩大;另一方面用户可能被诱骗到冒牌网站进行登录等操作导致泄露隐私数据。
ARP欺骗:ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP病毒,则感染该ARP病毒的系统将会试图通过”ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
确定范围:测试目标的范围,ip,域名,内外网。
确定规则:能渗透到什么程度,时间?能否修改上传?能否提权等。
确定需求:web应用的漏洞(新上线程序)?业务逻辑漏洞(针对业务的)?人员权限管 理漏洞(针对人员、权限)?等等。(立体全方位)
方式:主动扫描,开放搜索等
开放搜索:利用搜索引擎获得,后台,未授权页面,敏感url等。
基础信息:IP,网段,域名,端口
系统信息:操作系统版本
应用信息:各端口的应用,例如web应用,邮件应用等等
版本信息:所有这些探测到的东西的版本。
服务信息
人员信息:域名注册人员信息,web应用中网站发帖人的id,管理员姓名等。
防护信息:试着看能否探测到防护设备
利用上一步中列出的各种系统,应用等使用相应的漏洞。
方法: 1.nessus,OpenVAS、AppScan、awvs等。
2.结合漏洞去exploit-db等位置找利用。
3.在网上寻找验证poc。
内容:
1.系统漏洞:系统没有及时打补丁
2.Websever漏洞:Websever配置问题
3.Web应用漏洞:Web应用开发问题
4.其它端口服务漏洞:各种21/8080(st2)/7001/22/3389
5.通信安全:明文传输,token在cookie中传送等。
将上一步中发现的有可能可以成功利用的全部漏洞都验证一遍。结合实际情况,搭建模拟环境进行试
验。成功后再应用于目标中。
自动化验证:结合自动化扫描工具提供的结果
手工验证,根据公开资源进行验证
试验验证:自己搭建模拟环境进行验证
登陆猜解:有时可以尝试猜解一下登陆口的账号密码等信息
业务漏洞验证:如发现业务漏洞,要进行验证
公开资源的利用
-漏洞银行exploit-db/乌云wooyun/butian补天
-google hacking
-渗透代码网站
-通用、缺省口令
-厂商的漏洞警告等等。
为下一步实施渗透做准备。
精准打击:准备好上一步探测到的漏洞的exp,用来精准打击
绕过防御机制:是否有防火墙等设备,如何绕过
定制攻击路径:最佳工具路径,根据薄弱入口,高内网权限位置,最终目标
绕过检测机制:是否有检测机制,流量监控,杀毒软件,恶意代码检测等(免 杀)
攻击代码:经过试验得来的代码,包括不限于xss代码,sql注入语句等
实施攻击:根据前几步的结果,进行攻击获取内部信息:基础设施(网络连接, ,路由,拓扑等)
进一步渗透:内网入侵,敏感目标
持续性存在:一般我们对客户做渗透不需要。rookit,后门,添加管理账号, 驻扎手法等
清理痕迹:清理相关日志(访问,操作),上传文件等
整理渗透工具:整理渗透过程中用到的代码,poc,exp等
整理收集信息:整理渗透过程中收集到的一切信息
整理漏洞信息:整理渗透过程中遇到的各种漏洞,各种脆弱位置信息
目的:为了最后形成报告,形成测试结果使用。
按需整理:按照之前第一步跟客户确定好的范围,需求来整理资料,并将资料 形成报告
补充介绍:要对漏洞成因,验证过程和带来危害进行分析
修补建议:当然要对所有产生的问题提出合理高效安全的解决办法
信息收集是攻击者在实施攻击之前收集有关目标的信息的过程。下面是一些常见的信息收集攻击路径及其简单介绍:
1. 开放源代码收集:攻击者通过分析目标的开放源代码,了解目标系统的架构、漏洞和安全配置信息。这可以帮助攻击者更好地了解目标系统的弱点,并为后续攻击做准备。
2. 网络扫描:攻击者使用端口扫描工具(如Nmap)来探测目标系统上开放的网络服务和端口。通过分析扫描结果,攻击者可以确定目标系统上可能存在的漏洞和弱点。
3. 主动侦察:攻击者在互联网上主动搜索目标相关的公开信息,如目标的社交媒体账号、电子邮件地址等。这些信息可以用于社会工程等进一步的攻击。
4. 嗅探和窃听:攻击者使用嗅探工具(如Wireshark)来拦截目标系统上的网络流量,以获取敏感信息,如用户凭据、密码等。
5. 社会工程:攻击者通过欺骗和操纵人员来获取目标系统的信息。这可以包括钓鱼攻击、假冒身份等手段,通过诱骗目标人员来泄露敏感信息。
6. 操作系统和应用程序指纹识别:攻击者使用指纹识别工具(如Nmap、Wappalyzer)来识别目标系统上正在运行的操作系统和应用程序。通过识别这些信息,攻击者可以寻找已知的漏洞和攻击向量。
7. DNS侦察:攻击者通过查询目标系统的DNS记录来了解其域名和IP地址的关联,从而获取目标系统的网络架构和基础设施信息。
这些攻击路径都是为了收集目标系统的敏感信息,为后续的攻击活动提供便利。
http简介
HTTP协议,即 超文本传输协议(Hypertext transfer protocol) 。是一种详细规定了浏览器和万维网(WWW =World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
HTTP默认的端口号为80, HTTPS的端口号为443。
HTTP协议的工作流程
首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、 一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
http通信过程
1.浏览器建立与web服务器之间的连接
2.浏览器将请求数据打包(生成请求数据包)并发送到web服务器
3.web服务器将处理结果打包(生成响应数据包)并发送给浏览器
4.web服务器关闭连接
http数据包请求组成
1.请求行:请求行由三个标记组成:请求方法、请求URL和HTTP版本,它们使用空格分隔。如:GET /www.xxxx.com/index.html HTTP/1.1
2.请求头行:由关键字/值对组成,每一行头,关键字和值用冒号(:)分隔。
3.空行:最后一个请求头标之后是一个空行,发送回车符和退行,表示服务器以下不再有头标。
4.请求数据:使用post传送数据,最常用的就是Content-Type和Content-Length头标。
响应状态码
1xx —提供信息。
2xx —请求被成功提交。
3xx —客户端被重定向到其他资源。
4xx —请求包含某种错误。
5xx —服务器执行请求时遇到错误。
http和https
区别: HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理。
http和https使用连接方式不同,默认端口也不一样,http是80,https是443。
https更安全,所耗费资源也越高
HTTPS协议多次握手,导致页面的加载时间延长近50%;
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
注:https也不是绝对安全,因为https只保证了传输过程的数据安全,不能确保所访问的网页本身就是安全的网站。
SQL 注入:是一种将 SQL 代码插入或添加到应用(用户)的输入参数中,再将这些参数传递给后台的 SQL 服务器加以解析并执行。
Web服务器—伪静态网页:“伪静态”顾名思义就是一种表面上看似是静态网页(以.html、.htm等结尾),不存在任何的数据交互,却其实是动态网页,存在数据交互的网站,具有这种特性的网页被称为“伪静态网页”。我们看到的伪静态网页其实是经过处理的,将动态网页的id等参数通过URL重写来隐藏,让查看者以为是静态网页。
SQL注入典型攻击手段
判断应用程序是否存在注入漏洞
收集信息、并判断数据库类型mysql
根据注入参数类型,重构SQL语句的原貌
猜解当前库名、表名、字段名,查询数据
获取账户信息、攻击web或为下一步攻击做准备
SQL注入漏洞产生原因
1.程序员水平和经验的欠缺,对SQL注入没有防范意识。
2.现在许多教程或者模版存在SQL注入漏洞。
3.Internet上给出的许多解决办法并未从根本上解决问题。
4.数据库管理员对数据库权限设置不合理。
SQL注入危害
数据库信息泄漏
网页篡改
数据库被恶意操作
服务器被远程控制
种植木马
SQL Injection函数
user() 当前用户名
database() 当前所用数据库
current_user() 当前用户名(可用来查看权限)
version() 数据库的版本
@@datadir 数据库的路径
@@version_compile_os 操作系统版本
show global variables like 'secure%'; 查看是否有写入操作的权限
into dumpfile 写文件操作
into outfile 写文件操作
load_file() 读文件操作
concat(str1,str2..) 连接字符串,连接两个或多个数组
group_concat(str1,str2..) 连接字符串,能将相同的行组合起来
length() 计算字符串长度
hex() 字符转换为16进制
SQL注入类型
注入点类型划分
数字型注入点:http://xxx.com/news.php?id=1
字符型注入点:http://xxx.com/news.php?name=admin
搜索型注入点:http://xxx.com/news.php?keyword=admin
数据提交方式划分
Get注入:提交数据的方式是 GET , 注入点的位置在 GET 参数部分。
Post注入:使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中
Cookie注入:HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段。
http头注入:注入点在 HTTP 请求头部的某个字段中,比如存在 User-Agent 字段中。
执行效果划分
联合查询注入:可以使用union的情况下注入。
报错型注入:即页面会返回错误信息,或者把注入的语句结果直接返回在页面中。
基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)进行判断。If() ,Sleep(5)
基于布尔的盲注:即可以根据返回页面判断条件真假的注入。
堆查询注入:可以同时执行多条SQL语句的注入。
布尔盲注语法:
' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) = 101 --+
时间盲注语法:
' and if(ascii(substr(database(),1,1))=116,1,sleep(5)) --+
联合查询步骤
union操作符用于合并两个或多个select语句的结果集。
union内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条select语句中列的顺序必须相同。
Ascii码表:ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
堆叠查询:通过结束符同时执行多条sql语句
宽字节注入:当某字符的大小为两个字节时,称其字符为宽字节;常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等;主要源于程序员设置数据库编码与PHP编码设置为不同的两个编码格式从而导致产生宽字节注入
Dnslog:通过子查询,将内容拼接到域名内,让load_file()去访问共享文件,访问的域名被记录,此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。
报错注入函数
Updataxml()
Extractvalue()
Exp()
Floor()
报错注入步骤
报错查询数据库版本号 (查询语句select group_concat(version()))
报错查询当前使用的数据库名(select group_concat(database()))
报错查询当前使用的数据库用户名(select group_concat(user()))
布尔盲注
当某一页面存在注入,但是没有显示位,而且没有数据库报错信息,只能通过页面返回正常和不正常进行判断,那么需要布尔型注入。
应用程序仅仅返回True(页面)和False(页面),可以通过构造逻辑判断(比较大小)来得到我们需要的信息。
布尔盲注大致语法流程
select exists(select user());
select substr((select user()), 1, 1);
select substr((select user()), 2, 1);
select ascii("a") from dual;
select ascii(substr((select user()), 3, 1));
select ascii(substr((select user()), 3, 1)) > 100;
select ascii(substr((select user()), 3, 1)) > 120;
时间盲注
特点:页面不出现异常且无回显也无报错信息
利用:只能利用条件语句结合执行时间的长短判断payload是否正确
判断:if((1=1),sleep(3),0)
时间盲注步骤
查询数据库名 (类似于布尔注入)
查询数据库中第一张表的首字母
堆叠查询步骤
新建一张表
删除上面新建的test表
查询users表中id=1的内容和1,2,3
读取文件的内容
修改数据
宽字节注入防御
(1)使用mysql_set_charset(GBK)指定字符集
(2)使用mysql_real_escape_string进行转义
二次注入
第一步:插入恶意数据
第二步:引用恶意数据
WAF绕过
大小写混合:win服务器端检测时未开启大小写不敏感
多重关键字:服务器端检测到敏感字符时替换为空
编码:服务器端未检测或检测不严具有编码形式的关键字
注释 /*union*/:服务器端未检测或检测不严注释内的字符串
等价函数或命令 like:服务器端黑名单不完整,过滤不严
特殊符号/*!@#$@@#union*/:数据库中效果相同,服务器端却没有限制
组合绕过:服务器端检测多处位置,需要多重绕过方式组合使用
SQL注入防御
1.使用PHP替换函数。str_replace() 函数:用其他字符替换字符串中的一些字符(区分大小写),进而将单引号,双引号,通配符进行转义。
2.过滤特殊符号
3.使用正则表达式过滤传入的参数
4.分级管理
对用户进行分级管理,严格控制用户的权限,对于普通用户,禁止给予数据库建立、删除、修改等相关权限,只有系统管理员才具有增、删、改、查的权限。
5.参数传值(预编译)
程序员在书写SQL语言时,禁止将变量直接写入到SQL语句,必须通过设置相应的参数来传递相关的变量。从而抑制SQL注入。数据输入不能直接嵌入到查询语句中。同时要过滤输入的内容,过滤掉不安全的输入数据。或者采用参数传值的方式传递输入变量,这样可以最大程度防范SQL注入攻击。
6.基础过滤与二次过滤
7.使用安全参数
SQL数据库为了有效抑制SQL注入攻击的影响。在进行SQLServer数据库设计时设置了专门的SQL安全参数。在程序编写时应尽量使用安全参数来杜绝注入式攻击,从而确保系统的安全性。
8.漏洞扫描
为了更有效地防范SQL注入攻击,作为系统管理除了设置有效的防范措施,更应该及时发现系统存在SQL攻击安全漏洞。系统管理员可以采购一些SQL漏洞扫描工具,通过专业的扫描工具,可以及时的扫描到系统存在的相应漏洞。
9.多层验证
现在的网站系统功能越来越庞大复杂。为确保系统的安全,访问者的数据输入必须经过严格的验证才能进入系统,验证没通过的输入直接被拒绝访问数据库,并且向上层系统发出错误提示信息。同时在客户端访问程序中验证访问者的相关输入信息,从而更有效的防止简单的SQL注入。但是如果多层验证中的下层如果验证数据通过,那么绕过客户端的攻击者就能够随意访问系统。因此在进行多层验证时,要每个层次相互配合,只有在客户端和系统端都进行有效的验证防护,才能更好地防范SQL注入攻击。
10.数据库信息加密
XSS分类:反射型,存储型,DOM型
反射型xss:⼜称⾮持久型XSS,这种攻击⽅式往往具有⼀次性,只在⽤户单击时触发。跨站代码⼀般存在链接中,当受害者请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码通常不存储服务端。常⻅出现位置:⽹站的搜索栏、⽤户登录⼊⼝、输⼊表单等地⽅
存储型XSS:存储型XSS( Stored xss Attacks),也是持久型XSS,⽐反射型XSS更具有威胁性。攻击脚本将被永久的存放在⽬标服务器的数据库或⽂件中。这是利⽤起来最⽅便的跨站类型,跨站代码存储于服务端(⽐如数据库中)。
DOM型XSS:DoM是⽂档对象模型( Document Object Model)的缩写。它是HTML⽂档的对象表示,同时也是外部内容(例如 JavaScript)与HTML元素之间的接⼝。解析树的根节点是“ Document"对象。DOM(Document object model),使⽤DOM能够使程序和脚本能够动态访问和更新⽂档的内容、结构和样式。它是基于DoM⽂档对象的⼀种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进⾏交互
XSS的危害
盗取各种用户账号
窃取用户Cookie资料,冒充用户身份进入网站
劫持用户会话,执行任意操作
刷流量,执行弹窗广告,rce
传播蠕虫病毒
XSS常出现的位置
留言板,评论,博客日志
持久性跨站脚本,更具威胁性
渗透网站、挂马、蠕虫病毒、钓鱼
XSS漏洞防御
(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
(2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
(4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
CSRF:跨站请求伪造, 也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF,是一种挟制用户在当前已登录的 Web应用程序上执行非本意的操作的攻击方法。黑客 利用已经登录的用户,诱使其访问或者登录某个早已构造好的恶意链接或者页面,然后在用户毫不知情的情况下,以用户的名义完成了非用户本意的非法操作
CSRF简介:攻击者盗用 了受害者的身份,以受害者的名义发送恶意请求,而这种恶意请求在服务端看起来只不过是正常请求
CSRF完成攻击的步骤:1.登录受信任网站A,并在本地生成Cookie。2.在不登出A的情况下,访问危险网站B。
SSRF:是一种由攻击者构造形成,服务端发起请求的一个安全漏洞。一般情况下,SSRF的目标是目标网站的内部系统。(因为他是从内部系统访问的,所以可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
SSRF形成原因:大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据,比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
CSRF分类
GET型CSRF漏洞,只需要构造URL,然后诱导受害者访问利用
POST型CSRF漏洞,需要构造自动提交或单击提交的表单,然后诱导受害者
访问或单击利用。
CSRF防御
验证 HTTP Referer 字段:根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。
添加token验证:CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
验证码:验证码被认为是对抗CSRF攻击【最简洁有效】的防御方法
SSRF的危害
1.探测内外网的端口和服务;http、dict
2.读取目标网站的敏感数据;file
3.攻击内外网主机应用程序漏洞;gopher
4.攻击内外网Web站点漏洞
SSRF漏洞寻找
1.通过URL地址分享网页内容
2.转码服务
3.在线翻译
4.图片加载与下载
5.图片、文章收藏功能
6.未公开的api实现以及调用URL的功能
SSRF漏洞防御
1、在内网设备上建立黑名单内网IP,禁止公开服务器的访问
2、过滤返回信息,对响应用户请求的返回信息进行验证
3、禁用端口banner信息
4、禁用不必要的协议,防止file协议等
5、根据业务需求设定URL格式。防止攻击者构建攻击语句
6、统一错误信息,避免攻击者根据错误信息判断端口状态
7、限制请求端口
代码执行原理:把⽤户提交的参数作为代码去执⾏,此时称为代码注⼊。动态代码执⾏函数过滤参数不严格,导致 ⽤户输⼊数据作为服务端代码执⾏。
命令执行漏洞:命令执行漏洞是指攻击者可以随意执行系统命令。它属于高危漏洞之一, 也属于代码执行的范畴。命令执行漏洞不仅存在于B/S架构中,在C/S架构中也常常遇到,本章节我们主要讲述Web中的命令执行漏洞。 应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、 shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击, 这就是命令执行漏洞。
命令执行漏洞原理:在操作系统中,“&、|、||,&&”都可以作为命令连接符使用, 用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,从而造成漏洞。
文件包含漏洞:程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
代码执行危害
1.执行PHP代码
获取服务器内容或相关信息
2.让网站写shell
利用代码PHP代码功能,往服务器中写入shell脚本
3.控制服务器
利用shell脚本,上传大马,甚至控制服务器
代码执行常用函数
eval()函数,assert()函数,preg_replace(),create_function(),call_user_func(), call_user_func_array()等
代码执行漏洞发现
1.代码审计:最主要的方式,借助代码审计工具,非常方便的审计出此类的漏洞
2.已知的CMS漏洞:已知CMS有很多每年都会爆出来很多此类的漏洞
3.页面传参查找:针对页面有传入参数的地方,可以重点关注传入恶意代码尝试,概率相对较小
代码执行的防御
1.尽量不要使用危险函数:使用json保存属组,当读取时就不要使用eval了
2.对数据进行黑白名单处理:对于必须使用eval的地方,一定要严格处理用户的数据
3.对传入的特殊字符转义:字符串使用单引号包括可控代码,插入前使用addslashes转义(addslashes、魔术引号、htmlspecialchars、htmlentities、msql_real_escape_string)
4.放弃使用Preg-replace的e修饰符:使用preg_replace_callback()替换(preg_replace_callback()),若必须使用preg_replace的e修饰符,则必须使用单引号包裹正则匹配出的对象
命令执行漏洞成因
1.代码层过滤不严格
2.系统漏洞造成命令注入
3.第三方组件
命令执行漏洞常见函数
System()
Exec()
Passthru()
Shell_exec()
命令执行漏洞的危害
1.继承Web服务程序的权限去执行系统命令或读写文件
2.反弹shell
3.控制整个网站甚至控制服务器
4.进一步内网渗透
命令执行漏洞防御
1.不执行外部的应用程序或命令
2.使用escapeshellarg函数处理相关参数
3.使用safe_mode_exec_dir执行可执行的文件路径
文件包含漏洞的函数
Require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本。
Include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行 。
Require_once()
Include_once()
文件包含利用的条件
1.程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件
2.用户能够控制该动态变量
3.要保证php.ini中allow_url_fopen和allow_url_include要为On
文件包含漏洞分类
1.本地包含
① 可以包含本地文件,在条件允许时甚至能执行代码
② 读敏感文件,读PHP文件
③ 包含日志文件GetShell
④ 包含data:或php://input等伪协议
⑤ 若有phpinfo则可以包含临时文件
⑥ 配合上传图片马,然后包含从而GetShell
2.远程包含
包含远程的木马或病毒文件,从而GetShell
Windows常见敏感文件
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 的密码存储Windows系统初次安装
c:\ProgramFiles\mysql\my.ini//MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD//MySQL root
c:\windows\php.ini // php 配置信息
c:\windows\my.ini //Windows基本系统配置
linux常见敏感文件
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/etc/httpd/conf/httpd.conf /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/my.conf // mysql 配置文件
文件包含绕过
%00截断:allow_url_fopen=on magic_quotes_gpc=off php版本<5.3.4
....*n绕过(点号截断) :用…绕过的时候windows 系统中,点号需要长于256;linux 系统中点号要长于 4096。
长路径截断(./)
Php封装协议
php://stdin 只读协议
php://stderr 只写协议
php://input协议 利用文件包含漏洞的时候经常会碰到:file_get_contents()函数,这个函数的作用是把整 个文件读入一个字符串中。
fputs()函数的作用是写入文件
php://filter 最常用的一个伪协议,一般用来进行任意文件读取
file://[文件的绝对路径和文件名]:访问本地文件系统
phar://伪协议是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。
date://伪协议 数据流封装器,和php://相似都是利用流的概念,将原本的include的文件流重新定向到 了用户可控制的输入流中,简单来说就是执行文件的包含方法包含来你的输入流,通过你输入payload来实现目的。
XML与html差异:HTML旨在显示信息,而XML旨在传输信息。
XXE攻击原理:XML External Entity即外部实体,从安全角度理解成XML Enternal Entity attack 外部实体注入攻击。 由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生。
序列化:将对象转换成字符串或数组
反序列化:将字符串或数组转换成对象
反序列化原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。
PHP反序列化漏洞:也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。反序列化漏洞并不是PHP特有,也存在于Java、Python等语言之中,但其原理基本相通。
XML特点
XML 标签对大小写敏感
XML 必须正确的嵌套
XML 文档必须有且只有一个根元素
XML 的属性值必须加引号
XXE危害
文件读取
命令执行
内网端口扫描
攻击内网网站
发起dos攻击等
XXE检测
1.白盒:代码审计
2.黑盒: 手动: 看:Content-Type: application/xml 看数据提交格式: admin 111 看到:Content-Type: application/x-www-form-urlencoded 改成:Content-Type: application/xml 或者 text/xml
3.漏扫工具扫描
XXE防御
1.使用开发语言提供的禁用外部实体的方法
2.过滤用户提交的XML数据
序列化相关函数
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
__construct() //创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
越权漏洞:是指应⽤在检查授权时存在纰漏,使得攻击者在获得低权限⽤户账户后,利⽤⼀些⽅式绕过权限检查,访问或者操作其他⽤户或者更⾼权限。越权漏洞的成因主要是因为开发⼈员在对数据进⾏增、删、改、查询时对客户端请求的数据过分相信⽽遗漏了权限的判定。在实际的代码审计中,这种漏洞往往很难通过⼯具进⾏⾃动化监测,因此在实际应⽤中危害很⼤。其与未授权访问有⼀定差别,⽬前存在着两种越权操作类型,横向越权操作(⽔平越权)和纵向越权操作(垂直越权)
垂直越权:⽤户abc能对⽤户admin的信息进⾏修改,删除,访问等操作(abc和admin⽤户权限不同)
水平越权:⽤户abc能对⽤户xxx的信息进⾏修改,删除,访问等操作(abc和xxx⽤户权限相同)
Url重定向:URL 跳转漏洞是指后台服务器在告知浏览器跳转时,未对客户端传⼊的重定向地址进⾏合法性校验,导致⽤户浏览器跳转到钓⻥⻚⾯的⼀种漏洞。
逻辑漏洞分类
1.越权漏洞
2. 未授权访问
3. ⽀付逻辑漏洞
4. 密码重置
5. URL重定向
未授权访问
1、组件类的,如redis未授权、mongodb未授权等,也是⽐较常⻅的。对于此类漏洞,可以理解为未授权访问不需要登录即可执⾏⾥⾯的功能,所以存在未授权漏洞。
2、WEB层⾯的,如某某CMS未授权⽂件上传、未授权创建账号等。因为可以绕过登录限制进⾏操作,所以存在未授权访问漏洞。
IIS6.0解析漏洞:
⽂件解析:上传⽂件,命名为:aa.asp;.jpg
⽂件夹解析:新建⽂件夹:aaa.asp,⽂件夹下的所有⽂件都会被当成asp去解析
IIS7.5解析漏洞:
上传⽂件:aaa.jpg,访问路径:UploadFiles/image/aaa.jpg/1.php
PUT任意⽂件上传
apache解析漏洞:上传⽂件:a.php.xxx ,apache从右往左解析,解析不了,继续向前解析
cve_2021_41773:Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在⼀个路径穿越漏洞,攻击者可利⽤该漏洞读取到Web⽬录外的其他⽂件,如系统配置⽂件、⽹站源码等,甚⾄在特定情况下,攻击者可构造恶意请求执⾏命令,控制服务器
cve_2021_42013:攻击者可以使⽤路径遍历攻击将 URL 映射到由类似别名的指令配置的⽬录之外的⽂件。如果这些⽬录之外的⽂件不受通常的默认配置“要求全部拒绝”的保护,则这些请求可能会成功。如果还为这些别名路径启⽤了 CGI 脚本,则这可能允许远程代码执⾏。
nginx解析漏洞:nginx_parsing_vulnerability;上传abc.png图⽚,访问路径:/abc.png/.php
nginx⽂件名逻辑漏洞:CVE-2013-4547;上传⼀个"1.gif " ⽂件,1.gif空格;访问uploadfiles/1.gif[0x20][0x00].php
nginx任意代码执⾏漏洞(CVE-2021-23017)
tomcat后台弱⼝令:tomcat:tomcat admin:admin;登陆后台,上传war包:jar -cvf abc.war abc.jsp
tomcat PUT⽂件上传(cve_2017_12615):Apache Tomcat 7.0.0 – 7.0.81;1. 抓包修改请求⽅式为OPTIONS,查看⽀持的⽅法;2. 修改为PUT;3.访问上传的文件。
Apache Tomcat AJP ⽂件包含漏洞(CVE-2020-1938)
默认开放端⼝:7001 7000
weblogic/Oracle@123 登录控制台
WebLogic XMLDecoder反序列化漏洞(CVE-2017-3506)爆出weblogic的WLS组件存在xmldecoder反序列化漏洞,直接post构造的xml数据包即可rce。
影响版本:10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0。
Weblogic T3协议反序列化(CVE-2018-2628)漏洞
影响版本:Weblogic 10.3.6.0 Weblogic 12.1.3.0 Weblogic 12.2.1.2 Weblogic 12.2.1.3
Weblogic(CVE-2019-2725)漏洞
Weblogic未授权访问-CVE-2020-14882 && 命令执⾏-CVE-2020-14883
Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞
cve-2021-2394
thinkphp,Laravel,shiro,spring,spring boot
● spring
Spring Cloud Function SPEL 远程代码执⾏
3.令牌窃取
RottenPotato提权
4.BypassUAC绕过
5.Psexec提权
6.第三方软件提权
权限维持:是指攻击者在成功入侵目标系统后,为了长期维持对系统的控制和访问权限。
权限维持方法
权限维持防御
天眼=IDS+WAF+数据库审计系统+上网行为审计+内部合规审计
流量传感器:采集与还原流量信息,还原应用协议信息,记录文件传输行为、邮件行为与数据库行为,检测入侵行为与web攻击行为。(旁路模式)旁路阻断的三种方式:①URL重定向:http_redirect、②IP阻断:tcp_reset、③DNS重定向:dns_redirect
文件威胁鉴定器:文件静态检测、动态检测,分析文件行为。
分析平台:威胁感知系统:基于云端情报的木马发现机制、展示本地已经遭受入侵的IP;回溯搜索:对历史被攻击情况的回溯,能够对本地镜像流量进行大数据存储和检索。
流量传感器-沙箱:6666 流量传感器-分析平台:7755 沙箱-分析平台:9955
字段:项 运算符 字段:项
运算符:AND 运算符(AND、&& 或 +)、OR 运算符(OR 或 ||)、NOT 运算符(NOT、! 或 -)。(注意:运算符一定要大写!!)
项:项(单词),短语(""),分组(优先运算符-将字符串括在括号 ( ) 中)
字段:通用字段:sip,dip,dport,sport,serial_num
协议字段: sql_info,up_payload,proto,dns_type,addr,uri,status, method,agent,data,server_name,attach_md5,db_type,normal_ret, ret_code,host
通配符:? 匹配单个字符,* 匹配0到多个字符。(注意:通配符不能用作数字检索,使用时不能加双引号!)
范围搜索:[ TO ] 表示端点数值包含在范围内,{ TO } 表示端点数值不包含在范围内,可以混合使用。也可写作:>、<、<=、>=。
模糊搜索:(~),项的末尾使用波浪符号,即可执行模糊搜索。即使搜索项拼错或仅指定部分单词也找出匹配项的搜索(使用时不能加双引号!)
近似搜索:短语后面加上(~),可以搜到被隔开或顺序不同的单词
正则搜索(性能较差)、转义搜索(转义特殊字符)、二级检索(在原有搜索语句进行二次搜索)
网络模型:OSI七层模型,TCP/IP五层模型
NAT协议:地址转换协议
web架构:web服务器、应用服务器、数据库服务器、负载均衡(四层负载均衡-转发、七层负载均衡-代理)
密码编码学:对称密码体制(DES、AES)、非对称密码体制(RSA、椭圆曲线)、单向散列函数(MD5、SHA1、SHA256)、编码(url、base64、hex)
木马:远控木马、挖矿木马(挖矿:运行特定的计算公式,试图计算出符合特定规则的Hash值)。
接收攻击指令(横向攻击,DDOS,挖矿,加密信息等)、
上传机器信息(机器名,安全程序名,机器码等)、
下载其他恶意程序或更新自身程序等等。
勒索软件:修复文件、修复数据。(预防大于修复)
威胁情报/IOC:威胁资产的情报信息。IOC:主机或网络失陷的特征,可以是域名、IP、IP+端口、MD5值、URL。
1)规则类告警:信息泄露、文件包含、sql注入、XML注入、文件上传、命令执行、框架代码执行、木马外联等
结果分析(告警详情):
2)情报类告警
a. 定位受害资产:分析威胁情报上下文
b. 分析IOC情报信息:确认IOC的有效性以及流量特征
c. 分析受害资产与攻击者(域名或IP)的交互流量:确认是否符合上一步收集的IOC流量特征,分析有无后续流量
d. 误报分析:邮服机制、DNS对外开放、安全设备、用户触发、伪造地址扫描等等
3)扫描行为分析:web扫描、主机扫描、其他扫描
一段时间内单个ip对单个host或ip发起大量连接请求(uri不同,端口不同,且极大多数结果为404)